@aztec/simulator 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0

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