@aztec/simulator 0.0.1-commit.b6e433891 → 0.0.1-commit.b8a057fa

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 (363) 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/contracts_db_checkpoint.d.ts +2 -2
  40. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
  41. package/dest/public/contracts_db_checkpoint.js +1 -1
  42. package/dest/public/fixtures/amm_test.js +2 -2
  43. package/dest/public/fixtures/bulk_test.d.ts +1 -1
  44. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  45. package/dest/public/fixtures/bulk_test.js +33 -6
  46. package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
  47. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  48. package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
  49. package/dest/public/fixtures/index.d.ts +2 -4
  50. package/dest/public/fixtures/index.d.ts.map +1 -1
  51. package/dest/public/fixtures/index.js +1 -3
  52. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  53. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  54. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  55. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +11 -7
  56. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  57. package/dest/public/fixtures/public_tx_simulation_tester.js +33 -43
  58. package/dest/public/fixtures/simple_contract_data_source.js +1 -1
  59. package/dest/public/fixtures/token_test.js +3 -3
  60. package/dest/public/fixtures/utils.d.ts +1 -1
  61. package/dest/public/fixtures/utils.d.ts.map +1 -1
  62. package/dest/public/fixtures/utils.js +16 -15
  63. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
  64. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  65. package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
  66. package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
  67. package/dest/public/index.d.ts +5 -2
  68. package/dest/public/index.d.ts.map +1 -1
  69. package/dest/public/index.js +2 -1
  70. package/dest/public/public_db_sources.d.ts +6 -3
  71. package/dest/public/public_db_sources.d.ts.map +1 -1
  72. package/dest/public/public_db_sources.js +16 -10
  73. package/dest/public/public_processor/guarded_merkle_tree.d.ts +4 -3
  74. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  75. package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
  76. package/dest/public/public_processor/public_processor.d.ts +11 -6
  77. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  78. package/dest/public/public_processor/public_processor.js +68 -39
  79. package/dest/public/public_processor/public_processor_metrics.d.ts +4 -1
  80. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  81. package/dest/public/public_processor/public_processor_metrics.js +8 -0
  82. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  83. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  84. package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
  85. package/dest/public/public_tx_simulator/factories.d.ts +8 -8
  86. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
  87. package/dest/public/public_tx_simulator/factories.js +8 -8
  88. package/dest/public/public_tx_simulator/index.d.ts +4 -6
  89. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  90. package/dest/public/public_tx_simulator/index.js +2 -4
  91. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -71
  92. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  93. package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -318
  94. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  95. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  96. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  97. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
  98. package/dest/public/test_executor_metrics.d.ts +1 -6
  99. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  100. package/dest/public/test_executor_metrics.js +0 -22
  101. package/package.json +22 -18
  102. package/src/client.ts +0 -2
  103. package/src/private/acvm_wasm.ts +4 -1
  104. package/src/private/circuit_recording/circuit_recorder.ts +84 -78
  105. package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
  106. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
  107. package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
  108. package/src/public/avm/{fixtures → testing}/utils.ts +4 -40
  109. package/src/public/avm_simulator.ts +29 -0
  110. package/src/public/avm_simulator_pool.ts +226 -0
  111. package/src/public/cdb/generated/api_types.ts +457 -0
  112. package/src/public/cdb/generated/server.ts +109 -0
  113. package/src/public/cdb_ipc_server.ts +197 -0
  114. package/src/public/contracts_db_checkpoint.ts +1 -1
  115. package/src/public/fixtures/amm_test.ts +2 -2
  116. package/src/public/fixtures/bulk_test.ts +31 -6
  117. package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
  118. package/src/public/fixtures/index.ts +1 -3
  119. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  120. package/src/public/fixtures/public_tx_simulation_tester.ts +41 -60
  121. package/src/public/fixtures/simple_contract_data_source.ts +1 -1
  122. package/src/public/fixtures/token_test.ts +3 -3
  123. package/src/public/fixtures/utils.ts +18 -20
  124. package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
  125. package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
  126. package/src/public/index.ts +7 -3
  127. package/src/public/public_db_sources.ts +21 -14
  128. package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
  129. package/src/public/public_processor/public_processor.ts +90 -47
  130. package/src/public/public_processor/public_processor_metrics.ts +12 -0
  131. package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
  132. package/src/public/public_tx_simulator/factories.ts +27 -10
  133. package/src/public/public_tx_simulator/index.ts +6 -5
  134. package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -476
  135. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  136. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
  137. package/src/public/test_executor_metrics.ts +0 -24
  138. package/dest/public/avm/avm_context.d.ts +0 -41
  139. package/dest/public/avm/avm_context.d.ts.map +0 -1
  140. package/dest/public/avm/avm_context.js +0 -44
  141. package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
  142. package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
  143. package/dest/public/avm/avm_contract_call_result.js +0 -54
  144. package/dest/public/avm/avm_execution_environment.d.ts +0 -24
  145. package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
  146. package/dest/public/avm/avm_execution_environment.js +0 -33
  147. package/dest/public/avm/avm_gas.d.ts +0 -44
  148. package/dest/public/avm/avm_gas.d.ts.map +0 -1
  149. package/dest/public/avm/avm_gas.js +0 -195
  150. package/dest/public/avm/avm_machine_state.d.ts +0 -98
  151. package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
  152. package/dest/public/avm/avm_machine_state.js +0 -110
  153. package/dest/public/avm/avm_memory_types.d.ts +0 -275
  154. package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
  155. package/dest/public/avm/avm_memory_types.js +0 -354
  156. package/dest/public/avm/avm_simulator.d.ts +0 -41
  157. package/dest/public/avm/avm_simulator.d.ts.map +0 -1
  158. package/dest/public/avm/avm_simulator.js +0 -192
  159. package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
  160. package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
  161. package/dest/public/avm/avm_simulator_interface.js +0 -3
  162. package/dest/public/avm/calldata.d.ts +0 -51
  163. package/dest/public/avm/calldata.d.ts.map +0 -1
  164. package/dest/public/avm/calldata.js +0 -63
  165. package/dest/public/avm/errors.d.ts +0 -104
  166. package/dest/public/avm/errors.d.ts.map +0 -1
  167. package/dest/public/avm/errors.js +0 -141
  168. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +0 -2
  169. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +0 -1
  170. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
  171. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  172. package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -84
  173. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  174. package/dest/public/avm/fixtures/initializers.d.ts +0 -42
  175. package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
  176. package/dest/public/avm/fixtures/initializers.js +0 -45
  177. package/dest/public/avm/fixtures/utils.d.ts +0 -39
  178. package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
  179. package/dest/public/avm/index.d.ts +0 -2
  180. package/dest/public/avm/index.d.ts.map +0 -1
  181. package/dest/public/avm/index.js +0 -1
  182. package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -74
  183. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
  184. package/dest/public/avm/opcodes/accrued_substate.js +0 -254
  185. package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
  186. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
  187. package/dest/public/avm/opcodes/addressing_mode.js +0 -94
  188. package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
  189. package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
  190. package/dest/public/avm/opcodes/arithmetic.js +0 -97
  191. package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
  192. package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
  193. package/dest/public/avm/opcodes/bitwise.js +0 -99
  194. package/dest/public/avm/opcodes/comparators.d.ts +0 -25
  195. package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
  196. package/dest/public/avm/opcodes/comparators.js +0 -43
  197. package/dest/public/avm/opcodes/contract.d.ts +0 -20
  198. package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
  199. package/dest/public/avm/opcodes/contract.js +0 -65
  200. package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
  201. package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
  202. package/dest/public/avm/opcodes/control_flow.js +0 -107
  203. package/dest/public/avm/opcodes/conversion.d.ts +0 -18
  204. package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
  205. package/dest/public/avm/opcodes/conversion.js +0 -333
  206. package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
  207. package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
  208. package/dest/public/avm/opcodes/ec_add.js +0 -93
  209. package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
  210. package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
  211. package/dest/public/avm/opcodes/environment_getters.js +0 -77
  212. package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
  213. package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
  214. package/dest/public/avm/opcodes/external_calls.js +0 -210
  215. package/dest/public/avm/opcodes/hashing.d.ts +0 -36
  216. package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
  217. package/dest/public/avm/opcodes/hashing.js +0 -119
  218. package/dest/public/avm/opcodes/index.d.ts +0 -16
  219. package/dest/public/avm/opcodes/index.d.ts.map +0 -1
  220. package/dest/public/avm/opcodes/index.js +0 -15
  221. package/dest/public/avm/opcodes/instruction.d.ts +0 -74
  222. package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
  223. package/dest/public/avm/opcodes/instruction.js +0 -95
  224. package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
  225. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
  226. package/dest/public/avm/opcodes/instruction_impl.js +0 -30
  227. package/dest/public/avm/opcodes/memory.d.ts +0 -74
  228. package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
  229. package/dest/public/avm/opcodes/memory.js +0 -257
  230. package/dest/public/avm/opcodes/misc.d.ts +0 -18
  231. package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
  232. package/dest/public/avm/opcodes/misc.js +0 -73
  233. package/dest/public/avm/opcodes/storage.d.ts +0 -25
  234. package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
  235. package/dest/public/avm/opcodes/storage.js +0 -78
  236. package/dest/public/avm/revert_reason.d.ts +0 -18
  237. package/dest/public/avm/revert_reason.d.ts.map +0 -1
  238. package/dest/public/avm/revert_reason.js +0 -39
  239. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
  240. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
  241. package/dest/public/avm/serialization/buffer_cursor.js +0 -99
  242. package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
  243. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  244. package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
  245. package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
  246. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
  247. package/dest/public/avm/serialization/instruction_serialization.js +0 -261
  248. package/dest/public/avm/test_utils.d.ts +0 -15
  249. package/dest/public/avm/test_utils.d.ts.map +0 -1
  250. package/dest/public/avm/test_utils.js +0 -44
  251. package/dest/public/debug_fn_name.d.ts +0 -18
  252. package/dest/public/debug_fn_name.d.ts.map +0 -1
  253. package/dest/public/debug_fn_name.js +0 -37
  254. package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -12
  255. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
  256. package/dest/public/fixtures/custom_bytecode_tests.js +0 -174
  257. package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
  258. package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
  259. package/dest/public/fixtures/minimal_public_tx.js +0 -19
  260. package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
  261. package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
  262. package/dest/public/fixtures/opcode_spammer.js +0 -1653
  263. package/dest/public/hinting_db_sources.d.ts +0 -80
  264. package/dest/public/hinting_db_sources.d.ts.map +0 -1
  265. package/dest/public/hinting_db_sources.js +0 -356
  266. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
  267. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
  268. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -98
  269. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
  270. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
  271. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -131
  272. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
  273. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
  274. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
  275. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
  276. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
  277. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
  278. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
  279. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
  280. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
  281. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
  282. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
  283. package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -131
  284. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
  285. package/dest/public/public_tx_simulator/public_tx_context.js +0 -300
  286. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
  287. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
  288. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
  289. package/dest/public/side_effect_trace.d.ts +0 -87
  290. package/dest/public/side_effect_trace.d.ts.map +0 -1
  291. package/dest/public/side_effect_trace.js +0 -199
  292. package/dest/public/side_effect_trace_interface.d.ts +0 -22
  293. package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
  294. package/dest/public/side_effect_trace_interface.js +0 -1
  295. package/dest/public/state_manager/index.d.ts +0 -2
  296. package/dest/public/state_manager/index.d.ts.map +0 -1
  297. package/dest/public/state_manager/index.js +0 -1
  298. package/dest/public/state_manager/nullifiers.d.ts +0 -61
  299. package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
  300. package/dest/public/state_manager/nullifiers.js +0 -92
  301. package/dest/public/state_manager/public_storage.d.ts +0 -66
  302. package/dest/public/state_manager/public_storage.d.ts.map +0 -1
  303. package/dest/public/state_manager/public_storage.js +0 -145
  304. package/dest/public/state_manager/state_manager.d.ts +0 -170
  305. package/dest/public/state_manager/state_manager.d.ts.map +0 -1
  306. package/dest/public/state_manager/state_manager.js +0 -402
  307. package/src/public/avm/avm_context.ts +0 -61
  308. package/src/public/avm/avm_contract_call_result.ts +0 -69
  309. package/src/public/avm/avm_execution_environment.ts +0 -51
  310. package/src/public/avm/avm_gas.ts +0 -183
  311. package/src/public/avm/avm_machine_state.ts +0 -170
  312. package/src/public/avm/avm_memory_types.ts +0 -440
  313. package/src/public/avm/avm_simulator.ts +0 -279
  314. package/src/public/avm/avm_simulator_interface.ts +0 -8
  315. package/src/public/avm/calldata.ts +0 -100
  316. package/src/public/avm/errors.ts +0 -177
  317. package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
  318. package/src/public/avm/fixtures/initializers.ts +0 -103
  319. package/src/public/avm/index.ts +0 -1
  320. package/src/public/avm/opcodes/accrued_substate.ts +0 -285
  321. package/src/public/avm/opcodes/addressing_mode.ts +0 -111
  322. package/src/public/avm/opcodes/arithmetic.ts +0 -129
  323. package/src/public/avm/opcodes/bitwise.ts +0 -113
  324. package/src/public/avm/opcodes/comparators.ts +0 -55
  325. package/src/public/avm/opcodes/contract.ts +0 -72
  326. package/src/public/avm/opcodes/control_flow.ts +0 -123
  327. package/src/public/avm/opcodes/conversion.ts +0 -104
  328. package/src/public/avm/opcodes/ec_add.ts +0 -105
  329. package/src/public/avm/opcodes/environment_getters.ts +0 -87
  330. package/src/public/avm/opcodes/external_calls.ts +0 -262
  331. package/src/public/avm/opcodes/hashing.ts +0 -151
  332. package/src/public/avm/opcodes/index.ts +0 -15
  333. package/src/public/avm/opcodes/instruction.ts +0 -136
  334. package/src/public/avm/opcodes/instruction_impl.ts +0 -36
  335. package/src/public/avm/opcodes/memory.ts +0 -293
  336. package/src/public/avm/opcodes/misc.ts +0 -102
  337. package/src/public/avm/opcodes/storage.ts +0 -95
  338. package/src/public/avm/revert_reason.ts +0 -58
  339. package/src/public/avm/serialization/buffer_cursor.ts +0 -118
  340. package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
  341. package/src/public/avm/serialization/instruction_serialization.ts +0 -249
  342. package/src/public/avm/test_utils.ts +0 -64
  343. package/src/public/debug_fn_name.ts +0 -52
  344. package/src/public/fixtures/custom_bytecode_tests.ts +0 -228
  345. package/src/public/fixtures/minimal_public_tx.ts +0 -26
  346. package/src/public/fixtures/opcode_spammer.ts +0 -1717
  347. package/src/public/hinting_db_sources.ts +0 -609
  348. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -124
  349. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -210
  350. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
  351. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
  352. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
  353. package/src/public/public_tx_simulator/public_tx_context.ts +0 -484
  354. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
  355. package/src/public/side_effect_trace.ts +0 -293
  356. package/src/public/side_effect_trace_interface.ts +0 -28
  357. package/src/public/state_manager/index.ts +0 -1
  358. package/src/public/state_manager/nullifiers.ts +0 -103
  359. package/src/public/state_manager/public_storage.ts +0 -174
  360. package/src/public/state_manager/state_manager.ts +0 -569
  361. /package/dest/public/avm/{fixtures → testing}/account_proof_fetcher.js +0 -0
  362. /package/src/public/avm/{fixtures → testing}/account_proof.json +0 -0
  363. /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,10 +55,11 @@ export class PublicContractsDB implements PublicContractsDBInterface {
55
55
  this.log = createLogger('simulator:contracts-data-source', bindings);
56
56
  }
57
57
 
58
- public async addContracts(contractDeploymentData: ContractDeploymentData): Promise<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
- await this.addContractClassesFromEvents(
62
+ this.addContractClassesFromEvents(
62
63
  ContractClassPublishedEvent.extractContractClassEvents(contractDeploymentData.getContractClassLogs()),
63
64
  currentState,
64
65
  );
@@ -69,10 +70,18 @@ export class PublicContractsDB implements PublicContractsDBInterface {
69
70
  );
70
71
  }
71
72
 
72
- public async addNewContracts(tx: Tx): Promise<void> {
73
+ public addNewContracts(tx: Tx): void {
73
74
  const contractDeploymentData = AllContractDeploymentData.fromTx(tx);
74
- await this.addContracts(contractDeploymentData.getNonRevertibleContractDeploymentData());
75
- await 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
  /**
@@ -81,7 +90,7 @@ export class PublicContractsDB implements PublicContractsDBInterface {
81
90
  */
82
91
  public createCheckpoint(): void {
83
92
  const currentState = this.getCurrentState();
84
- const newState = currentState.deepCopy();
93
+ const newState = currentState.fork();
85
94
  this.contractStateStack.push(newState);
86
95
  }
87
96
 
@@ -174,17 +183,15 @@ export class PublicContractsDB implements PublicContractsDBInterface {
174
183
  return await this.dataSource.getDebugFunctionName(address, selector);
175
184
  }
176
185
 
177
- private async addContractClassesFromEvents(
186
+ private addContractClassesFromEvents(
178
187
  contractClassEvents: ContractClassPublishedEvent[],
179
188
  state: ContractsDbCheckpoint,
180
189
  ) {
181
- await Promise.all(
182
- contractClassEvents.map(async (event: ContractClassPublishedEvent) => {
183
- this.log.debug(`Adding class ${event.contractClassId.toString()} to contract state`);
184
- const contractClass = await event.toContractClassPublic();
185
- state.addClass(event.contractClassId, contractClass);
186
- }),
187
- );
190
+ for (const event of contractClassEvents) {
191
+ this.log.debug(`Adding class ${event.contractClassId.toString()} to contract state`);
192
+ const contractClass = event.toContractClassPublic();
193
+ state.addClass(event.contractClassId, contractClass);
194
+ }
188
195
  }
189
196
 
190
197
  private addContractInstancesFromEvents(
@@ -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
  /**
@@ -548,7 +591,7 @@ export class PublicProcessor implements Traceable {
548
591
  // Fee payment insertion has already been done. Do the rest.
549
592
  await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
550
593
 
551
- await this.contractsDB.addNewContracts(tx);
594
+ this.contractsDB.addNewContracts(tx);
552
595
 
553
596
  return [processedTx, undefined, []];
554
597
  }
@@ -30,6 +30,9 @@ export class PublicProcessorMetrics {
30
30
 
31
31
  private treeInsertionDuration: Histogram;
32
32
 
33
+ private silentlySkippedCount: UpDownCounter;
34
+ private silentlySkippedDuration: Histogram;
35
+
33
36
  constructor(client: TelemetryClient, name = 'PublicProcessor') {
34
37
  this.tracer = client.getTracer(name);
35
38
  const meter = client.getMeter(name);
@@ -60,6 +63,10 @@ export class PublicProcessorMetrics {
60
63
  this.gasRate = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE);
61
64
 
62
65
  this.treeInsertionDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION);
66
+
67
+ this.silentlySkippedCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT);
68
+
69
+ this.silentlySkippedDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION);
63
70
  }
64
71
 
65
72
  recordPhaseDuration(phaseName: TxExecutionPhase, durationMs: number) {
@@ -123,4 +130,9 @@ export class PublicProcessorMetrics {
123
130
  recordTreeInsertions(durationUs: number) {
124
131
  this.treeInsertionDuration.record(Math.ceil(durationUs));
125
132
  }
133
+
134
+ recordSilentlySkipped(durationMs: number) {
135
+ this.silentlySkippedCount.add(1);
136
+ this.silentlySkippedDuration.record(Math.ceil(durationMs));
137
+ }
126
138
  }