@aztec/simulator 0.0.1-commit.d3ec352c → 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 (391) hide show
  1. package/README.md +6 -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/common/errors.d.ts +8 -2
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/private/acvm/acvm.d.ts +4 -2
  8. package/dest/private/acvm/acvm.d.ts.map +1 -1
  9. package/dest/private/acvm/acvm.js +4 -3
  10. package/dest/private/acvm/deserialize.d.ts +2 -2
  11. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  12. package/dest/private/acvm/deserialize.js +1 -1
  13. package/dest/private/acvm/serialize.d.ts +2 -2
  14. package/dest/private/acvm/serialize.d.ts.map +1 -1
  15. package/dest/private/acvm/serialize.js +1 -1
  16. package/dest/private/acvm_native.d.ts +5 -3
  17. package/dest/private/acvm_native.d.ts.map +1 -1
  18. package/dest/private/acvm_native.js +8 -6
  19. package/dest/private/acvm_wasm.d.ts +4 -3
  20. package/dest/private/acvm_wasm.d.ts.map +1 -1
  21. package/dest/private/acvm_wasm.js +7 -5
  22. package/dest/private/circuit_recording/circuit_recorder.d.ts +39 -25
  23. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  24. package/dest/private/circuit_recording/circuit_recorder.js +71 -72
  25. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +9 -20
  26. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  27. package/dest/private/circuit_recording/file_circuit_recorder.js +39 -43
  28. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
  29. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
  30. package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
  31. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
  32. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  33. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
  34. package/dest/private/factory.d.ts +3 -3
  35. package/dest/private/factory.d.ts.map +1 -1
  36. package/dest/private/factory.js +7 -4
  37. package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
  38. package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
  39. package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
  40. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +3 -2
  41. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
  42. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +19 -4
  43. package/dest/public/avm/testing/utils.d.ts +32 -0
  44. package/dest/public/avm/testing/utils.d.ts.map +1 -0
  45. package/dest/public/avm/{fixtures → testing}/utils.js +5 -35
  46. package/dest/public/avm_simulator.d.ts +28 -0
  47. package/dest/public/avm_simulator.d.ts.map +1 -0
  48. package/dest/public/avm_simulator.js +4 -0
  49. package/dest/public/avm_simulator_pool.d.ts +45 -0
  50. package/dest/public/avm_simulator_pool.d.ts.map +1 -0
  51. package/dest/public/avm_simulator_pool.js +197 -0
  52. package/dest/public/cdb/generated/api_types.d.ts +171 -0
  53. package/dest/public/cdb/generated/api_types.d.ts.map +1 -0
  54. package/dest/public/cdb/generated/api_types.js +314 -0
  55. package/dest/public/cdb/generated/server.d.ts +26 -0
  56. package/dest/public/cdb/generated/server.d.ts.map +1 -0
  57. package/dest/public/cdb/generated/server.js +135 -0
  58. package/dest/public/cdb_ipc_server.d.ts +33 -0
  59. package/dest/public/cdb_ipc_server.d.ts.map +1 -0
  60. package/dest/public/cdb_ipc_server.js +153 -0
  61. package/dest/public/contracts_db_checkpoint.d.ts +3 -3
  62. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
  63. package/dest/public/contracts_db_checkpoint.js +1 -1
  64. package/dest/public/db_interfaces.d.ts +2 -2
  65. package/dest/public/db_interfaces.d.ts.map +1 -1
  66. package/dest/public/executor_metrics.d.ts +1 -1
  67. package/dest/public/executor_metrics.d.ts.map +1 -1
  68. package/dest/public/executor_metrics.js +12 -33
  69. package/dest/public/fixtures/amm_test.js +6 -6
  70. package/dest/public/fixtures/bulk_test.d.ts +3 -3
  71. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  72. package/dest/public/fixtures/bulk_test.js +38 -75
  73. package/dest/public/fixtures/custom_bytecode_tester.d.ts +28 -6
  74. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  75. package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
  76. package/dest/public/fixtures/index.d.ts +3 -3
  77. package/dest/public/fixtures/index.d.ts.map +1 -1
  78. package/dest/public/fixtures/index.js +2 -2
  79. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  80. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  81. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  82. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +24 -6
  83. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  84. package/dest/public/fixtures/public_tx_simulation_tester.js +66 -21
  85. package/dest/public/fixtures/simple_contract_data_source.d.ts +2 -2
  86. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
  87. package/dest/public/fixtures/simple_contract_data_source.js +1 -1
  88. package/dest/public/fixtures/token_test.js +4 -4
  89. package/dest/public/fixtures/utils.d.ts +3 -3
  90. package/dest/public/fixtures/utils.d.ts.map +1 -1
  91. package/dest/public/fixtures/utils.js +25 -23
  92. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +67 -0
  93. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  94. package/dest/public/fuzzing/avm_fuzzer_simulator.js +185 -0
  95. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  96. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  97. package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
  98. package/dest/public/index.d.ts +5 -2
  99. package/dest/public/index.d.ts.map +1 -1
  100. package/dest/public/index.js +2 -1
  101. package/dest/public/public_db_sources.d.ts +10 -6
  102. package/dest/public/public_db_sources.d.ts.map +1 -1
  103. package/dest/public/public_db_sources.js +21 -15
  104. package/dest/public/public_processor/guarded_merkle_tree.d.ts +8 -6
  105. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  106. package/dest/public/public_processor/guarded_merkle_tree.js +12 -4
  107. package/dest/public/public_processor/public_processor.d.ts +17 -8
  108. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  109. package/dest/public/public_processor/public_processor.js +535 -100
  110. package/dest/public/public_processor/public_processor_metrics.d.ts +5 -2
  111. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  112. package/dest/public/public_processor/public_processor_metrics.js +36 -45
  113. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  114. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  115. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.js +39 -0
  116. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  117. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  118. package/dest/public/public_tx_simulator/factories.js +28 -0
  119. package/dest/public/public_tx_simulator/index.d.ts +5 -5
  120. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  121. package/dest/public/public_tx_simulator/index.js +3 -3
  122. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +43 -70
  123. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  124. package/dest/public/public_tx_simulator/public_tx_simulator.js +99 -312
  125. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  126. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  127. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  128. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +24 -1
  129. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
  130. package/dest/public/test_executor_metrics.d.ts +3 -2
  131. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  132. package/dest/public/test_executor_metrics.js +2 -2
  133. package/package.json +23 -20
  134. package/src/client.ts +0 -2
  135. package/src/common/errors.ts +1 -1
  136. package/src/private/acvm/acvm.ts +4 -3
  137. package/src/private/acvm/deserialize.ts +1 -1
  138. package/src/private/acvm/serialize.ts +1 -1
  139. package/src/private/acvm_native.ts +11 -5
  140. package/src/private/acvm_wasm.ts +11 -4
  141. package/src/private/circuit_recording/circuit_recorder.ts +90 -81
  142. package/src/private/circuit_recording/file_circuit_recorder.ts +45 -50
  143. package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
  144. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
  145. package/src/private/factory.ts +7 -4
  146. package/src/public/avm/testing/account_proof.json +553 -0
  147. package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
  148. package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +24 -4
  149. package/src/public/avm/{fixtures → testing}/utils.ts +5 -41
  150. package/src/public/avm_simulator.ts +29 -0
  151. package/src/public/avm_simulator_pool.ts +226 -0
  152. package/src/public/cdb/generated/api_types.ts +457 -0
  153. package/src/public/cdb/generated/server.ts +109 -0
  154. package/src/public/cdb_ipc_server.ts +197 -0
  155. package/src/public/contracts_db_checkpoint.ts +2 -2
  156. package/src/public/db_interfaces.ts +1 -1
  157. package/src/public/executor_metrics.ts +9 -33
  158. package/src/public/fixtures/amm_test.ts +6 -6
  159. package/src/public/fixtures/bulk_test.ts +40 -15
  160. package/src/public/fixtures/custom_bytecode_tester.ts +53 -19
  161. package/src/public/fixtures/index.ts +6 -2
  162. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  163. package/src/public/fixtures/public_tx_simulation_tester.ts +82 -21
  164. package/src/public/fixtures/simple_contract_data_source.ts +2 -2
  165. package/src/public/fixtures/token_test.ts +4 -4
  166. package/src/public/fixtures/utils.ts +25 -27
  167. package/src/public/fuzzing/avm_fuzzer_simulator.ts +303 -0
  168. package/src/public/fuzzing/avm_simulator_bin.ts +173 -0
  169. package/src/public/index.ts +8 -2
  170. package/src/public/public_db_sources.ts +37 -20
  171. package/src/public/public_processor/guarded_merkle_tree.ts +14 -7
  172. package/src/public/public_processor/public_processor.ts +188 -102
  173. package/src/public/public_processor/public_processor_metrics.ts +28 -44
  174. package/src/public/public_tx_simulator/dumping_public_tx_simulator.ts +67 -0
  175. package/src/public/public_tx_simulator/factories.ts +61 -0
  176. package/src/public/public_tx_simulator/index.ts +7 -4
  177. package/src/public/public_tx_simulator/public_tx_simulator.ts +143 -458
  178. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  179. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +23 -0
  180. package/src/public/test_executor_metrics.ts +3 -3
  181. package/dest/public/avm/avm_context.d.ts +0 -41
  182. package/dest/public/avm/avm_context.d.ts.map +0 -1
  183. package/dest/public/avm/avm_context.js +0 -44
  184. package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
  185. package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
  186. package/dest/public/avm/avm_contract_call_result.js +0 -54
  187. package/dest/public/avm/avm_execution_environment.d.ts +0 -23
  188. package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
  189. package/dest/public/avm/avm_execution_environment.js +0 -33
  190. package/dest/public/avm/avm_gas.d.ts +0 -44
  191. package/dest/public/avm/avm_gas.d.ts.map +0 -1
  192. package/dest/public/avm/avm_gas.js +0 -195
  193. package/dest/public/avm/avm_machine_state.d.ts +0 -97
  194. package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
  195. package/dest/public/avm/avm_machine_state.js +0 -109
  196. package/dest/public/avm/avm_memory_types.d.ts +0 -275
  197. package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
  198. package/dest/public/avm/avm_memory_types.js +0 -351
  199. package/dest/public/avm/avm_simulator.d.ts +0 -40
  200. package/dest/public/avm/avm_simulator.d.ts.map +0 -1
  201. package/dest/public/avm/avm_simulator.js +0 -191
  202. package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
  203. package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
  204. package/dest/public/avm/avm_simulator_interface.js +0 -3
  205. package/dest/public/avm/errors.d.ts +0 -104
  206. package/dest/public/avm/errors.d.ts.map +0 -1
  207. package/dest/public/avm/errors.js +0 -141
  208. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
  209. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  210. package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -83
  211. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  212. package/dest/public/avm/fixtures/initializers.d.ts +0 -42
  213. package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
  214. package/dest/public/avm/fixtures/initializers.js +0 -44
  215. package/dest/public/avm/fixtures/utils.d.ts +0 -39
  216. package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
  217. package/dest/public/avm/index.d.ts +0 -2
  218. package/dest/public/avm/index.d.ts.map +0 -1
  219. package/dest/public/avm/index.js +0 -1
  220. package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -75
  221. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
  222. package/dest/public/avm/opcodes/accrued_substate.js +0 -255
  223. package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
  224. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
  225. package/dest/public/avm/opcodes/addressing_mode.js +0 -94
  226. package/dest/public/avm/opcodes/arithmetic.d.ts +0 -47
  227. package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
  228. package/dest/public/avm/opcodes/arithmetic.js +0 -87
  229. package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
  230. package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
  231. package/dest/public/avm/opcodes/bitwise.js +0 -99
  232. package/dest/public/avm/opcodes/comparators.d.ts +0 -25
  233. package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
  234. package/dest/public/avm/opcodes/comparators.js +0 -43
  235. package/dest/public/avm/opcodes/contract.d.ts +0 -20
  236. package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
  237. package/dest/public/avm/opcodes/contract.js +0 -65
  238. package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
  239. package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
  240. package/dest/public/avm/opcodes/control_flow.js +0 -107
  241. package/dest/public/avm/opcodes/conversion.d.ts +0 -18
  242. package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
  243. package/dest/public/avm/opcodes/conversion.js +0 -333
  244. package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
  245. package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
  246. package/dest/public/avm/opcodes/ec_add.js +0 -84
  247. package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
  248. package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
  249. package/dest/public/avm/opcodes/environment_getters.js +0 -77
  250. package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
  251. package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
  252. package/dest/public/avm/opcodes/external_calls.js +0 -209
  253. package/dest/public/avm/opcodes/hashing.d.ts +0 -36
  254. package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
  255. package/dest/public/avm/opcodes/hashing.js +0 -114
  256. package/dest/public/avm/opcodes/index.d.ts +0 -16
  257. package/dest/public/avm/opcodes/index.d.ts.map +0 -1
  258. package/dest/public/avm/opcodes/index.js +0 -15
  259. package/dest/public/avm/opcodes/instruction.d.ts +0 -74
  260. package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
  261. package/dest/public/avm/opcodes/instruction.js +0 -95
  262. package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
  263. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
  264. package/dest/public/avm/opcodes/instruction_impl.js +0 -30
  265. package/dest/public/avm/opcodes/memory.d.ts +0 -74
  266. package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
  267. package/dest/public/avm/opcodes/memory.js +0 -257
  268. package/dest/public/avm/opcodes/misc.d.ts +0 -18
  269. package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
  270. package/dest/public/avm/opcodes/misc.js +0 -73
  271. package/dest/public/avm/opcodes/storage.d.ts +0 -24
  272. package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
  273. package/dest/public/avm/opcodes/storage.js +0 -68
  274. package/dest/public/avm/revert_reason.d.ts +0 -18
  275. package/dest/public/avm/revert_reason.d.ts.map +0 -1
  276. package/dest/public/avm/revert_reason.js +0 -39
  277. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
  278. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
  279. package/dest/public/avm/serialization/buffer_cursor.js +0 -99
  280. package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
  281. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  282. package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
  283. package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
  284. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
  285. package/dest/public/avm/serialization/instruction_serialization.js +0 -261
  286. package/dest/public/avm/test_utils.d.ts +0 -15
  287. package/dest/public/avm/test_utils.d.ts.map +0 -1
  288. package/dest/public/avm/test_utils.js +0 -44
  289. package/dest/public/debug_fn_name.d.ts +0 -18
  290. package/dest/public/debug_fn_name.d.ts.map +0 -1
  291. package/dest/public/debug_fn_name.js +0 -28
  292. package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -9
  293. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
  294. package/dest/public/fixtures/custom_bytecode_tests.js +0 -109
  295. package/dest/public/fixtures/minimal_public_tx.d.ts +0 -9
  296. package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
  297. package/dest/public/fixtures/minimal_public_tx.js +0 -29
  298. package/dest/public/hinting_db_sources.d.ts +0 -79
  299. package/dest/public/hinting_db_sources.d.ts.map +0 -1
  300. package/dest/public/hinting_db_sources.js +0 -350
  301. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -30
  302. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
  303. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -133
  304. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -38
  305. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
  306. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -93
  307. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
  308. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
  309. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
  310. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
  311. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
  312. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -170
  313. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
  314. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
  315. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
  316. package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -130
  317. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
  318. package/dest/public/public_tx_simulator/public_tx_context.js +0 -300
  319. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
  320. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
  321. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -39
  322. package/dest/public/side_effect_trace.d.ts +0 -86
  323. package/dest/public/side_effect_trace.d.ts.map +0 -1
  324. package/dest/public/side_effect_trace.js +0 -199
  325. package/dest/public/side_effect_trace_interface.d.ts +0 -22
  326. package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
  327. package/dest/public/side_effect_trace_interface.js +0 -1
  328. package/dest/public/state_manager/index.d.ts +0 -2
  329. package/dest/public/state_manager/index.d.ts.map +0 -1
  330. package/dest/public/state_manager/index.js +0 -1
  331. package/dest/public/state_manager/nullifiers.d.ts +0 -61
  332. package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
  333. package/dest/public/state_manager/nullifiers.js +0 -92
  334. package/dest/public/state_manager/public_storage.d.ts +0 -66
  335. package/dest/public/state_manager/public_storage.d.ts.map +0 -1
  336. package/dest/public/state_manager/public_storage.js +0 -145
  337. package/dest/public/state_manager/state_manager.d.ts +0 -164
  338. package/dest/public/state_manager/state_manager.d.ts.map +0 -1
  339. package/dest/public/state_manager/state_manager.js +0 -395
  340. package/src/public/avm/avm_context.ts +0 -61
  341. package/src/public/avm/avm_contract_call_result.ts +0 -67
  342. package/src/public/avm/avm_execution_environment.ts +0 -46
  343. package/src/public/avm/avm_gas.ts +0 -183
  344. package/src/public/avm/avm_machine_state.ts +0 -169
  345. package/src/public/avm/avm_memory_types.ts +0 -436
  346. package/src/public/avm/avm_simulator.ts +0 -276
  347. package/src/public/avm/avm_simulator_interface.ts +0 -8
  348. package/src/public/avm/errors.ts +0 -177
  349. package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -116
  350. package/src/public/avm/fixtures/initializers.ts +0 -102
  351. package/src/public/avm/index.ts +0 -1
  352. package/src/public/avm/opcodes/accrued_substate.ts +0 -288
  353. package/src/public/avm/opcodes/addressing_mode.ts +0 -111
  354. package/src/public/avm/opcodes/arithmetic.ts +0 -117
  355. package/src/public/avm/opcodes/bitwise.ts +0 -113
  356. package/src/public/avm/opcodes/comparators.ts +0 -55
  357. package/src/public/avm/opcodes/contract.ts +0 -75
  358. package/src/public/avm/opcodes/control_flow.ts +0 -123
  359. package/src/public/avm/opcodes/conversion.ts +0 -104
  360. package/src/public/avm/opcodes/ec_add.ts +0 -96
  361. package/src/public/avm/opcodes/environment_getters.ts +0 -87
  362. package/src/public/avm/opcodes/external_calls.ts +0 -260
  363. package/src/public/avm/opcodes/hashing.ts +0 -145
  364. package/src/public/avm/opcodes/index.ts +0 -15
  365. package/src/public/avm/opcodes/instruction.ts +0 -136
  366. package/src/public/avm/opcodes/instruction_impl.ts +0 -36
  367. package/src/public/avm/opcodes/memory.ts +0 -293
  368. package/src/public/avm/opcodes/misc.ts +0 -102
  369. package/src/public/avm/opcodes/storage.ts +0 -87
  370. package/src/public/avm/revert_reason.ts +0 -58
  371. package/src/public/avm/serialization/buffer_cursor.ts +0 -118
  372. package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
  373. package/src/public/avm/serialization/instruction_serialization.ts +0 -249
  374. package/src/public/avm/test_utils.ts +0 -64
  375. package/src/public/debug_fn_name.ts +0 -43
  376. package/src/public/fixtures/custom_bytecode_tests.ts +0 -135
  377. package/src/public/fixtures/minimal_public_tx.ts +0 -35
  378. package/src/public/hinting_db_sources.ts +0 -603
  379. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -162
  380. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -155
  381. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -132
  382. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -240
  383. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
  384. package/src/public/public_tx_simulator/public_tx_context.ts +0 -477
  385. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
  386. package/src/public/side_effect_trace.ts +0 -290
  387. package/src/public/side_effect_trace_interface.ts +0 -28
  388. package/src/public/state_manager/index.ts +0 -1
  389. package/src/public/state_manager/nullifiers.ts +0 -103
  390. package/src/public/state_manager/public_storage.ts +0 -174
  391. package/src/public/state_manager/state_manager.ts +0 -560
@@ -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
- import { Fr } from '@aztec/foundation/fields';
4
- import { createLogger } from '@aztec/foundation/log';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
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'),
129
- private opts: Pick<SequencerConfig, 'fakeProcessingDelayPerTxMs'> = {},
153
+ private log: Logger,
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[]]> {
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,36 +186,43 @@ 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
- for await (const origTx of txs) {
192
+ for await (const tx of txs) {
164
193
  // Only process up to the max tx limit
165
194
  if (maxTransactions !== undefined && result.length >= maxTransactions) {
166
195
  this.log.debug(`Stopping tx processing due to reaching the max tx limit.`);
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
- const txHash = origTx.getTxHash().toString();
178
- const preTxSizeInBytes = origTx.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
- });
209
+ const txHash = tx.getTxHash().toString();
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
190
- const txGasLimit = origTx.data.constants.txContext.gasSettings.gasLimits;
191
- if (maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
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.
224
+ const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
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,
@@ -198,9 +232,6 @@ export class PublicProcessor implements Traceable {
198
232
  continue;
199
233
  }
200
234
 
201
- // The processor modifies the tx objects in place, so we need to clone them.
202
- const tx = Tx.clone(origTx);
203
-
204
235
  // We validate the tx before processing it, to avoid unnecessary work.
205
236
  if (preprocessValidator) {
206
237
  const result = await preprocessValidator.validateTx(tx);
@@ -211,11 +242,6 @@ export class PublicProcessor implements Traceable {
211
242
  failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
212
243
  returns.push(new NestedProcessReturnValues([]));
213
244
  continue;
214
- } else if (result.result === 'skipped') {
215
- const reason = result.reason.join(', ');
216
- this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
217
- returns.push(new NestedProcessReturnValues([]));
218
- continue;
219
245
  } else {
220
246
  this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
221
247
  }
@@ -231,26 +257,21 @@ export class PublicProcessor implements Traceable {
231
257
  this.contractsDB.createCheckpoint();
232
258
 
233
259
  try {
234
- const [processedTx, returnValues] = await this.processTx(tx, deadline);
260
+ const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(() =>
261
+ this.processTx(tx, deadline, signal),
262
+ );
263
+
264
+ // Inject a fake processing failure after N txs if requested
265
+ const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
266
+ if (fakeThrowAfter !== undefined && result.length + failed.length + 1 >= fakeThrowAfter) {
267
+ throw new Error(`Fake error after processing ${fakeThrowAfter} txs`);
268
+ }
235
269
 
236
270
  const txBlobFields = processedTx.txEffect.getNumBlobFields();
237
-
238
- // If the actual size of this tx would exceed block size, skip it
239
271
  const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
240
- if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
241
- this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
242
- txHash,
243
- sizeInBytes: txSize,
244
- totalSizeInBytes,
245
- maxBlockSize,
246
- });
247
- // Need to revert the checkpoint here and don't go any further
248
- await checkpoint.revert();
249
- this.contractsDB.revertCheckpoint();
250
- continue;
251
- }
252
272
 
253
- // 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.
274
+ // Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
254
275
  if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
255
276
  this.log.debug(
256
277
  `Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`,
@@ -259,44 +280,77 @@ export class PublicProcessor implements Traceable {
259
280
  txBlobFields,
260
281
  totalBlobFields,
261
282
  maxBlobFields,
283
+ txProcessingTimeMs,
262
284
  },
263
285
  );
286
+ silentlySkippedCount += 1;
287
+ totalSilentlySkippedDurationMs += txProcessingTimeMs;
288
+ this.metrics.recordSilentlySkipped(txProcessingTimeMs);
264
289
  // Need to revert the checkpoint here and don't go any further
265
290
  await checkpoint.revert();
266
291
  this.contractsDB.revertCheckpoint();
267
292
  continue;
268
293
  }
269
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
+
270
314
  // FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
271
315
  // I'd rather pass the validators the processedTx as well and let them deal with it.
272
316
  nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
273
317
  result.push(processedTx);
274
318
  usedTxs.push(tx);
275
319
  returns = returns.concat(returnValues);
320
+ debugLogs.push(...txDebugLogs);
321
+
322
+ this.debugLogStore.storeLogs(processedTx.hash.toString(), txDebugLogs);
276
323
 
277
324
  totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
278
325
  totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
279
326
  totalSizeInBytes += txSize;
280
327
  totalBlobFields += txBlobFields;
328
+
329
+ // Commit the tx-level contracts checkpoint on success
330
+ this.contractsDB.commitCheckpoint();
281
331
  } catch (err: any) {
282
- if (err?.name === 'PublicProcessorTimeoutError') {
283
- this.log.warn(`Stopping tx processing due to timeout.`);
284
- // We hit the transaction execution deadline.
285
- // There may still be a transaction executing. We stop the guarded fork to prevent any further access to the world state.
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.
341
+ await this.publicTxSimulator.cancel?.();
342
+
343
+ // Now stop the guarded fork to prevent any further TS-side access to the world state.
286
344
  await this.guardedMerkleTree.stop();
287
345
 
288
346
  // We now know there can't be any further access to world state. The fork is in a state where there is:
289
347
  // 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
290
348
  // 2. Possible state updates on that checkpoint or any others created during execution.
291
349
 
292
- // First we revert a checkpoint as managed by the ForkCheckpoint. This will revert whatever is the current checkpoint
293
- // which may not be the one originally created by this object. But that is ok, we do this to fulfil the ForkCheckpoint
294
- // lifecycle expectations and ensure it doesn't attempt to commit later on.
295
- await checkpoint.revert();
296
-
297
- // Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
298
- // This needs to be done directly on the underlying fork as the guarded fork has been stopped.
299
- 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();
300
354
 
301
355
  // Revert any contracts added to the DB for the tx.
302
356
  this.contractsDB.revertCheckpoint();
@@ -308,9 +362,9 @@ export class PublicProcessor implements Traceable {
308
362
  break;
309
363
  }
310
364
 
311
- // Roll back state to start of TX before proceeding to next TX
312
- await checkpoint.revert();
313
- 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();
314
368
  this.contractsDB.revertCheckpoint();
315
369
  const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
316
370
  this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
@@ -322,7 +376,6 @@ export class PublicProcessor implements Traceable {
322
376
  } finally {
323
377
  // Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
324
378
  await checkpoint.commit();
325
- this.contractsDB.commitCheckpointOkIfNone();
326
379
  }
327
380
  }
328
381
 
@@ -330,15 +383,26 @@ export class PublicProcessor implements Traceable {
330
383
  const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
331
384
  this.metrics.recordAllTxs(totalPublicGas, rate);
332
385
 
333
- this.log.info(`Processed ${result.length} successful txs and ${failed.length} failed txs in ${duration}s`, {
334
- duration,
335
- rate,
336
- totalPublicGas,
337
- totalBlockGas,
338
- totalSizeInBytes,
339
- });
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
+ );
340
404
 
341
- return [result, failed, usedTxs, returns];
405
+ return [result, failed, usedTxs, returns, debugLogs];
342
406
  }
343
407
 
344
408
  private async checkWorldStateUnchanged(
@@ -358,8 +422,14 @@ export class PublicProcessor implements Traceable {
358
422
  }
359
423
 
360
424
  @trackSpan('PublicProcessor.processTx', tx => ({ [Attributes.TX_HASH]: tx.getTxHash().toString() }))
361
- private async processTx(tx: Tx, deadline: Date | undefined): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
362
- 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
+ );
363
433
 
364
434
  this.log.verbose(
365
435
  !tx.hasPublicCalls()
@@ -382,7 +452,7 @@ export class PublicProcessor implements Traceable {
382
452
  },
383
453
  );
384
454
 
385
- return [processedTx, returnValues ?? []];
455
+ return [processedTx, returnValues ?? [], debugLogs];
386
456
  }
387
457
 
388
458
  private async doTreeInsertionsForPrivateOnlyTx(processedTx: ProcessedTx): Promise<void> {
@@ -412,14 +482,14 @@ export class PublicProcessor implements Traceable {
412
482
  this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
413
483
  }
414
484
 
415
- /** 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. */
416
486
  private async processTxWithinDeadline(
417
487
  tx: Tx,
418
488
  deadline: Date | undefined,
419
- ): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> {
420
- const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> = tx.hasPublicCalls()
421
- ? () => this.processTxWithPublicCalls(tx)
422
- : () => 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);
423
493
 
424
494
  // Fake a delay per tx if instructed (used for tests)
425
495
  const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
@@ -433,27 +503,38 @@ export class PublicProcessor implements Traceable {
433
503
  }
434
504
  : innerProcessFn;
435
505
 
436
- if (!deadline) {
506
+ const processingSignal = this.getProcessingSignal(tx, deadline, signal);
507
+ if (!processingSignal) {
437
508
  return await processFn();
438
509
  }
439
510
 
440
- 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
+
441
524
  const timeout = +deadline - this.dateProvider.now();
442
525
  if (timeout <= 0) {
443
526
  throw new PublicProcessorTimeoutError();
444
527
  }
445
528
 
529
+ const txHash = tx.getTxHash();
446
530
  this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
447
531
  deadline: deadline.toISOString(),
448
532
  now: new Date(this.dateProvider.now()).toISOString(),
449
533
  txHash,
450
534
  });
451
535
 
452
- return await executeTimeout(
453
- () => processFn(),
454
- timeout,
455
- () => new PublicProcessorTimeoutError(),
456
- );
536
+ const timeoutSignal = AbortSignal.timeout(timeout);
537
+ return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
457
538
  }
458
539
 
459
540
  /**
@@ -487,7 +568,7 @@ export class PublicProcessor implements Traceable {
487
568
  @trackSpan('PublicProcessor.processPrivateOnlyTx', (tx: Tx) => ({
488
569
  [Attributes.TX_HASH]: tx.getTxHash().toString(),
489
570
  }))
490
- private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined]> {
571
+ private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined, DebugLog[]]> {
491
572
  const gasFees = this.globalVariables.gasFees;
492
573
  const transactionFee = computeTransactionFee(gasFees, tx.data.constants.txContext.gasSettings, tx.data.gasUsed);
493
574
 
@@ -510,20 +591,20 @@ export class PublicProcessor implements Traceable {
510
591
  // Fee payment insertion has already been done. Do the rest.
511
592
  await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
512
593
 
513
- await this.contractsDB.addNewContracts(tx);
594
+ this.contractsDB.addNewContracts(tx);
514
595
 
515
- return [processedTx, undefined];
596
+ return [processedTx, undefined, []];
516
597
  }
517
598
 
518
599
  @trackSpan('PublicProcessor.processTxWithPublicCalls', tx => ({
519
600
  [Attributes.TX_HASH]: tx.getTxHash().toString(),
520
601
  }))
521
- private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
602
+ private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
522
603
  const timer = new Timer();
523
604
 
524
605
  const result = await this.publicTxSimulator.simulate(tx);
525
606
  // TODO: use the callStackMetadata here to extract more data about public execution
526
- const { hints, publicInputs, gasUsed, revertCode /*callStackMetadata*/ } = result;
607
+ const { hints, publicInputs, publicTxEffect, gasUsed, revertCode /*callStackMetadata*/ } = result;
527
608
 
528
609
  const contractClassLogs = revertCode.isOK()
529
610
  ? tx.getContractClassLogs()
@@ -542,16 +623,21 @@ export class PublicProcessor implements Traceable {
542
623
  const appLogicReturnValues: NestedProcessReturnValues[] = result.getAppLogicReturnValues();
543
624
  // Extract the revert reason from the call stack metadata.
544
625
  const revertReason = result.findRevertReason();
626
+ // Create proving request if we have hints and public inputs.
627
+ const avmProvingRequest =
628
+ hints && publicInputs ? PublicProcessor.generateProvingRequest(publicInputs, hints) : undefined;
545
629
 
546
630
  const processedTx = makeProcessedTxFromTxWithPublicCalls(
547
631
  tx,
548
- PublicProcessor.generateProvingRequest(publicInputs, hints),
632
+ this.globalVariables,
633
+ avmProvingRequest,
634
+ publicTxEffect,
549
635
  gasUsed,
550
636
  revertCode,
551
637
  revertReason,
552
638
  );
553
639
 
554
- return [processedTx, appLogicReturnValues];
640
+ return [processedTx, appLogicReturnValues, result.logs ?? []];
555
641
  }
556
642
 
557
643
  /**