@aztec/simulator 0.0.1-commit.c2eed6949 → 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 (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/fixtures/amm_test.js +2 -2
  34. package/dest/public/fixtures/bulk_test.d.ts +1 -1
  35. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  36. package/dest/public/fixtures/bulk_test.js +33 -6
  37. package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
  38. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  39. package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
  40. package/dest/public/fixtures/index.d.ts +2 -4
  41. package/dest/public/fixtures/index.d.ts.map +1 -1
  42. package/dest/public/fixtures/index.js +1 -3
  43. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  44. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  45. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  46. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +11 -7
  47. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  48. package/dest/public/fixtures/public_tx_simulation_tester.js +33 -43
  49. package/dest/public/fixtures/simple_contract_data_source.js +1 -1
  50. package/dest/public/fixtures/token_test.js +3 -3
  51. package/dest/public/fixtures/utils.d.ts +1 -1
  52. package/dest/public/fixtures/utils.d.ts.map +1 -1
  53. package/dest/public/fixtures/utils.js +16 -15
  54. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
  55. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  56. package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
  57. package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
  58. package/dest/public/index.d.ts +5 -2
  59. package/dest/public/index.d.ts.map +1 -1
  60. package/dest/public/index.js +2 -1
  61. package/dest/public/public_db_sources.d.ts +5 -2
  62. package/dest/public/public_db_sources.d.ts.map +1 -1
  63. package/dest/public/public_db_sources.js +9 -3
  64. package/dest/public/public_processor/guarded_merkle_tree.d.ts +4 -3
  65. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  66. package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
  67. package/dest/public/public_processor/public_processor.d.ts +11 -6
  68. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  69. package/dest/public/public_processor/public_processor.js +67 -38
  70. package/dest/public/public_processor/public_processor_metrics.d.ts +4 -1
  71. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  72. package/dest/public/public_processor/public_processor_metrics.js +8 -0
  73. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  74. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  75. package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
  76. package/dest/public/public_tx_simulator/factories.d.ts +8 -8
  77. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
  78. package/dest/public/public_tx_simulator/factories.js +8 -8
  79. package/dest/public/public_tx_simulator/index.d.ts +4 -6
  80. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  81. package/dest/public/public_tx_simulator/index.js +2 -4
  82. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -71
  83. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  84. package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -318
  85. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  86. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  87. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  88. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
  89. package/dest/public/test_executor_metrics.d.ts +1 -6
  90. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  91. package/dest/public/test_executor_metrics.js +0 -22
  92. package/package.json +20 -17
  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/fixtures/amm_test.ts +2 -2
  104. package/src/public/fixtures/bulk_test.ts +31 -6
  105. package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
  106. package/src/public/fixtures/index.ts +1 -3
  107. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  108. package/src/public/fixtures/public_tx_simulation_tester.ts +41 -60
  109. package/src/public/fixtures/simple_contract_data_source.ts +1 -1
  110. package/src/public/fixtures/token_test.ts +3 -3
  111. package/src/public/fixtures/utils.ts +18 -20
  112. package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
  113. package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
  114. package/src/public/index.ts +7 -3
  115. package/src/public/public_db_sources.ts +12 -3
  116. package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
  117. package/src/public/public_processor/public_processor.ts +89 -46
  118. package/src/public/public_processor/public_processor_metrics.ts +12 -0
  119. package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
  120. package/src/public/public_tx_simulator/factories.ts +27 -10
  121. package/src/public/public_tx_simulator/index.ts +6 -5
  122. package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -476
  123. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  124. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
  125. package/src/public/test_executor_metrics.ts +0 -24
  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 -356
  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 -99
  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 -609
  336. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -125
  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
@@ -2,10 +2,8 @@ import {
2
2
  CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE,
3
3
  CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,
4
4
  CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
5
- DEFAULT_DA_GAS_LIMIT,
6
- DEFAULT_L2_GAS_LIMIT,
7
- DEFAULT_TEARDOWN_DA_GAS_LIMIT,
8
- DEFAULT_TEARDOWN_L2_GAS_LIMIT,
5
+ MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT,
6
+ MAX_PROCESSABLE_L2_GAS,
9
7
  PRIVATE_LOG_SIZE_IN_FIELDS,
10
8
  } from '@aztec/constants';
11
9
  import { padArrayEnd } from '@aztec/foundation/collection';
@@ -38,6 +36,9 @@ import {
38
36
 
39
37
  import { strict as assert } from 'assert';
40
38
 
39
+ const TEARDOWN_DA_GAS_LIMIT = 98_304;
40
+ const TEARDOWN_L2_GAS_LIMIT = 817_500;
41
+
41
42
  export type TestPrivateInsertions = {
42
43
  revertible?: {
43
44
  nullifiers?: Fr[];
@@ -69,7 +70,7 @@ export async function createTxForPublicCalls(
69
70
  "Can't create public tx with no enqueued calls",
70
71
  );
71
72
  // use max limits
72
- gasLimits = gasLimits ?? new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
73
+ gasLimits = gasLimits ?? new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
73
74
 
74
75
  const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
75
76
 
@@ -128,9 +129,7 @@ export async function createTxForPublicCalls(
128
129
  }
129
130
 
130
131
  const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
131
- const teardownGasLimits = teardownCallRequest
132
- ? new Gas(DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT)
133
- : Gas.empty();
132
+ const teardownGasLimits = teardownCallRequest ? new Gas(TEARDOWN_DA_GAS_LIMIT, TEARDOWN_L2_GAS_LIMIT) : Gas.empty();
134
133
  const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
135
134
  const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
136
135
  const header = BlockHeader.empty({ globalVariables: globals });
@@ -164,7 +163,7 @@ export async function createTxForPrivateOnly(
164
163
  gasUsedByPrivate: Gas = new Gas(10, 10),
165
164
  ): Promise<Tx> {
166
165
  // use max limits
167
- const gasLimits = new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
166
+ const gasLimits = new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
168
167
 
169
168
  const forRollup = PartialPrivateTailPublicInputsForRollup.empty();
170
169
 
@@ -229,17 +228,15 @@ export async function addNewContractInstanceToTx(
229
228
  contractInstance: ContractInstanceWithAddress,
230
229
  skipNullifierInsertion = false,
231
230
  ) {
232
- // can't use publicKeys.toFields() because it includes isInfinite which
233
- // is not broadcast in such private logs
231
+ // Only ivpk_m is broadcast as a point (x, y); the other five keys are hashes.
234
232
  const publicKeysAsFields = [
235
- contractInstance.publicKeys.masterNullifierPublicKey.x,
236
- contractInstance.publicKeys.masterNullifierPublicKey.y,
237
- contractInstance.publicKeys.masterIncomingViewingPublicKey.x,
238
- contractInstance.publicKeys.masterIncomingViewingPublicKey.y,
239
- contractInstance.publicKeys.masterOutgoingViewingPublicKey.x,
240
- contractInstance.publicKeys.masterOutgoingViewingPublicKey.y,
241
- contractInstance.publicKeys.masterTaggingPublicKey.x,
242
- contractInstance.publicKeys.masterTaggingPublicKey.y,
233
+ contractInstance.publicKeys.npkMHash,
234
+ contractInstance.publicKeys.ivpkM.x,
235
+ contractInstance.publicKeys.ivpkM.y,
236
+ contractInstance.publicKeys.ovpkMHash,
237
+ contractInstance.publicKeys.tpkMHash,
238
+ contractInstance.publicKeys.mspkMHash,
239
+ contractInstance.publicKeys.fbpkMHash,
243
240
  ];
244
241
  const logFields = [
245
242
  CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG,
@@ -248,6 +245,7 @@ export async function addNewContractInstanceToTx(
248
245
  new Fr(contractInstance.salt),
249
246
  contractInstance.currentContractClassId,
250
247
  contractInstance.initializationHash,
248
+ contractInstance.immutablesHash,
251
249
  ...publicKeysAsFields,
252
250
  contractInstance.deployer.toField(),
253
251
  ];
@@ -257,7 +255,7 @@ export async function addNewContractInstanceToTx(
257
255
  );
258
256
 
259
257
  const contractAddressNullifier = await siloNullifier(
260
- AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
258
+ AztecAddress.fromNumberUnsafe(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
261
259
  contractInstance.address.toField(),
262
260
  );
263
261
 
@@ -33,7 +33,8 @@ import {
33
33
  } from '@aztec/stdlib/tx';
34
34
  import type { NativeWorldStateService } from '@aztec/world-state';
35
35
 
36
- import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
36
+ import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
37
+ import { AvmSimulatorPool } from '../avm_simulator_pool.js';
37
38
  import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
38
39
  import { PublicContractsDB } from '../public_db_sources.js';
39
40
  import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
@@ -75,7 +76,7 @@ export class FuzzerSimulationRequest {
75
76
 
76
77
  /**
77
78
  * Creates a TypeScript Tx object from a deserialized C++ Tx (AvmTxHint-like structure).
78
- * This allows using PublicTxSimulator.simulate() with fuzzer-generated transactions.
79
+ * This allows simulating fuzzer-generated transactions with the C++ public tx simulator.
79
80
  */
80
81
  async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
81
82
  // Create TxHash from the C++ tx hash string
@@ -189,6 +190,8 @@ async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
189
190
  /**
190
191
  * A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
191
192
  * It provides methods for registering contracts from C++ msgpack data and simulating transactions.
193
+ * The simulation itself runs on the production C++ AVM simulator, so the fuzzer compares brillig
194
+ * execution against the real AVM rather than a TS reference.
192
195
  */
193
196
  export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
194
197
  private simulator: PublicTxSimulator;
@@ -197,22 +200,27 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
197
200
  merkleTrees: MerkleTreeWriteOperations,
198
201
  contractDataSource: SimpleContractDataSource,
199
202
  globals: GlobalVariables,
200
- protocolContracts: ProtocolContracts,
203
+ private avmSimulator: AvmSimulatorPool,
204
+ contractsDB: PublicContractsDB,
205
+ forkId: number,
201
206
  ) {
202
207
  super(contractDataSource, merkleTrees);
203
- const contractsDb = new PublicContractsDB(contractDataSource);
208
+ // collectPublicInputs and collectCallMetadata are required so the C++ result carries the end
209
+ // tree snapshots and app-logic return values that the fuzzer bin reports back to the harness.
204
210
  this.simulator = new PublicTxSimulator(
205
- merkleTrees,
206
- contractsDb,
211
+ avmSimulator,
207
212
  globals,
213
+ contractsDB,
214
+ forkId,
208
215
  {
209
216
  skipFeeEnforcement: false,
210
217
  collectDebugLogs: false,
211
218
  collectHints: false,
219
+ collectPublicInputs: true,
212
220
  collectStatistics: false,
213
- collectCallMetadata: false,
221
+ collectCallMetadata: true,
214
222
  },
215
- protocolContracts,
223
+ undefined,
216
224
  );
217
225
  }
218
226
 
@@ -222,11 +230,18 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
222
230
  public static async create(
223
231
  worldStateService: NativeWorldStateService,
224
232
  globals: GlobalVariables,
225
- protocolContracts: ProtocolContracts,
226
233
  ): Promise<AvmFuzzerSimulator> {
227
234
  const contractDataSource = new SimpleContractDataSource();
228
235
  const merkleTrees = await worldStateService.fork();
229
- return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, protocolContracts);
236
+ const forkId = merkleTrees.getRevision().forkId;
237
+ const avmSimulator = await AvmSimulatorPool.spawn({ wsdbIpcPath: worldStateService.getIpcPath() });
238
+ const contractsDB = new PublicContractsDB(contractDataSource);
239
+ return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, avmSimulator, contractsDB, forkId);
240
+ }
241
+
242
+ /** Tear down the AVM simulator pool (AVM processes and CDB server). */
243
+ public async close(): Promise<void> {
244
+ await this.avmSimulator[Symbol.asyncDispose]();
230
245
  }
231
246
 
232
247
  /**
@@ -7,7 +7,7 @@ import {
7
7
  deserializeFromMessagePack,
8
8
  serializeWithMessagePack,
9
9
  } from '@aztec/stdlib/avm';
10
- import { GlobalVariables, ProtocolContracts, TreeSnapshots } from '@aztec/stdlib/tx';
10
+ import { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
11
11
  import { NativeWorldStateService } from '@aztec/world-state';
12
12
 
13
13
  import { createInterface } from 'readline';
@@ -58,7 +58,6 @@ async function simulateWithFuzzer(
58
58
  rawContractInstances: [any, any][], // Replace these when we are moving contract instances to TS
59
59
  rawPublicDataWrites: any[], // Public data tree writes to apply before simulation
60
60
  rawNoteHashes: any[], // Note hashes to apply before simulation
61
- protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
62
61
  ): Promise<{
63
62
  reverted: boolean;
64
63
  output: Fr[];
@@ -68,7 +67,7 @@ async function simulateWithFuzzer(
68
67
  }> {
69
68
  const worldStateService = await openExistingWorldState(dataDir, mapSizeKb);
70
69
 
71
- const simulator = await AvmFuzzerSimulator.create(worldStateService, globals, protocolContracts);
70
+ const simulator = await AvmFuzzerSimulator.create(worldStateService, globals);
72
71
 
73
72
  await simulator.applyNoteHashes(rawNoteHashes);
74
73
 
@@ -108,7 +107,7 @@ async function execute(base64Line: string): Promise<void> {
108
107
  const rawRequest = deserializeFromMessagePack(buffer);
109
108
  const request = FuzzerSimulationRequest.fromPlainObject(rawRequest);
110
109
 
111
- // Run the TS simulation
110
+ // Run the simulation on the C++ AVM simulator
112
111
  const result = await simulateWithFuzzer(
113
112
  request.wsDataDir,
114
113
  request.wsMapSizeKb,
@@ -118,7 +117,6 @@ async function execute(base64Line: string): Promise<void> {
118
117
  request.contractInstances,
119
118
  request.publicDataWrites,
120
119
  request.noteHashes,
121
- request.protocolContracts,
122
120
  );
123
121
 
124
122
  // Serialize the result to msgpack and encode it in base64 for output
@@ -1,12 +1,16 @@
1
+ export { AvmSimulatorPool, type AvmSimulatorPoolOptions } from './avm_simulator_pool.js';
2
+ export type { PublicContractsDBInterface } from './db_interfaces.js';
1
3
  export { PublicContractsDB } from './public_db_sources.js';
2
4
  export { GuardedMerkleTreeOperations } from './public_processor/guarded_merkle_tree.js';
3
5
  export { PublicProcessor, PublicProcessorFactory } from './public_processor/public_processor.js';
6
+ export type { AvmContractsDBContext, AvmSimulator } from './avm_simulator.js';
4
7
  export {
5
- CppPublicTxSimulator,
8
+ PublicTxSimulator,
9
+ MeasuredPublicTxSimulator,
6
10
  createPublicTxSimulatorForBlockBuilding,
7
- DumpingCppPublicTxSimulator,
11
+ DumpingPublicTxSimulator,
8
12
  type PublicTxSimulatorInterface,
9
- TelemetryCppPublicTxSimulator,
13
+ TelemetryPublicTxSimulator,
10
14
  } from './public_tx_simulator/index.js';
11
15
  export type { PublicTxResult, PublicSimulatorConfig as PublicTxSimulatorConfig } from '@aztec/stdlib/avm';
12
16
  export { getCallRequestsWithCalldataByPhase } from './utils.js';
@@ -55,7 +55,8 @@ export class PublicContractsDB implements PublicContractsDBInterface {
55
55
  this.log = createLogger('simulator:contracts-data-source', bindings);
56
56
  }
57
57
 
58
- public addContracts(contractDeploymentData: ContractDeploymentData): void {
58
+ /** Parses raw contract deployment data and inserts the resulting contracts into the current checkpoint. */
59
+ public addContractsFromLogs(contractDeploymentData: ContractDeploymentData): void {
59
60
  const currentState = this.getCurrentState();
60
61
 
61
62
  this.addContractClassesFromEvents(
@@ -71,8 +72,16 @@ export class PublicContractsDB implements PublicContractsDBInterface {
71
72
 
72
73
  public addNewContracts(tx: Tx): void {
73
74
  const contractDeploymentData = AllContractDeploymentData.fromTx(tx);
74
- this.addContracts(contractDeploymentData.getNonRevertibleContractDeploymentData());
75
- this.addContracts(contractDeploymentData.getRevertibleContractDeploymentData());
75
+ this.addContractsFromLogs(contractDeploymentData.getNonRevertibleContractDeploymentData());
76
+ this.addContractsFromLogs(contractDeploymentData.getRevertibleContractDeploymentData());
77
+ }
78
+
79
+ /** Inserts typed contract instances directly into the current checkpoint. */
80
+ public addContracts(contractInstances?: ContractInstanceWithAddress[]): void {
81
+ const currentState = this.getCurrentState();
82
+ for (const instance of contractInstances ?? []) {
83
+ currentState.addInstance(instance.address, instance);
84
+ }
76
85
  }
77
86
 
78
87
  /**
@@ -12,7 +12,7 @@ import type {
12
12
  TreeInfo,
13
13
  } from '@aztec/stdlib/trees';
14
14
  import type { BlockHeader, StateReference } from '@aztec/stdlib/tx';
15
- import type { WorldStateRevision, WorldStateRevisionWithHandle } from '@aztec/stdlib/world-state';
15
+ import type { WorldStateRevision } from '@aztec/stdlib/world-state';
16
16
 
17
17
  /**
18
18
  * Wraps an instance of `MerkleTreeWriteOperations` to allow the sequencer to gate access.
@@ -94,9 +94,12 @@ export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
94
94
  getInitialHeader(): BlockHeader {
95
95
  return this.target.getInitialHeader();
96
96
  }
97
- public getRevision(): WorldStateRevision | WorldStateRevisionWithHandle {
97
+ public getRevision(): WorldStateRevision {
98
98
  return this.target.getRevision();
99
99
  }
100
+ public getIpcPath(): string {
101
+ return this.target.getIpcPath();
102
+ }
100
103
  getSiblingPath<ID extends MerkleTreeId>(treeId: ID, index: bigint): Promise<SiblingPath<TreeHeights[ID]>> {
101
104
  return this.guardAndPush(() => this.target.getSiblingPath(treeId, index));
102
105
  }
@@ -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.
@@ -161,7 +173,7 @@ export class PublicProcessor implements Traceable {
161
173
  limits: PublicProcessorLimits = {},
162
174
  validator: PublicProcessorValidator = {},
163
175
  ): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], DebugLog[]]> {
164
- const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal } = limits;
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,11 +196,15 @@ 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
209
  const txHash = tx.getTxHash().toString();
192
210
 
@@ -224,11 +242,6 @@ export class PublicProcessor implements Traceable {
224
242
  failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
225
243
  returns.push(new NestedProcessReturnValues([]));
226
244
  continue;
227
- } else if (result.result === 'skipped') {
228
- const reason = result.reason.join(', ');
229
- this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
230
- returns.push(new NestedProcessReturnValues([]));
231
- continue;
232
245
  } else {
233
246
  this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
234
247
  }
@@ -244,7 +257,9 @@ export class PublicProcessor implements Traceable {
244
257
  this.contractsDB.createCheckpoint();
245
258
 
246
259
  try {
247
- const [processedTx, returnValues, txDebugLogs] = await this.processTx(tx, deadline);
260
+ const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(() =>
261
+ this.processTx(tx, deadline, signal),
262
+ );
248
263
 
249
264
  // Inject a fake processing failure after N txs if requested
250
265
  const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
@@ -265,8 +280,12 @@ export class PublicProcessor implements Traceable {
265
280
  txBlobFields,
266
281
  totalBlobFields,
267
282
  maxBlobFields,
283
+ txProcessingTimeMs,
268
284
  },
269
285
  );
286
+ silentlySkippedCount += 1;
287
+ totalSilentlySkippedDurationMs += txProcessingTimeMs;
288
+ this.metrics.recordSilentlySkipped(txProcessingTimeMs);
270
289
  // Need to revert the checkpoint here and don't go any further
271
290
  await checkpoint.revert();
272
291
  this.contractsDB.revertCheckpoint();
@@ -310,15 +329,15 @@ export class PublicProcessor implements Traceable {
310
329
  // Commit the tx-level contracts checkpoint on success
311
330
  this.contractsDB.commitCheckpoint();
312
331
  } catch (err: any) {
313
- if (err?.name === 'PublicProcessorTimeoutError') {
314
- this.log.warn(`Stopping tx processing due to timeout.`);
315
- // We hit the transaction execution deadline.
316
- // There may still be a transaction executing on a worker thread (C++ via NAPI).
317
- // Signal cancellation AND WAIT for the simulation to actually stop.
318
- // This is critical because C++ might be in the middle of a slow operation (e.g., pad_trees)
319
- // and won't check the cancellation flag until that operation completes.
320
- // Without waiting, we'd proceed to revert checkpoints while C++ is still writing to state.
321
- // 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.
322
341
  await this.publicTxSimulator.cancel?.();
323
342
 
324
343
  // Now stop the guarded fork to prevent any further TS-side access to the world state.
@@ -364,13 +383,24 @@ export class PublicProcessor implements Traceable {
364
383
  const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
365
384
  this.metrics.recordAllTxs(totalPublicGas, rate);
366
385
 
367
- this.log.info(`Processed ${result.length} successful txs and ${failed.length} failed txs in ${duration}s`, {
368
- duration,
369
- rate,
370
- totalPublicGas,
371
- totalBlockGas,
372
- totalSizeInBytes,
373
- });
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
+ );
374
404
 
375
405
  return [result, failed, usedTxs, returns, debugLogs];
376
406
  }
@@ -395,9 +425,10 @@ export class PublicProcessor implements Traceable {
395
425
  private async processTx(
396
426
  tx: Tx,
397
427
  deadline: Date | undefined,
428
+ signal: AbortSignal | undefined,
398
429
  ): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
399
430
  const [time, [processedTx, returnValues, debugLogs]] = await elapsed(() =>
400
- this.processTxWithinDeadline(tx, deadline),
431
+ this.processTxWithinDeadline(tx, deadline, signal),
401
432
  );
402
433
 
403
434
  this.log.verbose(
@@ -451,10 +482,11 @@ export class PublicProcessor implements Traceable {
451
482
  this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
452
483
  }
453
484
 
454
- /** 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. */
455
486
  private async processTxWithinDeadline(
456
487
  tx: Tx,
457
488
  deadline: Date | undefined,
489
+ signal: AbortSignal | undefined,
458
490
  ): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> {
459
491
  const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> =
460
492
  tx.hasPublicCalls() ? () => this.processTxWithPublicCalls(tx) : () => this.processPrivateOnlyTx(tx);
@@ -471,27 +503,38 @@ export class PublicProcessor implements Traceable {
471
503
  }
472
504
  : innerProcessFn;
473
505
 
474
- if (!deadline) {
506
+ const processingSignal = this.getProcessingSignal(tx, deadline, signal);
507
+ if (!processingSignal) {
475
508
  return await processFn();
476
509
  }
477
510
 
478
- 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
+
479
524
  const timeout = +deadline - this.dateProvider.now();
480
525
  if (timeout <= 0) {
481
526
  throw new PublicProcessorTimeoutError();
482
527
  }
483
528
 
529
+ const txHash = tx.getTxHash();
484
530
  this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
485
531
  deadline: deadline.toISOString(),
486
532
  now: new Date(this.dateProvider.now()).toISOString(),
487
533
  txHash,
488
534
  });
489
535
 
490
- return await executeTimeout(
491
- () => processFn(),
492
- timeout,
493
- () => new PublicProcessorTimeoutError(),
494
- );
536
+ const timeoutSignal = AbortSignal.timeout(timeout);
537
+ return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
495
538
  }
496
539
 
497
540
  /**
@@ -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
  }