@aztec/simulator 0.0.1-commit.c31f2472 → 0.0.1-commit.c52d6e7

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 (350) hide show
  1. package/README.md +4 -4
  2. package/dest/client.d.ts +1 -3
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +0 -2
  5. package/dest/private/acvm_wasm.d.ts +1 -1
  6. package/dest/private/acvm_wasm.d.ts.map +1 -1
  7. package/dest/private/acvm_wasm.js +3 -1
  8. package/dest/private/circuit_recording/circuit_recorder.d.ts +36 -23
  9. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  10. package/dest/private/circuit_recording/circuit_recorder.js +65 -69
  11. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +7 -19
  12. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  13. package/dest/private/circuit_recording/file_circuit_recorder.js +38 -42
  14. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
  15. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  16. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
  17. package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
  18. package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
  19. package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
  20. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +2 -1
  21. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
  22. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +18 -3
  23. package/dest/public/avm/testing/utils.d.ts +32 -0
  24. package/dest/public/avm/testing/utils.d.ts.map +1 -0
  25. package/dest/public/avm/{fixtures → testing}/utils.js +4 -34
  26. package/dest/public/avm_simulator.d.ts +28 -0
  27. package/dest/public/avm_simulator.d.ts.map +1 -0
  28. package/dest/public/avm_simulator.js +4 -0
  29. package/dest/public/avm_simulator_pool.d.ts +45 -0
  30. package/dest/public/avm_simulator_pool.d.ts.map +1 -0
  31. package/dest/public/avm_simulator_pool.js +197 -0
  32. package/dest/public/cdb_ipc_server.d.ts +40 -0
  33. package/dest/public/cdb_ipc_server.d.ts.map +1 -0
  34. package/dest/public/cdb_ipc_server.js +153 -0
  35. package/dest/public/contracts_db_checkpoint.d.ts +2 -2
  36. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
  37. package/dest/public/contracts_db_checkpoint.js +1 -1
  38. package/dest/public/fixtures/amm_test.js +4 -4
  39. package/dest/public/fixtures/bulk_test.d.ts +1 -1
  40. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  41. package/dest/public/fixtures/bulk_test.js +33 -6
  42. package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
  43. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  44. package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
  45. package/dest/public/fixtures/index.d.ts +2 -4
  46. package/dest/public/fixtures/index.d.ts.map +1 -1
  47. package/dest/public/fixtures/index.js +1 -3
  48. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  49. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  50. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  51. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +12 -7
  52. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  53. package/dest/public/fixtures/public_tx_simulation_tester.js +32 -15
  54. package/dest/public/fixtures/simple_contract_data_source.js +1 -1
  55. package/dest/public/fixtures/token_test.js +3 -3
  56. package/dest/public/fixtures/utils.d.ts +2 -2
  57. package/dest/public/fixtures/utils.d.ts.map +1 -1
  58. package/dest/public/fixtures/utils.js +21 -20
  59. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
  60. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  61. package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
  62. package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
  63. package/dest/public/index.d.ts +5 -2
  64. package/dest/public/index.d.ts.map +1 -1
  65. package/dest/public/index.js +2 -1
  66. package/dest/public/public_db_sources.d.ts +6 -3
  67. package/dest/public/public_db_sources.d.ts.map +1 -1
  68. package/dest/public/public_db_sources.js +16 -10
  69. package/dest/public/public_processor/guarded_merkle_tree.d.ts +8 -7
  70. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  71. package/dest/public/public_processor/guarded_merkle_tree.js +8 -5
  72. package/dest/public/public_processor/public_processor.d.ts +15 -8
  73. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  74. package/dest/public/public_processor/public_processor.js +117 -78
  75. package/dest/public/public_processor/public_processor_metrics.d.ts +4 -1
  76. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  77. package/dest/public/public_processor/public_processor_metrics.js +8 -0
  78. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  79. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  80. package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
  81. package/dest/public/public_tx_simulator/factories.d.ts +8 -8
  82. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
  83. package/dest/public/public_tx_simulator/factories.js +9 -9
  84. package/dest/public/public_tx_simulator/index.d.ts +4 -6
  85. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  86. package/dest/public/public_tx_simulator/index.js +2 -4
  87. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -71
  88. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  89. package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -318
  90. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  91. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  92. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  93. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
  94. package/package.json +20 -18
  95. package/src/client.ts +0 -2
  96. package/src/private/acvm_wasm.ts +4 -1
  97. package/src/private/circuit_recording/circuit_recorder.ts +84 -78
  98. package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
  99. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
  100. package/src/public/avm/testing/account_proof.json +553 -0
  101. package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
  102. package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
  103. package/src/public/avm/{fixtures → testing}/utils.ts +4 -40
  104. package/src/public/avm_simulator.ts +29 -0
  105. package/src/public/avm_simulator_pool.ts +226 -0
  106. package/src/public/cdb_ipc_server.ts +198 -0
  107. package/src/public/contracts_db_checkpoint.ts +1 -1
  108. package/src/public/fixtures/amm_test.ts +4 -4
  109. package/src/public/fixtures/bulk_test.ts +31 -6
  110. package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
  111. package/src/public/fixtures/index.ts +1 -3
  112. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  113. package/src/public/fixtures/public_tx_simulation_tester.ts +45 -18
  114. package/src/public/fixtures/simple_contract_data_source.ts +1 -1
  115. package/src/public/fixtures/token_test.ts +3 -3
  116. package/src/public/fixtures/utils.ts +23 -24
  117. package/src/public/fuzzing/avm_fuzzer_simulator.ts +26 -11
  118. package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
  119. package/src/public/index.ts +7 -3
  120. package/src/public/public_db_sources.ts +21 -14
  121. package/src/public/public_processor/guarded_merkle_tree.ts +11 -8
  122. package/src/public/public_processor/public_processor.ts +154 -98
  123. package/src/public/public_processor/public_processor_metrics.ts +12 -0
  124. package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
  125. package/src/public/public_tx_simulator/factories.ts +29 -11
  126. package/src/public/public_tx_simulator/index.ts +6 -5
  127. package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -476
  128. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  129. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
  130. package/dest/public/avm/avm_context.d.ts +0 -41
  131. package/dest/public/avm/avm_context.d.ts.map +0 -1
  132. package/dest/public/avm/avm_context.js +0 -44
  133. package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
  134. package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
  135. package/dest/public/avm/avm_contract_call_result.js +0 -54
  136. package/dest/public/avm/avm_execution_environment.d.ts +0 -24
  137. package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
  138. package/dest/public/avm/avm_execution_environment.js +0 -33
  139. package/dest/public/avm/avm_gas.d.ts +0 -44
  140. package/dest/public/avm/avm_gas.d.ts.map +0 -1
  141. package/dest/public/avm/avm_gas.js +0 -195
  142. package/dest/public/avm/avm_machine_state.d.ts +0 -98
  143. package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
  144. package/dest/public/avm/avm_machine_state.js +0 -110
  145. package/dest/public/avm/avm_memory_types.d.ts +0 -275
  146. package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
  147. package/dest/public/avm/avm_memory_types.js +0 -354
  148. package/dest/public/avm/avm_simulator.d.ts +0 -41
  149. package/dest/public/avm/avm_simulator.d.ts.map +0 -1
  150. package/dest/public/avm/avm_simulator.js +0 -192
  151. package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
  152. package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
  153. package/dest/public/avm/avm_simulator_interface.js +0 -3
  154. package/dest/public/avm/calldata.d.ts +0 -51
  155. package/dest/public/avm/calldata.d.ts.map +0 -1
  156. package/dest/public/avm/calldata.js +0 -63
  157. package/dest/public/avm/errors.d.ts +0 -104
  158. package/dest/public/avm/errors.d.ts.map +0 -1
  159. package/dest/public/avm/errors.js +0 -141
  160. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
  161. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  162. package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -84
  163. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  164. package/dest/public/avm/fixtures/initializers.d.ts +0 -42
  165. package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
  166. package/dest/public/avm/fixtures/initializers.js +0 -45
  167. package/dest/public/avm/fixtures/utils.d.ts +0 -39
  168. package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
  169. package/dest/public/avm/index.d.ts +0 -2
  170. package/dest/public/avm/index.d.ts.map +0 -1
  171. package/dest/public/avm/index.js +0 -1
  172. package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -74
  173. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
  174. package/dest/public/avm/opcodes/accrued_substate.js +0 -255
  175. package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
  176. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
  177. package/dest/public/avm/opcodes/addressing_mode.js +0 -94
  178. package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
  179. package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
  180. package/dest/public/avm/opcodes/arithmetic.js +0 -97
  181. package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
  182. package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
  183. package/dest/public/avm/opcodes/bitwise.js +0 -99
  184. package/dest/public/avm/opcodes/comparators.d.ts +0 -25
  185. package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
  186. package/dest/public/avm/opcodes/comparators.js +0 -43
  187. package/dest/public/avm/opcodes/contract.d.ts +0 -20
  188. package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
  189. package/dest/public/avm/opcodes/contract.js +0 -65
  190. package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
  191. package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
  192. package/dest/public/avm/opcodes/control_flow.js +0 -107
  193. package/dest/public/avm/opcodes/conversion.d.ts +0 -18
  194. package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
  195. package/dest/public/avm/opcodes/conversion.js +0 -333
  196. package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
  197. package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
  198. package/dest/public/avm/opcodes/ec_add.js +0 -93
  199. package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
  200. package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
  201. package/dest/public/avm/opcodes/environment_getters.js +0 -77
  202. package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
  203. package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
  204. package/dest/public/avm/opcodes/external_calls.js +0 -210
  205. package/dest/public/avm/opcodes/hashing.d.ts +0 -36
  206. package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
  207. package/dest/public/avm/opcodes/hashing.js +0 -119
  208. package/dest/public/avm/opcodes/index.d.ts +0 -16
  209. package/dest/public/avm/opcodes/index.d.ts.map +0 -1
  210. package/dest/public/avm/opcodes/index.js +0 -15
  211. package/dest/public/avm/opcodes/instruction.d.ts +0 -74
  212. package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
  213. package/dest/public/avm/opcodes/instruction.js +0 -95
  214. package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
  215. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
  216. package/dest/public/avm/opcodes/instruction_impl.js +0 -30
  217. package/dest/public/avm/opcodes/memory.d.ts +0 -74
  218. package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
  219. package/dest/public/avm/opcodes/memory.js +0 -257
  220. package/dest/public/avm/opcodes/misc.d.ts +0 -18
  221. package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
  222. package/dest/public/avm/opcodes/misc.js +0 -73
  223. package/dest/public/avm/opcodes/storage.d.ts +0 -25
  224. package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
  225. package/dest/public/avm/opcodes/storage.js +0 -78
  226. package/dest/public/avm/revert_reason.d.ts +0 -18
  227. package/dest/public/avm/revert_reason.d.ts.map +0 -1
  228. package/dest/public/avm/revert_reason.js +0 -39
  229. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
  230. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
  231. package/dest/public/avm/serialization/buffer_cursor.js +0 -99
  232. package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
  233. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  234. package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
  235. package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
  236. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
  237. package/dest/public/avm/serialization/instruction_serialization.js +0 -261
  238. package/dest/public/avm/test_utils.d.ts +0 -15
  239. package/dest/public/avm/test_utils.d.ts.map +0 -1
  240. package/dest/public/avm/test_utils.js +0 -44
  241. package/dest/public/debug_fn_name.d.ts +0 -18
  242. package/dest/public/debug_fn_name.d.ts.map +0 -1
  243. package/dest/public/debug_fn_name.js +0 -37
  244. package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -12
  245. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
  246. package/dest/public/fixtures/custom_bytecode_tests.js +0 -174
  247. package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
  248. package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
  249. package/dest/public/fixtures/minimal_public_tx.js +0 -19
  250. package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
  251. package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
  252. package/dest/public/fixtures/opcode_spammer.js +0 -1653
  253. package/dest/public/hinting_db_sources.d.ts +0 -80
  254. package/dest/public/hinting_db_sources.d.ts.map +0 -1
  255. package/dest/public/hinting_db_sources.js +0 -355
  256. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
  257. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
  258. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -98
  259. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
  260. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
  261. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -132
  262. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
  263. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
  264. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
  265. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
  266. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
  267. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
  268. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
  269. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
  270. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
  271. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
  272. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
  273. package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -131
  274. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
  275. package/dest/public/public_tx_simulator/public_tx_context.js +0 -300
  276. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
  277. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
  278. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
  279. package/dest/public/side_effect_trace.d.ts +0 -87
  280. package/dest/public/side_effect_trace.d.ts.map +0 -1
  281. package/dest/public/side_effect_trace.js +0 -199
  282. package/dest/public/side_effect_trace_interface.d.ts +0 -22
  283. package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
  284. package/dest/public/side_effect_trace_interface.js +0 -1
  285. package/dest/public/state_manager/index.d.ts +0 -2
  286. package/dest/public/state_manager/index.d.ts.map +0 -1
  287. package/dest/public/state_manager/index.js +0 -1
  288. package/dest/public/state_manager/nullifiers.d.ts +0 -61
  289. package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
  290. package/dest/public/state_manager/nullifiers.js +0 -92
  291. package/dest/public/state_manager/public_storage.d.ts +0 -66
  292. package/dest/public/state_manager/public_storage.d.ts.map +0 -1
  293. package/dest/public/state_manager/public_storage.js +0 -145
  294. package/dest/public/state_manager/state_manager.d.ts +0 -170
  295. package/dest/public/state_manager/state_manager.d.ts.map +0 -1
  296. package/dest/public/state_manager/state_manager.js +0 -402
  297. package/src/public/avm/avm_context.ts +0 -61
  298. package/src/public/avm/avm_contract_call_result.ts +0 -69
  299. package/src/public/avm/avm_execution_environment.ts +0 -51
  300. package/src/public/avm/avm_gas.ts +0 -183
  301. package/src/public/avm/avm_machine_state.ts +0 -170
  302. package/src/public/avm/avm_memory_types.ts +0 -440
  303. package/src/public/avm/avm_simulator.ts +0 -279
  304. package/src/public/avm/avm_simulator_interface.ts +0 -8
  305. package/src/public/avm/calldata.ts +0 -100
  306. package/src/public/avm/errors.ts +0 -177
  307. package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
  308. package/src/public/avm/fixtures/initializers.ts +0 -103
  309. package/src/public/avm/index.ts +0 -1
  310. package/src/public/avm/opcodes/accrued_substate.ts +0 -286
  311. package/src/public/avm/opcodes/addressing_mode.ts +0 -111
  312. package/src/public/avm/opcodes/arithmetic.ts +0 -129
  313. package/src/public/avm/opcodes/bitwise.ts +0 -113
  314. package/src/public/avm/opcodes/comparators.ts +0 -55
  315. package/src/public/avm/opcodes/contract.ts +0 -72
  316. package/src/public/avm/opcodes/control_flow.ts +0 -123
  317. package/src/public/avm/opcodes/conversion.ts +0 -104
  318. package/src/public/avm/opcodes/ec_add.ts +0 -105
  319. package/src/public/avm/opcodes/environment_getters.ts +0 -87
  320. package/src/public/avm/opcodes/external_calls.ts +0 -262
  321. package/src/public/avm/opcodes/hashing.ts +0 -151
  322. package/src/public/avm/opcodes/index.ts +0 -15
  323. package/src/public/avm/opcodes/instruction.ts +0 -136
  324. package/src/public/avm/opcodes/instruction_impl.ts +0 -36
  325. package/src/public/avm/opcodes/memory.ts +0 -293
  326. package/src/public/avm/opcodes/misc.ts +0 -102
  327. package/src/public/avm/opcodes/storage.ts +0 -95
  328. package/src/public/avm/revert_reason.ts +0 -58
  329. package/src/public/avm/serialization/buffer_cursor.ts +0 -118
  330. package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
  331. package/src/public/avm/serialization/instruction_serialization.ts +0 -249
  332. package/src/public/avm/test_utils.ts +0 -64
  333. package/src/public/debug_fn_name.ts +0 -52
  334. package/src/public/fixtures/custom_bytecode_tests.ts +0 -228
  335. package/src/public/fixtures/minimal_public_tx.ts +0 -26
  336. package/src/public/fixtures/opcode_spammer.ts +0 -1721
  337. package/src/public/hinting_db_sources.ts +0 -607
  338. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -124
  339. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -211
  340. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
  341. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
  342. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
  343. package/src/public/public_tx_simulator/public_tx_context.ts +0 -484
  344. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
  345. package/src/public/side_effect_trace.ts +0 -293
  346. package/src/public/side_effect_trace_interface.ts +0 -28
  347. package/src/public/state_manager/index.ts +0 -1
  348. package/src/public/state_manager/nullifiers.ts +0 -103
  349. package/src/public/state_manager/public_storage.ts +0 -174
  350. package/src/public/state_manager/state_manager.ts +0 -569
@@ -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';
@@ -25,6 +25,7 @@ import type {
25
25
  PublicProcessorValidator,
26
26
  SequencerConfig,
27
27
  } from '@aztec/stdlib/interfaces/server';
28
+ import { type DebugLog, type DebugLogStore, NullDebugLogStore } from '@aztec/stdlib/logs';
28
29
  import { ProvingRequestType } from '@aztec/stdlib/proofs';
29
30
  import { MerkleTreeId } from '@aztec/stdlib/trees';
30
31
  import {
@@ -49,11 +50,12 @@ import { ForkCheckpoint } from '@aztec/world-state/native';
49
50
 
50
51
  import { AssertionError } from 'assert';
51
52
 
53
+ import type { AvmSimulator } from '../avm_simulator.js';
52
54
  import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
53
55
  import {
54
56
  type PublicTxSimulatorConfig,
55
57
  type PublicTxSimulatorInterface,
56
- TelemetryCppPublicTxSimulator,
58
+ TelemetryPublicTxSimulator,
57
59
  } from '../public_tx_simulator/index.js';
58
60
  import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
59
61
  import { PublicProcessorMetrics } from './public_processor_metrics.js';
@@ -65,6 +67,7 @@ export class PublicProcessorFactory {
65
67
  private log: Logger;
66
68
  constructor(
67
69
  private contractDataSource: ContractDataSource,
70
+ private avmSimulator: AvmSimulator,
68
71
  private dateProvider: DateProvider = new DateProvider(),
69
72
  protected telemetryClient: TelemetryClient = getTelemetryClient(),
70
73
  bindings?: LoggerBindings,
@@ -73,21 +76,23 @@ export class PublicProcessorFactory {
73
76
  }
74
77
 
75
78
  /**
76
- * 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
+ *
77
82
  * @param globalVariables - The global variables for the block being processed.
78
- * @param skipFeeEnforcement - Allows disabling balance checks for fee estimations.
83
+ * @param contractsDB - Optional pre-populated contracts DB; a fresh one is constructed if omitted.
79
84
  * @returns A new instance of a PublicProcessor.
80
85
  */
81
86
  public create(
82
87
  merkleTree: MerkleTreeWriteOperations,
83
88
  globalVariables: GlobalVariables,
84
89
  config: PublicSimulatorConfig,
90
+ contractsDB: PublicContractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings()),
85
91
  ): PublicProcessor {
86
- const bindings = this.log.getBindings();
87
- const contractsDB = new PublicContractsDB(this.contractDataSource, bindings);
92
+ const forkId = merkleTree.getRevision().forkId;
88
93
 
89
94
  const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
90
- const publicTxSimulator = this.createPublicTxSimulator(guardedFork, contractsDB, globalVariables, config);
95
+ const publicTxSimulator = this.createPublicTxSimulator(forkId, globalVariables, contractsDB, config);
91
96
 
92
97
  return new PublicProcessor(
93
98
  globalVariables,
@@ -96,20 +101,21 @@ export class PublicProcessorFactory {
96
101
  publicTxSimulator,
97
102
  this.dateProvider,
98
103
  this.telemetryClient,
99
- createLogger('simulator:public-processor', bindings),
104
+ createLogger('simulator:public-processor', this.log.getBindings()),
100
105
  );
101
106
  }
102
107
 
103
108
  protected createPublicTxSimulator(
104
- merkleTree: MerkleTreeWriteOperations,
105
- contractsDB: PublicContractsDB,
109
+ forkId: number,
106
110
  globalVariables: GlobalVariables,
111
+ contractsDB: PublicContractsDB,
107
112
  config?: Partial<PublicTxSimulatorConfig>,
108
113
  ): PublicTxSimulatorInterface {
109
- return new TelemetryCppPublicTxSimulator(
110
- merkleTree,
111
- contractsDB,
114
+ return new TelemetryPublicTxSimulator(
115
+ this.avmSimulator,
112
116
  globalVariables,
117
+ contractsDB,
118
+ forkId,
113
119
  this.telemetryClient,
114
120
  config,
115
121
  this.log.getBindings(),
@@ -124,13 +130,19 @@ class PublicProcessorTimeoutError extends Error {
124
130
  }
125
131
  }
126
132
 
133
+ class PublicProcessorAbortError extends Error {
134
+ constructor(message: string = 'Aborted while processing tx') {
135
+ super(message);
136
+ this.name = 'PublicProcessorAbortError';
137
+ }
138
+ }
139
+
127
140
  /**
128
141
  * Converts Txs lifted from the P2P module into ProcessedTx objects by executing
129
142
  * any public function calls in them. Txs with private calls only are unaffected.
130
143
  */
131
144
  export class PublicProcessor implements Traceable {
132
145
  private metrics: PublicProcessorMetrics;
133
-
134
146
  constructor(
135
147
  protected globalVariables: GlobalVariables,
136
148
  private guardedMerkleTree: GuardedMerkleTreeOperations,
@@ -140,6 +152,7 @@ export class PublicProcessor implements Traceable {
140
152
  telemetryClient: TelemetryClient = getTelemetryClient(),
141
153
  private log: Logger,
142
154
  private opts: Pick<SequencerConfig, 'fakeProcessingDelayPerTxMs' | 'fakeThrowAfterProcessingTxCount'> = {},
155
+ private debugLogStore: DebugLogStore = new NullDebugLogStore(),
143
156
  ) {
144
157
  this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
145
158
  }
@@ -159,12 +172,13 @@ export class PublicProcessor implements Traceable {
159
172
  txs: Iterable<Tx> | AsyncIterable<Tx>,
160
173
  limits: PublicProcessorLimits = {},
161
174
  validator: PublicProcessorValidator = {},
162
- ): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], number]> {
163
- const { maxTransactions, maxBlockSize, deadline, maxBlockGas, maxBlobFields } = limits;
175
+ ): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], DebugLog[]]> {
176
+ const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal, signal } = limits;
164
177
  const { preprocessValidator, nullifierCache } = validator;
165
178
  const result: ProcessedTx[] = [];
166
179
  const usedTxs: Tx[] = [];
167
180
  const failed: FailedTx[] = [];
181
+ const debugLogs: DebugLog[] = [];
168
182
  const timer = new Timer();
169
183
 
170
184
  let totalSizeInBytes = 0;
@@ -172,6 +186,8 @@ export class PublicProcessor implements Traceable {
172
186
  let totalPublicGas = new Gas(0, 0);
173
187
  let totalBlockGas = new Gas(0, 0);
174
188
  let totalBlobFields = 0;
189
+ let silentlySkippedCount = 0;
190
+ let totalSilentlySkippedDurationMs = 0;
175
191
 
176
192
  for await (const tx of txs) {
177
193
  // Only process up to the max tx limit
@@ -180,28 +196,33 @@ export class PublicProcessor implements Traceable {
180
196
  break;
181
197
  }
182
198
 
183
- // Bail if we've hit the deadline
199
+ // Bail if we've hit the deadline or have been interrupted.
184
200
  if (deadline && this.dateProvider.now() > +deadline) {
185
201
  this.log.warn(`Stopping tx processing due to timeout.`);
186
202
  break;
187
203
  }
204
+ if (signal?.aborted) {
205
+ this.log.warn(`Stopping tx processing due to abort signal.`);
206
+ break;
207
+ }
188
208
 
189
- // Skip this tx if it'd exceed max block size
190
209
  const txHash = tx.getTxHash().toString();
191
- const preTxSizeInBytes = tx.getEstimatedPrivateTxEffectsSize();
192
- if (maxBlockSize !== undefined && totalSizeInBytes + preTxSizeInBytes > maxBlockSize) {
193
- this.log.warn(`Skipping processing of tx ${txHash} sized ${preTxSizeInBytes} bytes due to block size limit`, {
194
- txHash,
195
- sizeInBytes: preTxSizeInBytes,
196
- totalSizeInBytes,
197
- maxBlockSize,
198
- });
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
+ );
199
219
  continue;
200
220
  }
201
221
 
202
- // 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.
203
224
  const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
204
- if (maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
225
+ if (isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
205
226
  this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
206
227
  txHash,
207
228
  txGasLimit,
@@ -221,11 +242,6 @@ export class PublicProcessor implements Traceable {
221
242
  failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
222
243
  returns.push(new NestedProcessReturnValues([]));
223
244
  continue;
224
- } else if (result.result === 'skipped') {
225
- const reason = result.reason.join(', ');
226
- this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
227
- returns.push(new NestedProcessReturnValues([]));
228
- continue;
229
245
  } else {
230
246
  this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
231
247
  }
@@ -241,7 +257,9 @@ export class PublicProcessor implements Traceable {
241
257
  this.contractsDB.createCheckpoint();
242
258
 
243
259
  try {
244
- const [processedTx, returnValues] = await this.processTx(tx, deadline);
260
+ const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(() =>
261
+ this.processTx(tx, deadline, signal),
262
+ );
245
263
 
246
264
  // Inject a fake processing failure after N txs if requested
247
265
  const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
@@ -250,23 +268,9 @@ export class PublicProcessor implements Traceable {
250
268
  }
251
269
 
252
270
  const txBlobFields = processedTx.txEffect.getNumBlobFields();
253
-
254
- // If the actual size of this tx would exceed block size, skip it
255
271
  const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
256
- if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
257
- this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
258
- txHash,
259
- sizeInBytes: txSize,
260
- totalSizeInBytes,
261
- maxBlockSize,
262
- });
263
- // Need to revert the checkpoint here and don't go any further
264
- await checkpoint.revert();
265
- this.contractsDB.revertCheckpoint();
266
- continue;
267
- }
268
272
 
269
- // 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.
270
274
  // Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
271
275
  if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
272
276
  this.log.debug(
@@ -276,35 +280,64 @@ export class PublicProcessor implements Traceable {
276
280
  txBlobFields,
277
281
  totalBlobFields,
278
282
  maxBlobFields,
283
+ txProcessingTimeMs,
279
284
  },
280
285
  );
286
+ silentlySkippedCount += 1;
287
+ totalSilentlySkippedDurationMs += txProcessingTimeMs;
288
+ this.metrics.recordSilentlySkipped(txProcessingTimeMs);
281
289
  // Need to revert the checkpoint here and don't go any further
282
290
  await checkpoint.revert();
283
291
  this.contractsDB.revertCheckpoint();
284
292
  continue;
285
293
  }
286
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
+
287
314
  // FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
288
315
  // I'd rather pass the validators the processedTx as well and let them deal with it.
289
316
  nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
290
317
  result.push(processedTx);
291
318
  usedTxs.push(tx);
292
319
  returns = returns.concat(returnValues);
320
+ debugLogs.push(...txDebugLogs);
321
+
322
+ this.debugLogStore.storeLogs(processedTx.hash.toString(), txDebugLogs);
293
323
 
294
324
  totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
295
325
  totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
296
326
  totalSizeInBytes += txSize;
297
327
  totalBlobFields += txBlobFields;
328
+
329
+ // Commit the tx-level contracts checkpoint on success
330
+ this.contractsDB.commitCheckpoint();
298
331
  } catch (err: any) {
299
- if (err?.name === 'PublicProcessorTimeoutError') {
300
- this.log.warn(`Stopping tx processing due to timeout.`);
301
- // We hit the transaction execution deadline.
302
- // There may still be a transaction executing on a worker thread (C++ via NAPI).
303
- // Signal cancellation AND WAIT for the simulation to actually stop.
304
- // This is critical because C++ might be in the middle of a slow operation (e.g., pad_trees)
305
- // and won't check the cancellation flag until that operation completes.
306
- // Without waiting, we'd proceed to revert checkpoints while C++ is still writing to state.
307
- // 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.
308
341
  await this.publicTxSimulator.cancel?.();
309
342
 
310
343
  // Now stop the guarded fork to prevent any further TS-side access to the world state.
@@ -314,14 +347,10 @@ export class PublicProcessor implements Traceable {
314
347
  // 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
315
348
  // 2. Possible state updates on that checkpoint or any others created during execution.
316
349
 
317
- // First we revert a checkpoint as managed by the ForkCheckpoint. This will revert whatever is the current checkpoint
318
- // which may not be the one originally created by this object. But that is ok, we do this to fulfil the ForkCheckpoint
319
- // lifecycle expectations and ensure it doesn't attempt to commit later on.
320
- await checkpoint.revert();
321
-
322
- // Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
323
- // This needs to be done directly on the underlying fork as the guarded fork has been stopped.
324
- 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();
325
354
 
326
355
  // Revert any contracts added to the DB for the tx.
327
356
  this.contractsDB.revertCheckpoint();
@@ -333,9 +362,9 @@ export class PublicProcessor implements Traceable {
333
362
  break;
334
363
  }
335
364
 
336
- // Roll back state to start of TX before proceeding to next TX
337
- await checkpoint.revert();
338
- 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();
339
368
  this.contractsDB.revertCheckpoint();
340
369
  const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
341
370
  this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
@@ -347,7 +376,6 @@ export class PublicProcessor implements Traceable {
347
376
  } finally {
348
377
  // Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
349
378
  await checkpoint.commit();
350
- this.contractsDB.commitCheckpointOkIfNone();
351
379
  }
352
380
  }
353
381
 
@@ -355,15 +383,26 @@ export class PublicProcessor implements Traceable {
355
383
  const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
356
384
  this.metrics.recordAllTxs(totalPublicGas, rate);
357
385
 
358
- this.log.info(`Processed ${result.length} successful txs and ${failed.length} failed txs in ${duration}s`, {
359
- duration,
360
- rate,
361
- totalPublicGas,
362
- totalBlockGas,
363
- totalSizeInBytes,
364
- });
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
+ );
365
404
 
366
- return [result, failed, usedTxs, returns, totalBlobFields];
405
+ return [result, failed, usedTxs, returns, debugLogs];
367
406
  }
368
407
 
369
408
  private async checkWorldStateUnchanged(
@@ -383,8 +422,14 @@ export class PublicProcessor implements Traceable {
383
422
  }
384
423
 
385
424
  @trackSpan('PublicProcessor.processTx', tx => ({ [Attributes.TX_HASH]: tx.getTxHash().toString() }))
386
- private async processTx(tx: Tx, deadline: Date | undefined): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
387
- const [time, [processedTx, returnValues]] = await elapsed(() => this.processTxWithinDeadline(tx, deadline));
425
+ private async processTx(
426
+ tx: Tx,
427
+ deadline: Date | undefined,
428
+ signal: AbortSignal | undefined,
429
+ ): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
430
+ const [time, [processedTx, returnValues, debugLogs]] = await elapsed(() =>
431
+ this.processTxWithinDeadline(tx, deadline, signal),
432
+ );
388
433
 
389
434
  this.log.verbose(
390
435
  !tx.hasPublicCalls()
@@ -407,7 +452,7 @@ export class PublicProcessor implements Traceable {
407
452
  },
408
453
  );
409
454
 
410
- return [processedTx, returnValues ?? []];
455
+ return [processedTx, returnValues ?? [], debugLogs];
411
456
  }
412
457
 
413
458
  private async doTreeInsertionsForPrivateOnlyTx(processedTx: ProcessedTx): Promise<void> {
@@ -437,14 +482,14 @@ export class PublicProcessor implements Traceable {
437
482
  this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
438
483
  }
439
484
 
440
- /** 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. */
441
486
  private async processTxWithinDeadline(
442
487
  tx: Tx,
443
488
  deadline: Date | undefined,
444
- ): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> {
445
- const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> = tx.hasPublicCalls()
446
- ? () => this.processTxWithPublicCalls(tx)
447
- : () => this.processPrivateOnlyTx(tx);
489
+ signal: AbortSignal | undefined,
490
+ ): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> {
491
+ const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> =
492
+ tx.hasPublicCalls() ? () => this.processTxWithPublicCalls(tx) : () => this.processPrivateOnlyTx(tx);
448
493
 
449
494
  // Fake a delay per tx if instructed (used for tests)
450
495
  const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
@@ -458,27 +503,38 @@ export class PublicProcessor implements Traceable {
458
503
  }
459
504
  : innerProcessFn;
460
505
 
461
- if (!deadline) {
506
+ const processingSignal = this.getProcessingSignal(tx, deadline, signal);
507
+ if (!processingSignal) {
462
508
  return await processFn();
463
509
  }
464
510
 
465
- 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
+
466
524
  const timeout = +deadline - this.dateProvider.now();
467
525
  if (timeout <= 0) {
468
526
  throw new PublicProcessorTimeoutError();
469
527
  }
470
528
 
529
+ const txHash = tx.getTxHash();
471
530
  this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
472
531
  deadline: deadline.toISOString(),
473
532
  now: new Date(this.dateProvider.now()).toISOString(),
474
533
  txHash,
475
534
  });
476
535
 
477
- return await executeTimeout(
478
- () => processFn(),
479
- timeout,
480
- () => new PublicProcessorTimeoutError(),
481
- );
536
+ const timeoutSignal = AbortSignal.timeout(timeout);
537
+ return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
482
538
  }
483
539
 
484
540
  /**
@@ -512,7 +568,7 @@ export class PublicProcessor implements Traceable {
512
568
  @trackSpan('PublicProcessor.processPrivateOnlyTx', (tx: Tx) => ({
513
569
  [Attributes.TX_HASH]: tx.getTxHash().toString(),
514
570
  }))
515
- private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined]> {
571
+ private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined, DebugLog[]]> {
516
572
  const gasFees = this.globalVariables.gasFees;
517
573
  const transactionFee = computeTransactionFee(gasFees, tx.data.constants.txContext.gasSettings, tx.data.gasUsed);
518
574
 
@@ -535,15 +591,15 @@ export class PublicProcessor implements Traceable {
535
591
  // Fee payment insertion has already been done. Do the rest.
536
592
  await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
537
593
 
538
- await this.contractsDB.addNewContracts(tx);
594
+ this.contractsDB.addNewContracts(tx);
539
595
 
540
- return [processedTx, undefined];
596
+ return [processedTx, undefined, []];
541
597
  }
542
598
 
543
599
  @trackSpan('PublicProcessor.processTxWithPublicCalls', tx => ({
544
600
  [Attributes.TX_HASH]: tx.getTxHash().toString(),
545
601
  }))
546
- private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
602
+ private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
547
603
  const timer = new Timer();
548
604
 
549
605
  const result = await this.publicTxSimulator.simulate(tx);
@@ -581,7 +637,7 @@ export class PublicProcessor implements Traceable {
581
637
  revertReason,
582
638
  );
583
639
 
584
- return [processedTx, appLogicReturnValues];
640
+ return [processedTx, appLogicReturnValues, result.logs ?? []];
585
641
  }
586
642
 
587
643
  /**
@@ -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
  }