@aztec/simulator 0.0.1-commit.9ef841308 → 0.0.1-commit.a4600f49

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 (359) 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/generated/api_types.d.ts +171 -0
  31. package/dest/public/cdb/generated/api_types.d.ts.map +1 -0
  32. package/dest/public/cdb/generated/api_types.js +314 -0
  33. package/dest/public/cdb/generated/server.d.ts +26 -0
  34. package/dest/public/cdb/generated/server.d.ts.map +1 -0
  35. package/dest/public/cdb/generated/server.js +135 -0
  36. package/dest/public/cdb_ipc_server.d.ts +33 -0
  37. package/dest/public/cdb_ipc_server.d.ts.map +1 -0
  38. package/dest/public/cdb_ipc_server.js +153 -0
  39. package/dest/public/fixtures/amm_test.js +2 -2
  40. package/dest/public/fixtures/bulk_test.d.ts +1 -1
  41. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  42. package/dest/public/fixtures/bulk_test.js +33 -6
  43. package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
  44. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  45. package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
  46. package/dest/public/fixtures/index.d.ts +2 -4
  47. package/dest/public/fixtures/index.d.ts.map +1 -1
  48. package/dest/public/fixtures/index.js +1 -3
  49. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  50. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  51. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  52. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +11 -7
  53. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  54. package/dest/public/fixtures/public_tx_simulation_tester.js +33 -43
  55. package/dest/public/fixtures/simple_contract_data_source.js +1 -1
  56. package/dest/public/fixtures/token_test.js +3 -3
  57. package/dest/public/fixtures/utils.d.ts +1 -1
  58. package/dest/public/fixtures/utils.d.ts.map +1 -1
  59. package/dest/public/fixtures/utils.js +16 -15
  60. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
  61. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  62. package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
  63. package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
  64. package/dest/public/index.d.ts +5 -2
  65. package/dest/public/index.d.ts.map +1 -1
  66. package/dest/public/index.js +2 -1
  67. package/dest/public/public_db_sources.d.ts +5 -2
  68. package/dest/public/public_db_sources.d.ts.map +1 -1
  69. package/dest/public/public_db_sources.js +9 -3
  70. package/dest/public/public_processor/guarded_merkle_tree.d.ts +4 -3
  71. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  72. package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
  73. package/dest/public/public_processor/public_processor.d.ts +11 -6
  74. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  75. package/dest/public/public_processor/public_processor.js +67 -38
  76. package/dest/public/public_processor/public_processor_metrics.d.ts +4 -1
  77. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  78. package/dest/public/public_processor/public_processor_metrics.js +8 -0
  79. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  80. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  81. package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
  82. package/dest/public/public_tx_simulator/factories.d.ts +8 -8
  83. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
  84. package/dest/public/public_tx_simulator/factories.js +8 -8
  85. package/dest/public/public_tx_simulator/index.d.ts +4 -6
  86. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  87. package/dest/public/public_tx_simulator/index.js +2 -4
  88. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -71
  89. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  90. package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -318
  91. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  92. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  93. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  94. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
  95. package/dest/public/test_executor_metrics.d.ts +1 -6
  96. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  97. package/dest/public/test_executor_metrics.js +0 -22
  98. package/package.json +22 -18
  99. package/src/client.ts +0 -2
  100. package/src/private/acvm_wasm.ts +4 -1
  101. package/src/private/circuit_recording/circuit_recorder.ts +84 -78
  102. package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
  103. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
  104. package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
  105. package/src/public/avm/{fixtures → testing}/utils.ts +4 -40
  106. package/src/public/avm_simulator.ts +29 -0
  107. package/src/public/avm_simulator_pool.ts +226 -0
  108. package/src/public/cdb/generated/api_types.ts +457 -0
  109. package/src/public/cdb/generated/server.ts +109 -0
  110. package/src/public/cdb_ipc_server.ts +197 -0
  111. package/src/public/fixtures/amm_test.ts +2 -2
  112. package/src/public/fixtures/bulk_test.ts +31 -6
  113. package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
  114. package/src/public/fixtures/index.ts +1 -3
  115. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  116. package/src/public/fixtures/public_tx_simulation_tester.ts +41 -60
  117. package/src/public/fixtures/simple_contract_data_source.ts +1 -1
  118. package/src/public/fixtures/token_test.ts +3 -3
  119. package/src/public/fixtures/utils.ts +18 -20
  120. package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
  121. package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
  122. package/src/public/index.ts +7 -3
  123. package/src/public/public_db_sources.ts +12 -3
  124. package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
  125. package/src/public/public_processor/public_processor.ts +89 -46
  126. package/src/public/public_processor/public_processor_metrics.ts +12 -0
  127. package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
  128. package/src/public/public_tx_simulator/factories.ts +27 -10
  129. package/src/public/public_tx_simulator/index.ts +6 -5
  130. package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -476
  131. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  132. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
  133. package/src/public/test_executor_metrics.ts +0 -24
  134. package/dest/public/avm/avm_context.d.ts +0 -41
  135. package/dest/public/avm/avm_context.d.ts.map +0 -1
  136. package/dest/public/avm/avm_context.js +0 -44
  137. package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
  138. package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
  139. package/dest/public/avm/avm_contract_call_result.js +0 -54
  140. package/dest/public/avm/avm_execution_environment.d.ts +0 -24
  141. package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
  142. package/dest/public/avm/avm_execution_environment.js +0 -33
  143. package/dest/public/avm/avm_gas.d.ts +0 -44
  144. package/dest/public/avm/avm_gas.d.ts.map +0 -1
  145. package/dest/public/avm/avm_gas.js +0 -195
  146. package/dest/public/avm/avm_machine_state.d.ts +0 -98
  147. package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
  148. package/dest/public/avm/avm_machine_state.js +0 -110
  149. package/dest/public/avm/avm_memory_types.d.ts +0 -275
  150. package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
  151. package/dest/public/avm/avm_memory_types.js +0 -354
  152. package/dest/public/avm/avm_simulator.d.ts +0 -41
  153. package/dest/public/avm/avm_simulator.d.ts.map +0 -1
  154. package/dest/public/avm/avm_simulator.js +0 -192
  155. package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
  156. package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
  157. package/dest/public/avm/avm_simulator_interface.js +0 -3
  158. package/dest/public/avm/calldata.d.ts +0 -51
  159. package/dest/public/avm/calldata.d.ts.map +0 -1
  160. package/dest/public/avm/calldata.js +0 -64
  161. package/dest/public/avm/errors.d.ts +0 -104
  162. package/dest/public/avm/errors.d.ts.map +0 -1
  163. package/dest/public/avm/errors.js +0 -141
  164. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +0 -2
  165. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +0 -1
  166. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
  167. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  168. package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -84
  169. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  170. package/dest/public/avm/fixtures/initializers.d.ts +0 -42
  171. package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
  172. package/dest/public/avm/fixtures/initializers.js +0 -45
  173. package/dest/public/avm/fixtures/utils.d.ts +0 -39
  174. package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
  175. package/dest/public/avm/index.d.ts +0 -2
  176. package/dest/public/avm/index.d.ts.map +0 -1
  177. package/dest/public/avm/index.js +0 -1
  178. package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -74
  179. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
  180. package/dest/public/avm/opcodes/accrued_substate.js +0 -254
  181. package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
  182. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
  183. package/dest/public/avm/opcodes/addressing_mode.js +0 -94
  184. package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
  185. package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
  186. package/dest/public/avm/opcodes/arithmetic.js +0 -97
  187. package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
  188. package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
  189. package/dest/public/avm/opcodes/bitwise.js +0 -99
  190. package/dest/public/avm/opcodes/comparators.d.ts +0 -25
  191. package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
  192. package/dest/public/avm/opcodes/comparators.js +0 -43
  193. package/dest/public/avm/opcodes/contract.d.ts +0 -20
  194. package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
  195. package/dest/public/avm/opcodes/contract.js +0 -65
  196. package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
  197. package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
  198. package/dest/public/avm/opcodes/control_flow.js +0 -107
  199. package/dest/public/avm/opcodes/conversion.d.ts +0 -18
  200. package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
  201. package/dest/public/avm/opcodes/conversion.js +0 -333
  202. package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
  203. package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
  204. package/dest/public/avm/opcodes/ec_add.js +0 -93
  205. package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
  206. package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
  207. package/dest/public/avm/opcodes/environment_getters.js +0 -77
  208. package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
  209. package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
  210. package/dest/public/avm/opcodes/external_calls.js +0 -210
  211. package/dest/public/avm/opcodes/hashing.d.ts +0 -36
  212. package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
  213. package/dest/public/avm/opcodes/hashing.js +0 -119
  214. package/dest/public/avm/opcodes/index.d.ts +0 -16
  215. package/dest/public/avm/opcodes/index.d.ts.map +0 -1
  216. package/dest/public/avm/opcodes/index.js +0 -15
  217. package/dest/public/avm/opcodes/instruction.d.ts +0 -74
  218. package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
  219. package/dest/public/avm/opcodes/instruction.js +0 -95
  220. package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
  221. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
  222. package/dest/public/avm/opcodes/instruction_impl.js +0 -30
  223. package/dest/public/avm/opcodes/memory.d.ts +0 -74
  224. package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
  225. package/dest/public/avm/opcodes/memory.js +0 -257
  226. package/dest/public/avm/opcodes/misc.d.ts +0 -18
  227. package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
  228. package/dest/public/avm/opcodes/misc.js +0 -73
  229. package/dest/public/avm/opcodes/storage.d.ts +0 -25
  230. package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
  231. package/dest/public/avm/opcodes/storage.js +0 -78
  232. package/dest/public/avm/revert_reason.d.ts +0 -18
  233. package/dest/public/avm/revert_reason.d.ts.map +0 -1
  234. package/dest/public/avm/revert_reason.js +0 -39
  235. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
  236. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
  237. package/dest/public/avm/serialization/buffer_cursor.js +0 -99
  238. package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
  239. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  240. package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
  241. package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
  242. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
  243. package/dest/public/avm/serialization/instruction_serialization.js +0 -261
  244. package/dest/public/avm/test_utils.d.ts +0 -15
  245. package/dest/public/avm/test_utils.d.ts.map +0 -1
  246. package/dest/public/avm/test_utils.js +0 -44
  247. package/dest/public/debug_fn_name.d.ts +0 -18
  248. package/dest/public/debug_fn_name.d.ts.map +0 -1
  249. package/dest/public/debug_fn_name.js +0 -37
  250. package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -12
  251. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
  252. package/dest/public/fixtures/custom_bytecode_tests.js +0 -174
  253. package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
  254. package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
  255. package/dest/public/fixtures/minimal_public_tx.js +0 -19
  256. package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
  257. package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
  258. package/dest/public/fixtures/opcode_spammer.js +0 -1653
  259. package/dest/public/hinting_db_sources.d.ts +0 -80
  260. package/dest/public/hinting_db_sources.d.ts.map +0 -1
  261. package/dest/public/hinting_db_sources.js +0 -356
  262. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
  263. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
  264. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -99
  265. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
  266. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
  267. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -131
  268. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
  269. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
  270. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
  271. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
  272. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
  273. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
  274. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
  275. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
  276. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
  277. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
  278. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
  279. package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -135
  280. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
  281. package/dest/public/public_tx_simulator/public_tx_context.js +0 -304
  282. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
  283. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
  284. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
  285. package/dest/public/side_effect_trace.d.ts +0 -87
  286. package/dest/public/side_effect_trace.d.ts.map +0 -1
  287. package/dest/public/side_effect_trace.js +0 -199
  288. package/dest/public/side_effect_trace_interface.d.ts +0 -22
  289. package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
  290. package/dest/public/side_effect_trace_interface.js +0 -1
  291. package/dest/public/state_manager/index.d.ts +0 -2
  292. package/dest/public/state_manager/index.d.ts.map +0 -1
  293. package/dest/public/state_manager/index.js +0 -1
  294. package/dest/public/state_manager/nullifiers.d.ts +0 -61
  295. package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
  296. package/dest/public/state_manager/nullifiers.js +0 -92
  297. package/dest/public/state_manager/public_storage.d.ts +0 -66
  298. package/dest/public/state_manager/public_storage.d.ts.map +0 -1
  299. package/dest/public/state_manager/public_storage.js +0 -145
  300. package/dest/public/state_manager/state_manager.d.ts +0 -170
  301. package/dest/public/state_manager/state_manager.d.ts.map +0 -1
  302. package/dest/public/state_manager/state_manager.js +0 -402
  303. package/src/public/avm/avm_context.ts +0 -61
  304. package/src/public/avm/avm_contract_call_result.ts +0 -69
  305. package/src/public/avm/avm_execution_environment.ts +0 -51
  306. package/src/public/avm/avm_gas.ts +0 -183
  307. package/src/public/avm/avm_machine_state.ts +0 -170
  308. package/src/public/avm/avm_memory_types.ts +0 -440
  309. package/src/public/avm/avm_simulator.ts +0 -279
  310. package/src/public/avm/avm_simulator_interface.ts +0 -8
  311. package/src/public/avm/calldata.ts +0 -101
  312. package/src/public/avm/errors.ts +0 -177
  313. package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
  314. package/src/public/avm/fixtures/initializers.ts +0 -103
  315. package/src/public/avm/index.ts +0 -1
  316. package/src/public/avm/opcodes/accrued_substate.ts +0 -285
  317. package/src/public/avm/opcodes/addressing_mode.ts +0 -111
  318. package/src/public/avm/opcodes/arithmetic.ts +0 -129
  319. package/src/public/avm/opcodes/bitwise.ts +0 -113
  320. package/src/public/avm/opcodes/comparators.ts +0 -55
  321. package/src/public/avm/opcodes/contract.ts +0 -72
  322. package/src/public/avm/opcodes/control_flow.ts +0 -123
  323. package/src/public/avm/opcodes/conversion.ts +0 -104
  324. package/src/public/avm/opcodes/ec_add.ts +0 -105
  325. package/src/public/avm/opcodes/environment_getters.ts +0 -87
  326. package/src/public/avm/opcodes/external_calls.ts +0 -262
  327. package/src/public/avm/opcodes/hashing.ts +0 -151
  328. package/src/public/avm/opcodes/index.ts +0 -15
  329. package/src/public/avm/opcodes/instruction.ts +0 -136
  330. package/src/public/avm/opcodes/instruction_impl.ts +0 -36
  331. package/src/public/avm/opcodes/memory.ts +0 -293
  332. package/src/public/avm/opcodes/misc.ts +0 -102
  333. package/src/public/avm/opcodes/storage.ts +0 -95
  334. package/src/public/avm/revert_reason.ts +0 -58
  335. package/src/public/avm/serialization/buffer_cursor.ts +0 -118
  336. package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
  337. package/src/public/avm/serialization/instruction_serialization.ts +0 -249
  338. package/src/public/avm/test_utils.ts +0 -64
  339. package/src/public/debug_fn_name.ts +0 -52
  340. package/src/public/fixtures/custom_bytecode_tests.ts +0 -228
  341. package/src/public/fixtures/minimal_public_tx.ts +0 -26
  342. package/src/public/fixtures/opcode_spammer.ts +0 -1717
  343. package/src/public/hinting_db_sources.ts +0 -609
  344. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -125
  345. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -210
  346. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
  347. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
  348. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
  349. package/src/public/public_tx_simulator/public_tx_context.ts +0 -488
  350. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
  351. package/src/public/side_effect_trace.ts +0 -293
  352. package/src/public/side_effect_trace_interface.ts +0 -28
  353. package/src/public/state_manager/index.ts +0 -1
  354. package/src/public/state_manager/nullifiers.ts +0 -103
  355. package/src/public/state_manager/public_storage.ts +0 -174
  356. package/src/public/state_manager/state_manager.ts +0 -569
  357. /package/dest/public/avm/{fixtures → testing}/account_proof_fetcher.js +0 -0
  358. /package/src/public/avm/{fixtures → testing}/account_proof.json +0 -0
  359. /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
  }