@aztec/simulator 0.0.1-commit.993d52e → 0.0.1-commit.9a89641

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 (351) hide show
  1. package/dest/client.d.ts +1 -3
  2. package/dest/client.d.ts.map +1 -1
  3. package/dest/client.js +0 -2
  4. package/dest/private/acvm_wasm.d.ts +1 -1
  5. package/dest/private/acvm_wasm.d.ts.map +1 -1
  6. package/dest/private/acvm_wasm.js +3 -1
  7. package/dest/private/circuit_recording/circuit_recorder.d.ts +36 -23
  8. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  9. package/dest/private/circuit_recording/circuit_recorder.js +65 -69
  10. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +7 -19
  11. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  12. package/dest/private/circuit_recording/file_circuit_recorder.js +38 -42
  13. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
  14. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  15. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
  16. package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
  17. package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
  18. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +2 -1
  19. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
  20. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +18 -3
  21. package/dest/public/avm/testing/utils.d.ts +32 -0
  22. package/dest/public/avm/testing/utils.d.ts.map +1 -0
  23. package/dest/public/avm/{fixtures → testing}/utils.js +4 -34
  24. package/dest/public/avm_simulator.d.ts +28 -0
  25. package/dest/public/avm_simulator.d.ts.map +1 -0
  26. package/dest/public/avm_simulator.js +4 -0
  27. package/dest/public/avm_simulator_pool.d.ts +45 -0
  28. package/dest/public/avm_simulator_pool.d.ts.map +1 -0
  29. package/dest/public/avm_simulator_pool.js +197 -0
  30. package/dest/public/cdb_ipc_server.d.ts +40 -0
  31. package/dest/public/cdb_ipc_server.d.ts.map +1 -0
  32. package/dest/public/cdb_ipc_server.js +153 -0
  33. package/dest/public/contracts_db_checkpoint.d.ts +2 -2
  34. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
  35. package/dest/public/contracts_db_checkpoint.js +1 -1
  36. package/dest/public/fixtures/amm_test.js +2 -2
  37. package/dest/public/fixtures/bulk_test.d.ts +1 -1
  38. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  39. package/dest/public/fixtures/bulk_test.js +33 -6
  40. package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
  41. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  42. package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
  43. package/dest/public/fixtures/index.d.ts +2 -4
  44. package/dest/public/fixtures/index.d.ts.map +1 -1
  45. package/dest/public/fixtures/index.js +1 -3
  46. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  47. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  48. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  49. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +12 -7
  50. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  51. package/dest/public/fixtures/public_tx_simulation_tester.js +32 -15
  52. package/dest/public/fixtures/simple_contract_data_source.js +1 -1
  53. package/dest/public/fixtures/token_test.js +3 -3
  54. package/dest/public/fixtures/utils.d.ts +2 -2
  55. package/dest/public/fixtures/utils.d.ts.map +1 -1
  56. package/dest/public/fixtures/utils.js +17 -16
  57. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
  58. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  59. package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
  60. package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
  61. package/dest/public/index.d.ts +5 -2
  62. package/dest/public/index.d.ts.map +1 -1
  63. package/dest/public/index.js +2 -1
  64. package/dest/public/public_db_sources.d.ts +6 -3
  65. package/dest/public/public_db_sources.d.ts.map +1 -1
  66. package/dest/public/public_db_sources.js +16 -10
  67. package/dest/public/public_processor/guarded_merkle_tree.d.ts +7 -6
  68. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  69. package/dest/public/public_processor/guarded_merkle_tree.js +7 -4
  70. package/dest/public/public_processor/public_processor.d.ts +12 -7
  71. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  72. package/dest/public/public_processor/public_processor.js +103 -74
  73. package/dest/public/public_processor/public_processor_metrics.d.ts +4 -1
  74. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  75. package/dest/public/public_processor/public_processor_metrics.js +8 -0
  76. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  77. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  78. package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
  79. package/dest/public/public_tx_simulator/factories.d.ts +8 -8
  80. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
  81. package/dest/public/public_tx_simulator/factories.js +8 -8
  82. package/dest/public/public_tx_simulator/index.d.ts +4 -6
  83. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  84. package/dest/public/public_tx_simulator/index.js +2 -4
  85. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -71
  86. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  87. package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -318
  88. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  89. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  90. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  91. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
  92. package/package.json +20 -18
  93. package/src/client.ts +0 -2
  94. package/src/private/acvm_wasm.ts +4 -1
  95. package/src/private/circuit_recording/circuit_recorder.ts +84 -78
  96. package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
  97. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
  98. package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
  99. package/src/public/avm/{fixtures → testing}/utils.ts +4 -40
  100. package/src/public/avm_simulator.ts +29 -0
  101. package/src/public/avm_simulator_pool.ts +226 -0
  102. package/src/public/cdb_ipc_server.ts +198 -0
  103. package/src/public/contracts_db_checkpoint.ts +1 -1
  104. package/src/public/fixtures/amm_test.ts +2 -2
  105. package/src/public/fixtures/bulk_test.ts +31 -6
  106. package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
  107. package/src/public/fixtures/index.ts +1 -3
  108. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  109. package/src/public/fixtures/public_tx_simulation_tester.ts +44 -25
  110. package/src/public/fixtures/simple_contract_data_source.ts +1 -1
  111. package/src/public/fixtures/token_test.ts +3 -3
  112. package/src/public/fixtures/utils.ts +19 -20
  113. package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
  114. package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
  115. package/src/public/index.ts +7 -3
  116. package/src/public/public_db_sources.ts +21 -14
  117. package/src/public/public_processor/guarded_merkle_tree.ts +10 -7
  118. package/src/public/public_processor/public_processor.ts +134 -87
  119. package/src/public/public_processor/public_processor_metrics.ts +12 -0
  120. package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
  121. package/src/public/public_tx_simulator/factories.ts +27 -10
  122. package/src/public/public_tx_simulator/index.ts +6 -5
  123. package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -476
  124. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  125. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
  126. package/dest/public/avm/avm_context.d.ts +0 -41
  127. package/dest/public/avm/avm_context.d.ts.map +0 -1
  128. package/dest/public/avm/avm_context.js +0 -44
  129. package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
  130. package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
  131. package/dest/public/avm/avm_contract_call_result.js +0 -54
  132. package/dest/public/avm/avm_execution_environment.d.ts +0 -24
  133. package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
  134. package/dest/public/avm/avm_execution_environment.js +0 -33
  135. package/dest/public/avm/avm_gas.d.ts +0 -44
  136. package/dest/public/avm/avm_gas.d.ts.map +0 -1
  137. package/dest/public/avm/avm_gas.js +0 -195
  138. package/dest/public/avm/avm_machine_state.d.ts +0 -98
  139. package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
  140. package/dest/public/avm/avm_machine_state.js +0 -110
  141. package/dest/public/avm/avm_memory_types.d.ts +0 -275
  142. package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
  143. package/dest/public/avm/avm_memory_types.js +0 -354
  144. package/dest/public/avm/avm_simulator.d.ts +0 -41
  145. package/dest/public/avm/avm_simulator.d.ts.map +0 -1
  146. package/dest/public/avm/avm_simulator.js +0 -192
  147. package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
  148. package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
  149. package/dest/public/avm/avm_simulator_interface.js +0 -3
  150. package/dest/public/avm/calldata.d.ts +0 -51
  151. package/dest/public/avm/calldata.d.ts.map +0 -1
  152. package/dest/public/avm/calldata.js +0 -63
  153. package/dest/public/avm/errors.d.ts +0 -104
  154. package/dest/public/avm/errors.d.ts.map +0 -1
  155. package/dest/public/avm/errors.js +0 -141
  156. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +0 -2
  157. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +0 -1
  158. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
  159. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  160. package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -84
  161. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  162. package/dest/public/avm/fixtures/initializers.d.ts +0 -42
  163. package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
  164. package/dest/public/avm/fixtures/initializers.js +0 -45
  165. package/dest/public/avm/fixtures/utils.d.ts +0 -39
  166. package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
  167. package/dest/public/avm/index.d.ts +0 -2
  168. package/dest/public/avm/index.d.ts.map +0 -1
  169. package/dest/public/avm/index.js +0 -1
  170. package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -74
  171. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
  172. package/dest/public/avm/opcodes/accrued_substate.js +0 -254
  173. package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
  174. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
  175. package/dest/public/avm/opcodes/addressing_mode.js +0 -94
  176. package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
  177. package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
  178. package/dest/public/avm/opcodes/arithmetic.js +0 -97
  179. package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
  180. package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
  181. package/dest/public/avm/opcodes/bitwise.js +0 -99
  182. package/dest/public/avm/opcodes/comparators.d.ts +0 -25
  183. package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
  184. package/dest/public/avm/opcodes/comparators.js +0 -43
  185. package/dest/public/avm/opcodes/contract.d.ts +0 -20
  186. package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
  187. package/dest/public/avm/opcodes/contract.js +0 -65
  188. package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
  189. package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
  190. package/dest/public/avm/opcodes/control_flow.js +0 -107
  191. package/dest/public/avm/opcodes/conversion.d.ts +0 -18
  192. package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
  193. package/dest/public/avm/opcodes/conversion.js +0 -333
  194. package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
  195. package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
  196. package/dest/public/avm/opcodes/ec_add.js +0 -93
  197. package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
  198. package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
  199. package/dest/public/avm/opcodes/environment_getters.js +0 -77
  200. package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
  201. package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
  202. package/dest/public/avm/opcodes/external_calls.js +0 -210
  203. package/dest/public/avm/opcodes/hashing.d.ts +0 -36
  204. package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
  205. package/dest/public/avm/opcodes/hashing.js +0 -119
  206. package/dest/public/avm/opcodes/index.d.ts +0 -16
  207. package/dest/public/avm/opcodes/index.d.ts.map +0 -1
  208. package/dest/public/avm/opcodes/index.js +0 -15
  209. package/dest/public/avm/opcodes/instruction.d.ts +0 -74
  210. package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
  211. package/dest/public/avm/opcodes/instruction.js +0 -95
  212. package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
  213. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
  214. package/dest/public/avm/opcodes/instruction_impl.js +0 -30
  215. package/dest/public/avm/opcodes/memory.d.ts +0 -74
  216. package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
  217. package/dest/public/avm/opcodes/memory.js +0 -257
  218. package/dest/public/avm/opcodes/misc.d.ts +0 -18
  219. package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
  220. package/dest/public/avm/opcodes/misc.js +0 -73
  221. package/dest/public/avm/opcodes/storage.d.ts +0 -25
  222. package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
  223. package/dest/public/avm/opcodes/storage.js +0 -78
  224. package/dest/public/avm/revert_reason.d.ts +0 -18
  225. package/dest/public/avm/revert_reason.d.ts.map +0 -1
  226. package/dest/public/avm/revert_reason.js +0 -39
  227. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
  228. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
  229. package/dest/public/avm/serialization/buffer_cursor.js +0 -99
  230. package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
  231. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  232. package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
  233. package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
  234. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
  235. package/dest/public/avm/serialization/instruction_serialization.js +0 -261
  236. package/dest/public/avm/test_utils.d.ts +0 -15
  237. package/dest/public/avm/test_utils.d.ts.map +0 -1
  238. package/dest/public/avm/test_utils.js +0 -44
  239. package/dest/public/debug_fn_name.d.ts +0 -18
  240. package/dest/public/debug_fn_name.d.ts.map +0 -1
  241. package/dest/public/debug_fn_name.js +0 -37
  242. package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -12
  243. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
  244. package/dest/public/fixtures/custom_bytecode_tests.js +0 -174
  245. package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
  246. package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
  247. package/dest/public/fixtures/minimal_public_tx.js +0 -19
  248. package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
  249. package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
  250. package/dest/public/fixtures/opcode_spammer.js +0 -1653
  251. package/dest/public/hinting_db_sources.d.ts +0 -80
  252. package/dest/public/hinting_db_sources.d.ts.map +0 -1
  253. package/dest/public/hinting_db_sources.js +0 -355
  254. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
  255. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
  256. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -98
  257. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
  258. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
  259. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -131
  260. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
  261. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
  262. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
  263. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
  264. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
  265. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
  266. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
  267. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
  268. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
  269. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
  270. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
  271. package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -131
  272. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
  273. package/dest/public/public_tx_simulator/public_tx_context.js +0 -300
  274. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
  275. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
  276. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
  277. package/dest/public/side_effect_trace.d.ts +0 -87
  278. package/dest/public/side_effect_trace.d.ts.map +0 -1
  279. package/dest/public/side_effect_trace.js +0 -199
  280. package/dest/public/side_effect_trace_interface.d.ts +0 -22
  281. package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
  282. package/dest/public/side_effect_trace_interface.js +0 -1
  283. package/dest/public/state_manager/index.d.ts +0 -2
  284. package/dest/public/state_manager/index.d.ts.map +0 -1
  285. package/dest/public/state_manager/index.js +0 -1
  286. package/dest/public/state_manager/nullifiers.d.ts +0 -61
  287. package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
  288. package/dest/public/state_manager/nullifiers.js +0 -92
  289. package/dest/public/state_manager/public_storage.d.ts +0 -66
  290. package/dest/public/state_manager/public_storage.d.ts.map +0 -1
  291. package/dest/public/state_manager/public_storage.js +0 -145
  292. package/dest/public/state_manager/state_manager.d.ts +0 -170
  293. package/dest/public/state_manager/state_manager.d.ts.map +0 -1
  294. package/dest/public/state_manager/state_manager.js +0 -402
  295. package/src/public/avm/avm_context.ts +0 -61
  296. package/src/public/avm/avm_contract_call_result.ts +0 -69
  297. package/src/public/avm/avm_execution_environment.ts +0 -51
  298. package/src/public/avm/avm_gas.ts +0 -183
  299. package/src/public/avm/avm_machine_state.ts +0 -170
  300. package/src/public/avm/avm_memory_types.ts +0 -440
  301. package/src/public/avm/avm_simulator.ts +0 -279
  302. package/src/public/avm/avm_simulator_interface.ts +0 -8
  303. package/src/public/avm/calldata.ts +0 -100
  304. package/src/public/avm/errors.ts +0 -177
  305. package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
  306. package/src/public/avm/fixtures/initializers.ts +0 -103
  307. package/src/public/avm/index.ts +0 -1
  308. package/src/public/avm/opcodes/accrued_substate.ts +0 -285
  309. package/src/public/avm/opcodes/addressing_mode.ts +0 -111
  310. package/src/public/avm/opcodes/arithmetic.ts +0 -129
  311. package/src/public/avm/opcodes/bitwise.ts +0 -113
  312. package/src/public/avm/opcodes/comparators.ts +0 -55
  313. package/src/public/avm/opcodes/contract.ts +0 -72
  314. package/src/public/avm/opcodes/control_flow.ts +0 -123
  315. package/src/public/avm/opcodes/conversion.ts +0 -104
  316. package/src/public/avm/opcodes/ec_add.ts +0 -105
  317. package/src/public/avm/opcodes/environment_getters.ts +0 -87
  318. package/src/public/avm/opcodes/external_calls.ts +0 -262
  319. package/src/public/avm/opcodes/hashing.ts +0 -151
  320. package/src/public/avm/opcodes/index.ts +0 -15
  321. package/src/public/avm/opcodes/instruction.ts +0 -136
  322. package/src/public/avm/opcodes/instruction_impl.ts +0 -36
  323. package/src/public/avm/opcodes/memory.ts +0 -293
  324. package/src/public/avm/opcodes/misc.ts +0 -102
  325. package/src/public/avm/opcodes/storage.ts +0 -95
  326. package/src/public/avm/revert_reason.ts +0 -58
  327. package/src/public/avm/serialization/buffer_cursor.ts +0 -118
  328. package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
  329. package/src/public/avm/serialization/instruction_serialization.ts +0 -249
  330. package/src/public/avm/test_utils.ts +0 -64
  331. package/src/public/debug_fn_name.ts +0 -52
  332. package/src/public/fixtures/custom_bytecode_tests.ts +0 -228
  333. package/src/public/fixtures/minimal_public_tx.ts +0 -26
  334. package/src/public/fixtures/opcode_spammer.ts +0 -1717
  335. package/src/public/hinting_db_sources.ts +0 -607
  336. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -124
  337. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -210
  338. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
  339. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
  340. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
  341. package/src/public/public_tx_simulator/public_tx_context.ts +0 -484
  342. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
  343. package/src/public/side_effect_trace.ts +0 -293
  344. package/src/public/side_effect_trace_interface.ts +0 -28
  345. package/src/public/state_manager/index.ts +0 -1
  346. package/src/public/state_manager/nullifiers.ts +0 -103
  347. package/src/public/state_manager/public_storage.ts +0 -174
  348. package/src/public/state_manager/state_manager.ts +0 -569
  349. /package/dest/public/avm/{fixtures → testing}/account_proof_fetcher.js +0 -0
  350. /package/src/public/avm/{fixtures → testing}/account_proof.json +0 -0
  351. /package/src/public/avm/{fixtures → testing}/account_proof_fetcher.ts +0 -0
@@ -3,7 +3,7 @@ import { padArrayEnd } from '@aztec/foundation/collection';
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
4
  import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
5
5
  import { sleep } from '@aztec/foundation/sleep';
6
- import { DateProvider, Timer, elapsed, executeTimeout } from '@aztec/foundation/timer';
6
+ import { DateProvider, Timer, elapsed, execWithSignal } from '@aztec/foundation/timer';
7
7
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
8
8
  import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
9
9
  import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
@@ -50,11 +50,12 @@ import { ForkCheckpoint } from '@aztec/world-state/native';
50
50
 
51
51
  import { AssertionError } from 'assert';
52
52
 
53
+ import type { AvmSimulator } from '../avm_simulator.js';
53
54
  import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
54
55
  import {
55
56
  type PublicTxSimulatorConfig,
56
57
  type PublicTxSimulatorInterface,
57
- TelemetryCppPublicTxSimulator,
58
+ TelemetryPublicTxSimulator,
58
59
  } from '../public_tx_simulator/index.js';
59
60
  import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
60
61
  import { PublicProcessorMetrics } from './public_processor_metrics.js';
@@ -66,6 +67,7 @@ export class PublicProcessorFactory {
66
67
  private log: Logger;
67
68
  constructor(
68
69
  private contractDataSource: ContractDataSource,
70
+ private avmSimulator: AvmSimulator,
69
71
  private dateProvider: DateProvider = new DateProvider(),
70
72
  protected telemetryClient: TelemetryClient = getTelemetryClient(),
71
73
  bindings?: LoggerBindings,
@@ -74,21 +76,23 @@ export class PublicProcessorFactory {
74
76
  }
75
77
 
76
78
  /**
77
- * Creates a new instance of a PublicProcessor.
79
+ * Creates a new instance of a PublicProcessor. The simulator it drives reads contract data from the fork's
80
+ * contracts DB, scoped by the fork id so AVM requests route to the right state.
81
+ *
78
82
  * @param globalVariables - The global variables for the block being processed.
79
- * @param skipFeeEnforcement - Allows disabling balance checks for fee estimations.
83
+ * @param contractsDB - Optional pre-populated contracts DB; a fresh one is constructed if omitted.
80
84
  * @returns A new instance of a PublicProcessor.
81
85
  */
82
86
  public create(
83
87
  merkleTree: MerkleTreeWriteOperations,
84
88
  globalVariables: GlobalVariables,
85
89
  config: PublicSimulatorConfig,
90
+ contractsDB: PublicContractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings()),
86
91
  ): PublicProcessor {
87
- const bindings = this.log.getBindings();
88
- const contractsDB = new PublicContractsDB(this.contractDataSource, bindings);
92
+ const forkId = merkleTree.getRevision().forkId;
89
93
 
90
94
  const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
91
- const publicTxSimulator = this.createPublicTxSimulator(guardedFork, contractsDB, globalVariables, config);
95
+ const publicTxSimulator = this.createPublicTxSimulator(forkId, globalVariables, contractsDB, config);
92
96
 
93
97
  return new PublicProcessor(
94
98
  globalVariables,
@@ -97,20 +101,21 @@ export class PublicProcessorFactory {
97
101
  publicTxSimulator,
98
102
  this.dateProvider,
99
103
  this.telemetryClient,
100
- createLogger('simulator:public-processor', bindings),
104
+ createLogger('simulator:public-processor', this.log.getBindings()),
101
105
  );
102
106
  }
103
107
 
104
108
  protected createPublicTxSimulator(
105
- merkleTree: MerkleTreeWriteOperations,
106
- contractsDB: PublicContractsDB,
109
+ forkId: number,
107
110
  globalVariables: GlobalVariables,
111
+ contractsDB: PublicContractsDB,
108
112
  config?: Partial<PublicTxSimulatorConfig>,
109
113
  ): PublicTxSimulatorInterface {
110
- return new TelemetryCppPublicTxSimulator(
111
- merkleTree,
112
- contractsDB,
114
+ return new TelemetryPublicTxSimulator(
115
+ this.avmSimulator,
113
116
  globalVariables,
117
+ contractsDB,
118
+ forkId,
114
119
  this.telemetryClient,
115
120
  config,
116
121
  this.log.getBindings(),
@@ -125,6 +130,13 @@ class PublicProcessorTimeoutError extends Error {
125
130
  }
126
131
  }
127
132
 
133
+ class PublicProcessorAbortError extends Error {
134
+ constructor(message: string = 'Aborted while processing tx') {
135
+ super(message);
136
+ this.name = 'PublicProcessorAbortError';
137
+ }
138
+ }
139
+
128
140
  /**
129
141
  * Converts Txs lifted from the P2P module into ProcessedTx objects by executing
130
142
  * any public function calls in them. Txs with private calls only are unaffected.
@@ -160,8 +172,8 @@ export class PublicProcessor implements Traceable {
160
172
  txs: Iterable<Tx> | AsyncIterable<Tx>,
161
173
  limits: PublicProcessorLimits = {},
162
174
  validator: PublicProcessorValidator = {},
163
- ): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], number, DebugLog[]]> {
164
- const { maxTransactions, maxBlockSize, deadline, maxBlockGas, maxBlobFields } = limits;
175
+ ): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], DebugLog[]]> {
176
+ const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal, signal } = limits;
165
177
  const { preprocessValidator, nullifierCache } = validator;
166
178
  const result: ProcessedTx[] = [];
167
179
  const usedTxs: Tx[] = [];
@@ -174,6 +186,8 @@ export class PublicProcessor implements Traceable {
174
186
  let totalPublicGas = new Gas(0, 0);
175
187
  let totalBlockGas = new Gas(0, 0);
176
188
  let totalBlobFields = 0;
189
+ let silentlySkippedCount = 0;
190
+ let totalSilentlySkippedDurationMs = 0;
177
191
 
178
192
  for await (const tx of txs) {
179
193
  // Only process up to the max tx limit
@@ -182,28 +196,33 @@ export class PublicProcessor implements Traceable {
182
196
  break;
183
197
  }
184
198
 
185
- // Bail if we've hit the deadline
199
+ // Bail if we've hit the deadline or have been interrupted.
186
200
  if (deadline && this.dateProvider.now() > +deadline) {
187
201
  this.log.warn(`Stopping tx processing due to timeout.`);
188
202
  break;
189
203
  }
204
+ if (signal?.aborted) {
205
+ this.log.warn(`Stopping tx processing due to abort signal.`);
206
+ break;
207
+ }
190
208
 
191
- // Skip this tx if it'd exceed max block size
192
209
  const txHash = tx.getTxHash().toString();
193
- const preTxSizeInBytes = tx.getEstimatedPrivateTxEffectsSize();
194
- if (maxBlockSize !== undefined && totalSizeInBytes + preTxSizeInBytes > maxBlockSize) {
195
- this.log.warn(`Skipping processing of tx ${txHash} sized ${preTxSizeInBytes} bytes due to block size limit`, {
196
- txHash,
197
- sizeInBytes: preTxSizeInBytes,
198
- totalSizeInBytes,
199
- maxBlockSize,
200
- });
210
+
211
+ // Skip this tx if its estimated blob fields would exceed the limit.
212
+ // Only done during proposal building: during re-execution we must process the exact txs from the proposal.
213
+ const txBlobFields = tx.getPrivateTxEffectsSizeInFields();
214
+ if (isBuildingProposal && maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
215
+ this.log.warn(
216
+ `Skipping tx ${txHash} with ${txBlobFields} fields from private side effects due to blob fields limit`,
217
+ { txHash, txBlobFields, totalBlobFields, maxBlobFields },
218
+ );
201
219
  continue;
202
220
  }
203
221
 
204
- // Skip this tx if its gas limit would exceed the block gas limit
222
+ // Skip this tx if its gas limit would exceed the block gas limit (either da or l2).
223
+ // Only done during proposal building: during re-execution we must process the exact txs from the proposal.
205
224
  const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
206
- if (maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
225
+ if (isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
207
226
  this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
208
227
  txHash,
209
228
  txGasLimit,
@@ -223,11 +242,6 @@ export class PublicProcessor implements Traceable {
223
242
  failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
224
243
  returns.push(new NestedProcessReturnValues([]));
225
244
  continue;
226
- } else if (result.result === 'skipped') {
227
- const reason = result.reason.join(', ');
228
- this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
229
- returns.push(new NestedProcessReturnValues([]));
230
- continue;
231
245
  } else {
232
246
  this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
233
247
  }
@@ -243,7 +257,9 @@ export class PublicProcessor implements Traceable {
243
257
  this.contractsDB.createCheckpoint();
244
258
 
245
259
  try {
246
- const [processedTx, returnValues, txDebugLogs] = await this.processTx(tx, deadline);
260
+ const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(() =>
261
+ this.processTx(tx, deadline, signal),
262
+ );
247
263
 
248
264
  // Inject a fake processing failure after N txs if requested
249
265
  const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
@@ -252,23 +268,9 @@ export class PublicProcessor implements Traceable {
252
268
  }
253
269
 
254
270
  const txBlobFields = processedTx.txEffect.getNumBlobFields();
255
-
256
- // If the actual size of this tx would exceed block size, skip it
257
271
  const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
258
- if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
259
- this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
260
- txHash,
261
- sizeInBytes: txSize,
262
- totalSizeInBytes,
263
- maxBlockSize,
264
- });
265
- // Need to revert the checkpoint here and don't go any further
266
- await checkpoint.revert();
267
- this.contractsDB.revertCheckpoint();
268
- continue;
269
- }
270
272
 
271
- // If the actual blob fields of this tx would exceed the limit, skip it
273
+ // If the actual blob fields of this tx would exceed the limit, skip it.
272
274
  // Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
273
275
  if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
274
276
  this.log.debug(
@@ -278,14 +280,37 @@ export class PublicProcessor implements Traceable {
278
280
  txBlobFields,
279
281
  totalBlobFields,
280
282
  maxBlobFields,
283
+ txProcessingTimeMs,
281
284
  },
282
285
  );
286
+ silentlySkippedCount += 1;
287
+ totalSilentlySkippedDurationMs += txProcessingTimeMs;
288
+ this.metrics.recordSilentlySkipped(txProcessingTimeMs);
283
289
  // Need to revert the checkpoint here and don't go any further
284
290
  await checkpoint.revert();
285
291
  this.contractsDB.revertCheckpoint();
286
292
  continue;
287
293
  }
288
294
 
295
+ // During re-execution, check if the actual gas used by this tx would push the block over the gas limit.
296
+ // Unlike the proposal-building check (which uses declared gas limits pessimistically before processing),
297
+ // this uses actual gas and stops processing when the limit is exceeded.
298
+ if (
299
+ !isBuildingProposal &&
300
+ maxBlockGas !== undefined &&
301
+ totalBlockGas.add(processedTx.gasUsed.totalGas).gtAny(maxBlockGas)
302
+ ) {
303
+ this.log.warn(`Stopping re-execution since tx ${txHash} would push block gas over limit`, {
304
+ txHash,
305
+ txGas: processedTx.gasUsed.totalGas,
306
+ totalBlockGas,
307
+ maxBlockGas,
308
+ });
309
+ await checkpoint.revert();
310
+ this.contractsDB.revertCheckpoint();
311
+ break;
312
+ }
313
+
289
314
  // FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
290
315
  // I'd rather pass the validators the processedTx as well and let them deal with it.
291
316
  nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
@@ -300,16 +325,19 @@ export class PublicProcessor implements Traceable {
300
325
  totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
301
326
  totalSizeInBytes += txSize;
302
327
  totalBlobFields += txBlobFields;
328
+
329
+ // Commit the tx-level contracts checkpoint on success
330
+ this.contractsDB.commitCheckpoint();
303
331
  } catch (err: any) {
304
- if (err?.name === 'PublicProcessorTimeoutError') {
305
- this.log.warn(`Stopping tx processing due to timeout.`);
306
- // We hit the transaction execution deadline.
307
- // There may still be a transaction executing on a worker thread (C++ via NAPI).
308
- // Signal cancellation AND WAIT for the simulation to actually stop.
309
- // This is critical because C++ might be in the middle of a slow operation (e.g., pad_trees)
310
- // and won't check the cancellation flag until that operation completes.
311
- // Without waiting, we'd proceed to revert checkpoints while C++ is still writing to state.
312
- // Wait for C++ to stop gracefully.
332
+ if (err?.name === 'PublicProcessorTimeoutError' || err?.name === 'PublicProcessorAbortError') {
333
+ this.log.warn(
334
+ `Stopping tx processing due to ${err.name === 'PublicProcessorTimeoutError' ? 'timeout' : 'abort'}.`,
335
+ );
336
+ // We hit the transaction execution deadline or an external abort signal.
337
+ // There may still be a simulation in progress.
338
+ // Signal cancellation AND WAIT for the simulation to actually stop. Cancellation is
339
+ // cooperative: the simulator may be mid slow-operation and won't observe the flag until it
340
+ // completes, and without waiting we'd revert checkpoints while it's still writing to state.
313
341
  await this.publicTxSimulator.cancel?.();
314
342
 
315
343
  // Now stop the guarded fork to prevent any further TS-side access to the world state.
@@ -319,14 +347,10 @@ export class PublicProcessor implements Traceable {
319
347
  // 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
320
348
  // 2. Possible state updates on that checkpoint or any others created during execution.
321
349
 
322
- // First we revert a checkpoint as managed by the ForkCheckpoint. This will revert whatever is the current checkpoint
323
- // which may not be the one originally created by this object. But that is ok, we do this to fulfil the ForkCheckpoint
324
- // lifecycle expectations and ensure it doesn't attempt to commit later on.
325
- await checkpoint.revert();
326
-
327
- // Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
328
- // This needs to be done directly on the underlying fork as the guarded fork has been stopped.
329
- await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
350
+ // Revert all checkpoints at or above this checkpoint's depth (inclusive), destroying any outstanding state
351
+ // updates from this tx and any nested checkpoints created during execution. This preserves any checkpoints
352
+ // created by callers below our depth.
353
+ await checkpoint.revertToCheckpoint();
330
354
 
331
355
  // Revert any contracts added to the DB for the tx.
332
356
  this.contractsDB.revertCheckpoint();
@@ -338,9 +362,9 @@ export class PublicProcessor implements Traceable {
338
362
  break;
339
363
  }
340
364
 
341
- // Roll back state to start of TX before proceeding to next TX
342
- await checkpoint.revert();
343
- await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
365
+ // Roll back state to start of TX before proceeding to next TX.
366
+ // Reverts all checkpoints at or above this checkpoint's depth, preserving any caller checkpoints below.
367
+ await checkpoint.revertToCheckpoint();
344
368
  this.contractsDB.revertCheckpoint();
345
369
  const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
346
370
  this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
@@ -352,7 +376,6 @@ export class PublicProcessor implements Traceable {
352
376
  } finally {
353
377
  // Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
354
378
  await checkpoint.commit();
355
- this.contractsDB.commitCheckpointOkIfNone();
356
379
  }
357
380
  }
358
381
 
@@ -360,15 +383,26 @@ export class PublicProcessor implements Traceable {
360
383
  const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
361
384
  this.metrics.recordAllTxs(totalPublicGas, rate);
362
385
 
363
- this.log.info(`Processed ${result.length} successful txs and ${failed.length} failed txs in ${duration}s`, {
364
- duration,
365
- rate,
366
- totalPublicGas,
367
- totalBlockGas,
368
- totalSizeInBytes,
369
- });
386
+ const silentlySkippedDurationMs = Math.round(totalSilentlySkippedDurationMs);
387
+ this.log.info(
388
+ `Processed ${result.length} successful txs and ${failed.length} failed txs ` +
389
+ `(${silentlySkippedCount} silently skipped, ${silentlySkippedDurationMs}ms wasted) ` +
390
+ `in ${duration}s`,
391
+ {
392
+ blockNumber: this.globalVariables.blockNumber,
393
+ successfulCount: result.length,
394
+ failedCount: failed.length,
395
+ duration,
396
+ rate,
397
+ totalPublicGas,
398
+ totalBlockGas,
399
+ totalSizeInBytes,
400
+ silentlySkippedCount,
401
+ silentlySkippedDurationMs,
402
+ },
403
+ );
370
404
 
371
- return [result, failed, usedTxs, returns, totalBlobFields, debugLogs];
405
+ return [result, failed, usedTxs, returns, debugLogs];
372
406
  }
373
407
 
374
408
  private async checkWorldStateUnchanged(
@@ -391,9 +425,10 @@ export class PublicProcessor implements Traceable {
391
425
  private async processTx(
392
426
  tx: Tx,
393
427
  deadline: Date | undefined,
428
+ signal: AbortSignal | undefined,
394
429
  ): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
395
430
  const [time, [processedTx, returnValues, debugLogs]] = await elapsed(() =>
396
- this.processTxWithinDeadline(tx, deadline),
431
+ this.processTxWithinDeadline(tx, deadline, signal),
397
432
  );
398
433
 
399
434
  this.log.verbose(
@@ -447,10 +482,11 @@ export class PublicProcessor implements Traceable {
447
482
  this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
448
483
  }
449
484
 
450
- /** Processes the given tx within deadline. Returns timeout if deadline is hit. */
485
+ /** Processes the given tx within deadline or until the signal is aborted. */
451
486
  private async processTxWithinDeadline(
452
487
  tx: Tx,
453
488
  deadline: Date | undefined,
489
+ signal: AbortSignal | undefined,
454
490
  ): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> {
455
491
  const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> =
456
492
  tx.hasPublicCalls() ? () => this.processTxWithPublicCalls(tx) : () => this.processPrivateOnlyTx(tx);
@@ -467,27 +503,38 @@ export class PublicProcessor implements Traceable {
467
503
  }
468
504
  : innerProcessFn;
469
505
 
470
- if (!deadline) {
506
+ const processingSignal = this.getProcessingSignal(tx, deadline, signal);
507
+ if (!processingSignal) {
471
508
  return await processFn();
472
509
  }
473
510
 
474
- const txHash = tx.getTxHash();
511
+ return await execWithSignal(
512
+ () => processFn(),
513
+ processingSignal,
514
+ signal =>
515
+ signal.reason?.name === 'TimeoutError' ? new PublicProcessorTimeoutError() : new PublicProcessorAbortError(),
516
+ );
517
+ }
518
+
519
+ private getProcessingSignal(tx: Tx, deadline: Date | undefined, signal: AbortSignal | undefined) {
520
+ if (!deadline) {
521
+ return signal;
522
+ }
523
+
475
524
  const timeout = +deadline - this.dateProvider.now();
476
525
  if (timeout <= 0) {
477
526
  throw new PublicProcessorTimeoutError();
478
527
  }
479
528
 
529
+ const txHash = tx.getTxHash();
480
530
  this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
481
531
  deadline: deadline.toISOString(),
482
532
  now: new Date(this.dateProvider.now()).toISOString(),
483
533
  txHash,
484
534
  });
485
535
 
486
- return await executeTimeout(
487
- () => processFn(),
488
- timeout,
489
- () => new PublicProcessorTimeoutError(),
490
- );
536
+ const timeoutSignal = AbortSignal.timeout(timeout);
537
+ return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
491
538
  }
492
539
 
493
540
  /**
@@ -544,7 +591,7 @@ export class PublicProcessor implements Traceable {
544
591
  // Fee payment insertion has already been done. Do the rest.
545
592
  await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
546
593
 
547
- await this.contractsDB.addNewContracts(tx);
594
+ this.contractsDB.addNewContracts(tx);
548
595
 
549
596
  return [processedTx, undefined, []];
550
597
  }
@@ -30,6 +30,9 @@ export class PublicProcessorMetrics {
30
30
 
31
31
  private treeInsertionDuration: Histogram;
32
32
 
33
+ private silentlySkippedCount: UpDownCounter;
34
+ private silentlySkippedDuration: Histogram;
35
+
33
36
  constructor(client: TelemetryClient, name = 'PublicProcessor') {
34
37
  this.tracer = client.getTracer(name);
35
38
  const meter = client.getMeter(name);
@@ -60,6 +63,10 @@ export class PublicProcessorMetrics {
60
63
  this.gasRate = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE);
61
64
 
62
65
  this.treeInsertionDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION);
66
+
67
+ this.silentlySkippedCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT);
68
+
69
+ this.silentlySkippedDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION);
63
70
  }
64
71
 
65
72
  recordPhaseDuration(phaseName: TxExecutionPhase, durationMs: number) {
@@ -123,4 +130,9 @@ export class PublicProcessorMetrics {
123
130
  recordTreeInsertions(durationUs: number) {
124
131
  this.treeInsertionDuration.record(Math.ceil(durationUs));
125
132
  }
133
+
134
+ recordSilentlySkipped(durationMs: number) {
135
+ this.silentlySkippedCount.add(1);
136
+ this.silentlySkippedDuration.record(Math.ceil(durationMs));
137
+ }
126
138
  }
@@ -4,35 +4,36 @@ import {
4
4
  AvmCircuitPublicInputs,
5
5
  AvmExecutionHints,
6
6
  type PublicSimulatorConfig,
7
- PublicTxResult,
7
+ type PublicTxResult,
8
8
  serializeWithMessagePack,
9
9
  } from '@aztec/stdlib/avm';
10
- import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
11
- import type { GlobalVariables, Tx, TxHash } from '@aztec/stdlib/tx';
10
+ import type { GlobalVariables, Tx } from '@aztec/stdlib/tx';
12
11
 
13
12
  import { strict as assert } from 'assert';
14
13
  import { mkdirSync, writeFileSync } from 'fs';
15
14
  import { join } from 'path';
16
15
 
16
+ import type { AvmSimulator } from '../avm_simulator.js';
17
17
  import type { PublicContractsDB } from '../public_db_sources.js';
18
- import { CppPublicTxSimulator } from './cpp_public_tx_simulator.js';
18
+ import { PublicTxSimulator } from './public_tx_simulator.js';
19
19
 
20
20
  /**
21
- * A C++ public tx simulator that dumps AVM circuit inputs to disk after simulation.
22
- * Used during nightly CI runs to collect circuit inputs for benchmarking.
21
+ * A {@link PublicTxSimulator} that dumps AVM circuit inputs to disk after simulation.
22
+ * Used during nightly CI runs to collect circuit inputs for AVM proving benchmarks.
23
23
  */
24
- export class DumpingCppPublicTxSimulator extends CppPublicTxSimulator {
24
+ export class DumpingPublicTxSimulator extends PublicTxSimulator {
25
25
  private readonly outputDir: string;
26
26
 
27
27
  constructor(
28
- merkleTree: MerkleTreeWriteOperations,
29
- contractsDB: PublicContractsDB,
28
+ avmSimulator: AvmSimulator,
30
29
  globalVariables: GlobalVariables,
30
+ contractsDB: PublicContractsDB,
31
+ forkId: number,
31
32
  config: Partial<PublicSimulatorConfig>,
32
33
  outputDir: string,
33
34
  bindings?: LoggerBindings,
34
35
  ) {
35
- super(merkleTree, contractsDB, globalVariables, config, bindings);
36
+ super(avmSimulator, globalVariables, contractsDB, forkId, config, bindings);
36
37
  assert(config.collectHints === true, 'collectHints must be enabled to dump AVM circuit inputs');
37
38
  assert(config.collectPublicInputs === true, 'collectPublicInputs must be enabled to dump AVM circuit inputs');
38
39
  this.outputDir = outputDir;
@@ -40,44 +41,27 @@ export class DumpingCppPublicTxSimulator extends CppPublicTxSimulator {
40
41
 
41
42
  public override async simulate(tx: Tx): Promise<PublicTxResult> {
42
43
  const result = await super.simulate(tx);
43
-
44
- // Dump the circuit inputs after successful simulation
45
- const txHash = this.computeTxHash(tx);
46
- this.dumpAvmCircuitInputs(result, txHash);
47
-
44
+ this.dumpAvmCircuitInputs(result, tx.getTxHash().toString());
48
45
  return result;
49
46
  }
50
47
 
51
- /**
52
- * Dumps AVM circuit inputs to disk.
53
- *
54
- * @param result - The simulation result containing hints and public inputs
55
- * @param txHash - The transaction hash to use in the filename
56
- */
57
- private dumpAvmCircuitInputs(result: PublicTxResult, txHash: TxHash): void {
48
+ private dumpAvmCircuitInputs(result: PublicTxResult, txHash: string): void {
58
49
  try {
59
- // Ensure the output directory exists
60
50
  mkdirSync(this.outputDir, { recursive: true });
61
51
 
62
- // Generate filename using transaction hash
63
- const filename = `avm-circuit-inputs-tx-${txHash.toString()}.bin`;
52
+ const filename = `avm-circuit-inputs-tx-${txHash}.bin`;
64
53
  const filepath = join(this.outputDir, filename);
65
54
 
66
- // Create circuit inputs from the result
67
55
  const hints = result.hints ?? AvmExecutionHints.empty();
68
56
  const publicInputs = result.publicInputs ?? AvmCircuitPublicInputs.empty();
69
57
  const avmCircuitInputs = new AvmCircuitInputs(hints, publicInputs);
70
58
 
71
- // Serialize the circuit inputs using MessagePack
72
59
  const serialized = serializeWithMessagePack(avmCircuitInputs);
73
-
74
- // Write to disk
75
60
  writeFileSync(filepath, serialized);
76
61
 
77
62
  this.log.debug(`Dumped AVM circuit inputs to ${filepath}`);
78
63
  } catch (error) {
79
- // Non-blocking error handling - log but don't interrupt processing
80
- this.log.warn(`Failed to dump AVM circuit inputs for tx ${txHash.toString()}: ${error}`);
64
+ this.log.warn(`Failed to dump AVM circuit inputs for tx ${txHash}: ${error}`);
81
65
  }
82
66
  }
83
67
  }
@@ -1,22 +1,23 @@
1
1
  import type { LoggerBindings } from '@aztec/foundation/log';
2
2
  import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
3
- import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
4
3
  import type { GlobalVariables } from '@aztec/stdlib/tx';
5
4
  import type { TelemetryClient } from '@aztec/telemetry-client';
6
5
 
6
+ import type { AvmSimulator } from '../avm_simulator.js';
7
7
  import type { PublicContractsDB } from '../public_db_sources.js';
8
- import { TelemetryCppPublicTxSimulator } from './cpp_public_tx_simulator.js';
9
- import { DumpingCppPublicTxSimulator } from './dumping_cpp_public_tx_simulator.js';
8
+ import { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
9
+ import { TelemetryPublicTxSimulator } from './public_tx_simulator.js';
10
10
 
11
11
  /**
12
- * Creates a public tx simulator for block building.
13
- * Uses DumpingCppPublicTxSimulator if DUMP_AVM_INPUTS_TO_DIR env var is set (for CI/testing avm circuit),
14
- * otherwise uses TelemetryCppPublicTxSimulator (for production).
12
+ * Creates an IPC-based public tx simulator for block building.
13
+ * Uses DumpingPublicTxSimulator if DUMP_AVM_INPUTS_TO_DIR env var is set (for CI/testing the AVM circuit),
14
+ * otherwise uses TelemetryPublicTxSimulator (for production).
15
15
  */
16
16
  export function createPublicTxSimulatorForBlockBuilding(
17
- merkleTree: MerkleTreeWriteOperations,
18
- contractsDB: PublicContractsDB,
17
+ avmSimulator: AvmSimulator,
19
18
  globalVariables: GlobalVariables,
19
+ contractsDB: PublicContractsDB,
20
+ forkId: number,
20
21
  telemetryClient: TelemetryClient,
21
22
  bindings?: LoggerBindings,
22
23
  collectDebugLogs = false,
@@ -38,7 +39,23 @@ export function createPublicTxSimulatorForBlockBuilding(
38
39
  collectHints: true,
39
40
  collectPublicInputs: true,
40
41
  };
41
- return new DumpingCppPublicTxSimulator(merkleTree, contractsDB, globalVariables, dumpingConfig, dumpDir, bindings);
42
+ return new DumpingPublicTxSimulator(
43
+ avmSimulator,
44
+ globalVariables,
45
+ contractsDB,
46
+ forkId,
47
+ dumpingConfig,
48
+ dumpDir,
49
+ bindings,
50
+ );
42
51
  }
43
- return new TelemetryCppPublicTxSimulator(merkleTree, contractsDB, globalVariables, telemetryClient, config, bindings);
52
+ return new TelemetryPublicTxSimulator(
53
+ avmSimulator,
54
+ globalVariables,
55
+ contractsDB,
56
+ forkId,
57
+ telemetryClient,
58
+ config,
59
+ bindings,
60
+ );
44
61
  }
@@ -1,7 +1,8 @@
1
- export * from './public_tx_simulator.js';
2
- export { CppPublicTxSimulator, TelemetryCppPublicTxSimulator } from './cpp_public_tx_simulator.js';
3
- export { DumpingCppPublicTxSimulator } from './dumping_cpp_public_tx_simulator.js';
1
+ export { PublicTxSimulator, MeasuredPublicTxSimulator, TelemetryPublicTxSimulator } from './public_tx_simulator.js';
2
+ export { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
4
3
  export { createPublicTxSimulatorForBlockBuilding } from './factories.js';
5
- export type { PublicTxSimulatorInterface } from './public_tx_simulator_interface.js';
6
- export { TelemetryPublicTxSimulator } from './telemetry_public_tx_simulator.js';
4
+ export type {
5
+ PublicTxSimulatorInterface,
6
+ MeasuredPublicTxSimulatorInterface,
7
+ } from './public_tx_simulator_interface.js';
7
8
  export type { PublicTxResult, PublicSimulatorConfig as PublicTxSimulatorConfig } from '@aztec/stdlib/avm';