@aztec/simulator 0.0.1-commit.2eb6648a → 0.0.1-commit.2f68f620

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