@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.5476d83

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 (492) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +6 -4
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +5 -14
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +1 -2
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/common/stats/index.d.ts +1 -1
  12. package/dest/common/stats/stats.d.ts +1 -1
  13. package/dest/private/acvm/acvm.d.ts +12 -6
  14. package/dest/private/acvm/acvm.d.ts.map +1 -1
  15. package/dest/private/acvm/acvm.js +10 -16
  16. package/dest/private/acvm/acvm_types.d.ts +2 -2
  17. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.d.ts +18 -19
  19. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  20. package/dest/private/acvm/deserialize.js +31 -23
  21. package/dest/private/acvm/index.d.ts +1 -2
  22. package/dest/private/acvm/index.d.ts.map +1 -1
  23. package/dest/private/acvm/index.js +0 -1
  24. package/dest/private/acvm/serialize.d.ts +20 -3
  25. package/dest/private/acvm/serialize.d.ts.map +1 -1
  26. package/dest/private/acvm/serialize.js +53 -0
  27. package/dest/private/acvm_native.d.ts +39 -0
  28. package/dest/private/acvm_native.d.ts.map +1 -0
  29. package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
  30. package/dest/private/acvm_wasm.d.ts +15 -0
  31. package/dest/private/acvm_wasm.d.ts.map +1 -0
  32. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  33. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  34. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  35. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  36. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  37. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  38. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  40. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  41. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  43. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  44. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  46. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  47. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  48. package/dest/private/circuit_simulator.d.ts +35 -0
  49. package/dest/private/circuit_simulator.d.ts.map +1 -0
  50. package/dest/private/circuit_simulator.js +43 -0
  51. package/dest/private/factory.d.ts +12 -0
  52. package/dest/private/factory.d.ts.map +1 -0
  53. package/dest/private/{providers/factory.js → factory.js} +2 -2
  54. package/dest/public/avm/avm_context.d.ts +6 -6
  55. package/dest/public/avm/avm_context.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.d.ts +5 -3
  57. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  58. package/dest/public/avm/avm_contract_call_result.js +11 -7
  59. package/dest/public/avm/avm_execution_environment.d.ts +4 -2
  60. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  61. package/dest/public/avm/avm_execution_environment.js +4 -2
  62. package/dest/public/avm/avm_gas.d.ts +5 -21
  63. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  64. package/dest/public/avm/avm_gas.js +27 -35
  65. package/dest/public/avm/avm_machine_state.d.ts +3 -1
  66. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  67. package/dest/public/avm/avm_machine_state.js +2 -0
  68. package/dest/public/avm/avm_memory_types.d.ts +99 -88
  69. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  70. package/dest/public/avm/avm_memory_types.js +17 -6
  71. package/dest/public/avm/avm_simulator.d.ts +6 -6
  72. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  73. package/dest/public/avm/avm_simulator.js +23 -35
  74. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  75. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  76. package/dest/public/avm/avm_simulator_interface.js +3 -0
  77. package/dest/public/avm/errors.d.ts +7 -31
  78. package/dest/public/avm/errors.d.ts.map +1 -1
  79. package/dest/public/avm/errors.js +7 -57
  80. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  81. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  82. package/dest/public/avm/fixtures/avm_simulation_tester.js +22 -15
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +7 -5
  84. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  85. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +37 -14
  86. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  87. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  88. package/dest/public/avm/fixtures/initializers.js +44 -0
  89. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  90. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  91. package/dest/public/avm/fixtures/utils.js +95 -0
  92. package/dest/public/avm/index.d.ts +1 -3
  93. package/dest/public/avm/index.d.ts.map +1 -1
  94. package/dest/public/avm/index.js +0 -2
  95. package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
  96. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/accrued_substate.js +28 -25
  98. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  99. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  101. package/dest/public/avm/opcodes/arithmetic.d.ts +17 -7
  102. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  104. package/dest/public/avm/opcodes/bitwise.d.ts +10 -18
  105. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/bitwise.js +19 -26
  107. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  108. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/comparators.js +3 -3
  110. package/dest/public/avm/opcodes/contract.d.ts +2 -3
  111. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/contract.js +9 -10
  113. package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
  114. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/control_flow.js +10 -8
  116. package/dest/public/avm/opcodes/conversion.d.ts +2 -1
  117. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/conversion.js +267 -3
  119. package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
  120. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/ec_add.js +6 -6
  122. package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
  123. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/environment_getters.js +17 -19
  125. package/dest/public/avm/opcodes/external_calls.d.ts +9 -8
  126. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/external_calls.js +39 -34
  128. package/dest/public/avm/opcodes/hashing.d.ts +2 -2
  129. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/hashing.js +6 -6
  131. package/dest/public/avm/opcodes/index.d.ts +1 -1
  132. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  133. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  134. package/dest/public/avm/opcodes/instruction.js +23 -19
  135. package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
  136. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  137. package/dest/public/avm/opcodes/memory.d.ts +6 -6
  138. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  139. package/dest/public/avm/opcodes/memory.js +37 -33
  140. package/dest/public/avm/opcodes/misc.d.ts +3 -2
  141. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  142. package/dest/public/avm/opcodes/misc.js +41 -16
  143. package/dest/public/avm/opcodes/storage.d.ts +3 -3
  144. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  145. package/dest/public/avm/opcodes/storage.js +7 -5
  146. package/dest/public/avm/revert_reason.d.ts +18 -0
  147. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  148. package/dest/public/avm/revert_reason.js +38 -0
  149. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  150. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  151. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  152. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  153. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  154. package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
  155. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  156. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  157. package/dest/public/avm/test_utils.d.ts +11 -14
  158. package/dest/public/avm/test_utils.d.ts.map +1 -1
  159. package/dest/public/avm/test_utils.js +16 -24
  160. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  161. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  162. package/dest/public/contracts_db_checkpoint.js +30 -0
  163. package/dest/public/db_interfaces.d.ts +68 -0
  164. package/dest/public/db_interfaces.d.ts.map +1 -0
  165. package/dest/public/db_interfaces.js +3 -0
  166. package/dest/public/debug_fn_name.d.ts +5 -0
  167. package/dest/public/debug_fn_name.d.ts.map +1 -0
  168. package/dest/public/debug_fn_name.js +9 -0
  169. package/dest/public/executor_metrics.d.ts +12 -4
  170. package/dest/public/executor_metrics.d.ts.map +1 -1
  171. package/dest/public/executor_metrics.js +37 -6
  172. package/dest/public/executor_metrics_interface.d.ts +10 -0
  173. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  174. package/dest/public/executor_metrics_interface.js +1 -0
  175. package/dest/public/fixtures/amm_test.d.ts +10 -0
  176. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  177. package/dest/public/fixtures/amm_test.js +213 -0
  178. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  179. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  180. package/dest/public/fixtures/bulk_test.js +326 -0
  181. package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
  182. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  183. package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
  184. package/dest/public/fixtures/custom_bytecode_tests.d.ts +9 -0
  185. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  186. package/dest/public/fixtures/custom_bytecode_tests.js +109 -0
  187. package/dest/public/fixtures/index.d.ts +8 -1
  188. package/dest/public/fixtures/index.d.ts.map +1 -1
  189. package/dest/public/fixtures/index.js +7 -0
  190. package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
  191. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  192. package/dest/public/fixtures/minimal_public_tx.js +29 -0
  193. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +35 -14
  194. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  195. package/dest/public/fixtures/public_tx_simulation_tester.js +100 -71
  196. package/dest/public/fixtures/simple_contract_data_source.d.ts +35 -0
  197. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  198. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  199. package/dest/public/fixtures/token_test.d.ts +8 -0
  200. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  201. package/dest/public/fixtures/token_test.js +94 -0
  202. package/dest/public/fixtures/utils.d.ts +17 -4
  203. package/dest/public/fixtures/utils.d.ts.map +1 -1
  204. package/dest/public/fixtures/utils.js +100 -58
  205. package/dest/public/hinting_db_sources.d.ts +78 -0
  206. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  207. package/dest/public/hinting_db_sources.js +350 -0
  208. package/dest/public/index.d.ts +6 -9
  209. package/dest/public/index.d.ts.map +1 -1
  210. package/dest/public/index.js +4 -7
  211. package/dest/public/public_db_sources.d.ts +51 -101
  212. package/dest/public/public_db_sources.d.ts.map +1 -1
  213. package/dest/public/public_db_sources.js +219 -192
  214. package/dest/public/public_errors.d.ts +12 -0
  215. package/dest/public/public_errors.d.ts.map +1 -0
  216. package/dest/public/public_errors.js +13 -0
  217. package/dest/public/public_processor/guarded_merkle_tree.d.ts +49 -0
  218. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  219. package/dest/public/public_processor/guarded_merkle_tree.js +108 -0
  220. package/dest/public/public_processor/public_processor.d.ts +25 -37
  221. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  222. package/dest/public/public_processor/public_processor.js +154 -111
  223. package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
  224. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  225. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  226. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +30 -0
  227. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  228. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +133 -0
  229. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +66 -0
  230. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  231. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +210 -0
  232. package/dest/public/public_tx_simulator/index.d.ts +5 -0
  233. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  234. package/dest/public/public_tx_simulator/index.js +2 -0
  235. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  236. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  237. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  238. package/dest/public/public_tx_simulator/public_tx_context.d.ts +23 -30
  239. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  240. package/dest/public/public_tx_simulator/public_tx_context.js +71 -91
  241. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +36 -58
  242. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  243. package/dest/public/public_tx_simulator/public_tx_simulator.js +208 -206
  244. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -0
  245. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  246. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  247. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  248. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  249. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  250. package/dest/public/side_effect_errors.d.ts +42 -2
  251. package/dest/public/side_effect_errors.d.ts.map +1 -1
  252. package/dest/public/side_effect_errors.js +70 -1
  253. package/dest/public/side_effect_trace.d.ts +21 -67
  254. package/dest/public/side_effect_trace.d.ts.map +1 -1
  255. package/dest/public/side_effect_trace.js +71 -121
  256. package/dest/public/side_effect_trace_interface.d.ts +12 -24
  257. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  258. package/dest/public/state_manager/index.d.ts +2 -0
  259. package/dest/public/state_manager/index.d.ts.map +1 -0
  260. package/dest/public/state_manager/index.js +1 -0
  261. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +3 -6
  262. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  263. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  264. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +3 -3
  265. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  266. package/dest/public/state_manager/state_manager.d.ts +159 -0
  267. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  268. package/dest/public/state_manager/state_manager.js +392 -0
  269. package/dest/public/test_executor_metrics.d.ts +55 -0
  270. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  271. package/dest/public/test_executor_metrics.js +307 -0
  272. package/dest/public/unique_class_ids.d.ts +1 -1
  273. package/dest/public/unique_class_ids.d.ts.map +1 -1
  274. package/dest/public/utils.d.ts +3 -5
  275. package/dest/public/utils.d.ts.map +1 -1
  276. package/dest/public/utils.js +4 -21
  277. package/dest/server.d.ts +7 -4
  278. package/dest/server.d.ts.map +1 -1
  279. package/dest/server.js +5 -2
  280. package/dest/testing.d.ts +2 -0
  281. package/dest/testing.d.ts.map +1 -0
  282. package/dest/testing.js +1 -0
  283. package/package.json +39 -33
  284. package/src/client.ts +5 -3
  285. package/src/common/errors.ts +79 -44
  286. package/src/common/index.ts +0 -1
  287. package/src/private/acvm/acvm.ts +17 -32
  288. package/src/private/acvm/acvm_types.ts +1 -1
  289. package/src/private/acvm/deserialize.ts +35 -29
  290. package/src/private/acvm/index.ts +0 -1
  291. package/src/private/acvm/serialize.ts +63 -0
  292. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
  293. package/src/private/acvm_wasm.ts +72 -0
  294. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  295. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  296. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  297. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  298. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  299. package/src/private/circuit_simulator.ts +90 -0
  300. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  301. package/src/public/avm/avm_context.ts +4 -4
  302. package/src/public/avm/avm_contract_call_result.ts +17 -5
  303. package/src/public/avm/avm_execution_environment.ts +8 -1
  304. package/src/public/avm/avm_gas.ts +23 -35
  305. package/src/public/avm/avm_machine_state.ts +5 -0
  306. package/src/public/avm/avm_memory_types.ts +19 -6
  307. package/src/public/avm/avm_simulator.ts +43 -54
  308. package/src/public/avm/avm_simulator_interface.ts +8 -0
  309. package/src/public/avm/errors.ts +8 -77
  310. package/src/public/avm/fixtures/avm_simulation_tester.ts +32 -21
  311. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
  312. package/src/public/avm/fixtures/initializers.ts +102 -0
  313. package/src/public/avm/fixtures/utils.ts +150 -0
  314. package/src/public/avm/index.ts +0 -2
  315. package/src/public/avm/opcodes/accrued_substate.ts +64 -29
  316. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  317. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  318. package/src/public/avm/opcodes/bitwise.ts +33 -29
  319. package/src/public/avm/opcodes/comparators.ts +6 -3
  320. package/src/public/avm/opcodes/contract.ts +10 -7
  321. package/src/public/avm/opcodes/control_flow.ts +19 -10
  322. package/src/public/avm/opcodes/conversion.ts +27 -3
  323. package/src/public/avm/opcodes/ec_add.ts +9 -6
  324. package/src/public/avm/opcodes/environment_getters.ts +27 -22
  325. package/src/public/avm/opcodes/external_calls.ts +61 -29
  326. package/src/public/avm/opcodes/hashing.ts +28 -8
  327. package/src/public/avm/opcodes/instruction.ts +31 -21
  328. package/src/public/avm/opcodes/memory.ts +71 -32
  329. package/src/public/avm/opcodes/misc.ts +60 -18
  330. package/src/public/avm/opcodes/storage.ts +22 -6
  331. package/src/public/avm/revert_reason.ts +55 -0
  332. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  333. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  334. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  335. package/src/public/avm/test_utils.ts +24 -41
  336. package/src/public/contracts_db_checkpoint.ts +41 -0
  337. package/src/public/db_interfaces.ts +76 -0
  338. package/src/{common → public}/debug_fn_name.ts +7 -7
  339. package/src/public/executor_metrics.ts +56 -6
  340. package/src/public/executor_metrics_interface.ts +15 -0
  341. package/src/public/fixtures/amm_test.ts +331 -0
  342. package/src/public/fixtures/bulk_test.ts +169 -0
  343. package/src/public/fixtures/custom_bytecode_tester.ts +49 -0
  344. package/src/public/fixtures/custom_bytecode_tests.ts +135 -0
  345. package/src/public/fixtures/index.ts +7 -0
  346. package/src/public/fixtures/minimal_public_tx.ts +35 -0
  347. package/src/public/fixtures/public_tx_simulation_tester.ts +166 -113
  348. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  349. package/src/public/fixtures/token_test.ts +139 -0
  350. package/src/public/fixtures/utils.ts +141 -68
  351. package/src/public/hinting_db_sources.ts +602 -0
  352. package/src/public/index.ts +5 -8
  353. package/src/public/public_db_sources.ts +278 -258
  354. package/src/public/public_errors.ts +14 -0
  355. package/src/public/public_processor/guarded_merkle_tree.ts +153 -0
  356. package/src/public/public_processor/public_processor.ts +212 -164
  357. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  358. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +162 -0
  359. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +306 -0
  360. package/src/public/public_tx_simulator/index.ts +4 -0
  361. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  362. package/src/public/public_tx_simulator/public_tx_context.ts +167 -194
  363. package/src/public/public_tx_simulator/public_tx_simulator.ts +292 -265
  364. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +10 -0
  365. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  366. package/src/public/side_effect_errors.ts +91 -1
  367. package/src/public/side_effect_trace.ts +94 -320
  368. package/src/public/side_effect_trace_interface.ts +10 -58
  369. package/src/public/state_manager/index.ts +1 -0
  370. package/src/public/{avm/journal → state_manager}/nullifiers.ts +5 -11
  371. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  372. package/src/public/state_manager/state_manager.ts +553 -0
  373. package/src/public/test_executor_metrics.ts +397 -0
  374. package/src/public/utils.ts +5 -21
  375. package/src/server.ts +6 -3
  376. package/src/testing.ts +1 -0
  377. package/dest/common/db_interfaces.d.ts +0 -80
  378. package/dest/common/db_interfaces.d.ts.map +0 -1
  379. package/dest/common/db_interfaces.js +0 -1
  380. package/dest/common/debug_fn_name.d.ts +0 -5
  381. package/dest/common/debug_fn_name.d.ts.map +0 -1
  382. package/dest/common/debug_fn_name.js +0 -6
  383. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  384. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  385. package/dest/common/message_load_oracle_inputs.js +0 -15
  386. package/dest/private/acvm/oracle/index.d.ts +0 -14
  387. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  388. package/dest/private/acvm/oracle/index.js +0 -2
  389. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  390. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  391. package/dest/private/acvm/oracle/oracle.js +0 -263
  392. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  393. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  394. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  395. package/dest/private/execution_data_provider.d.ts +0 -261
  396. package/dest/private/execution_data_provider.d.ts.map +0 -1
  397. package/dest/private/execution_data_provider.js +0 -14
  398. package/dest/private/execution_note_cache.d.ts +0 -93
  399. package/dest/private/execution_note_cache.d.ts.map +0 -1
  400. package/dest/private/execution_note_cache.js +0 -180
  401. package/dest/private/hashed_values_cache.d.ts +0 -28
  402. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  403. package/dest/private/hashed_values_cache.js +0 -46
  404. package/dest/private/index.d.ts +0 -13
  405. package/dest/private/index.d.ts.map +0 -1
  406. package/dest/private/index.js +0 -12
  407. package/dest/private/pick_notes.d.ts +0 -85
  408. package/dest/private/pick_notes.d.ts.map +0 -1
  409. package/dest/private/pick_notes.js +0 -51
  410. package/dest/private/private_execution.d.ts +0 -25
  411. package/dest/private/private_execution.d.ts.map +0 -1
  412. package/dest/private/private_execution.js +0 -92
  413. package/dest/private/private_execution_oracle.d.ts +0 -215
  414. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  415. package/dest/private/private_execution_oracle.js +0 -382
  416. package/dest/private/providers/acvm_native.d.ts +0 -40
  417. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  418. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  419. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  420. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  421. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  422. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  423. package/dest/private/providers/factory.d.ts +0 -12
  424. package/dest/private/providers/factory.d.ts.map +0 -1
  425. package/dest/private/providers/simulation_provider.d.ts +0 -19
  426. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  427. package/dest/private/providers/simulation_provider.js +0 -24
  428. package/dest/private/simulator.d.ts +0 -34
  429. package/dest/private/simulator.d.ts.map +0 -1
  430. package/dest/private/simulator.js +0 -76
  431. package/dest/private/unconstrained_execution.d.ts +0 -10
  432. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  433. package/dest/private/unconstrained_execution.js +0 -27
  434. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  435. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  436. package/dest/private/unconstrained_execution_oracle.js +0 -258
  437. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  438. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  439. package/dest/public/avm/bytecode_utils.js +0 -17
  440. package/dest/public/avm/fixtures/index.d.ts +0 -84
  441. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  442. package/dest/public/avm/fixtures/index.js +0 -175
  443. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  444. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  445. package/dest/public/avm/journal/index.d.ts +0 -2
  446. package/dest/public/avm/journal/index.d.ts.map +0 -1
  447. package/dest/public/avm/journal/index.js +0 -1
  448. package/dest/public/avm/journal/journal.d.ts +0 -209
  449. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  450. package/dest/public/avm/journal/journal.js +0 -486
  451. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  452. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  453. package/dest/public/bytecode_errors.d.ts +0 -4
  454. package/dest/public/bytecode_errors.d.ts.map +0 -1
  455. package/dest/public/bytecode_errors.js +0 -6
  456. package/dest/public/execution.d.ts +0 -108
  457. package/dest/public/execution.d.ts.map +0 -1
  458. package/dest/public/execution.js +0 -9
  459. package/dest/public/tx_contract_cache.d.ts +0 -41
  460. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  461. package/dest/public/tx_contract_cache.js +0 -49
  462. package/dest/test/utils.d.ts +0 -13
  463. package/dest/test/utils.d.ts.map +0 -1
  464. package/dest/test/utils.js +0 -22
  465. package/src/common/db_interfaces.ts +0 -94
  466. package/src/common/message_load_oracle_inputs.ts +0 -15
  467. package/src/private/acvm/oracle/index.ts +0 -16
  468. package/src/private/acvm/oracle/oracle.ts +0 -455
  469. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  470. package/src/private/execution_data_provider.ts +0 -323
  471. package/src/private/execution_note_cache.ts +0 -217
  472. package/src/private/hashed_values_cache.ts +0 -55
  473. package/src/private/index.ts +0 -16
  474. package/src/private/pick_notes.ts +0 -141
  475. package/src/private/private_execution.ts +0 -151
  476. package/src/private/private_execution_oracle.ts +0 -614
  477. package/src/private/providers/acvm_wasm.ts +0 -63
  478. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  479. package/src/private/providers/simulation_provider.ts +0 -45
  480. package/src/private/simulator.ts +0 -147
  481. package/src/private/unconstrained_execution.ts +0 -50
  482. package/src/private/unconstrained_execution_oracle.ts +0 -373
  483. package/src/public/avm/bytecode_utils.ts +0 -17
  484. package/src/public/avm/fixtures/index.ts +0 -296
  485. package/src/public/avm/journal/index.ts +0 -1
  486. package/src/public/avm/journal/journal.ts +0 -742
  487. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  488. package/src/public/bytecode_errors.ts +0 -6
  489. package/src/public/execution.ts +0 -140
  490. package/src/public/tx_contract_cache.ts +0 -69
  491. package/src/test/utils.ts +0 -36
  492. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -2,24 +2,38 @@ import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_SUBTREE_HEIGHT
2
2
  import { padArrayEnd } from '@aztec/foundation/collection';
3
3
  import { Fr } from '@aztec/foundation/fields';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
- import { type DateProvider, Timer, elapsed, executeTimeout } from '@aztec/foundation/timer';
5
+ import { sleep } from '@aztec/foundation/sleep';
6
+ import { DateProvider, Timer, elapsed, executeTimeout } from '@aztec/foundation/timer';
6
7
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
7
- import { ContractClassRegisteredEvent } from '@aztec/protocol-contracts/class-registerer';
8
+ import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
8
9
  import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
9
- import { PublicDataWrite } from '@aztec/stdlib/avm';
10
+ import {
11
+ AvmCircuitInputs,
12
+ AvmCircuitPublicInputs,
13
+ AvmExecutionHints,
14
+ type AvmProvingRequest,
15
+ PublicDataWrite,
16
+ PublicSimulatorConfig,
17
+ } from '@aztec/stdlib/avm';
10
18
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
11
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
20
+ import { computeTransactionFee } from '@aztec/stdlib/fees';
12
21
  import { Gas } from '@aztec/stdlib/gas';
13
- import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
22
+ import type {
23
+ MerkleTreeWriteOperations,
24
+ PublicProcessorLimits,
25
+ PublicProcessorValidator,
26
+ SequencerConfig,
27
+ } from '@aztec/stdlib/interfaces/server';
28
+ import { ProvingRequestType } from '@aztec/stdlib/proofs';
14
29
  import { MerkleTreeId } from '@aztec/stdlib/trees';
15
30
  import {
16
31
  type FailedTx,
17
32
  GlobalVariables,
18
33
  NestedProcessReturnValues,
19
34
  type ProcessedTx,
35
+ StateReference,
20
36
  Tx,
21
- TxExecutionPhase,
22
- type TxValidator,
23
37
  makeProcessedTxFromPrivateOnlyTx,
24
38
  makeProcessedTxFromTxWithPublicCalls,
25
39
  } from '@aztec/stdlib/tx';
@@ -33,8 +47,15 @@ import {
33
47
  } from '@aztec/telemetry-client';
34
48
  import { ForkCheckpoint } from '@aztec/world-state/native';
35
49
 
36
- import { WorldStateDB } from '../public_db_sources.js';
37
- import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
50
+ import { AssertionError } from 'assert';
51
+
52
+ import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
53
+ import {
54
+ type PublicTxSimulator,
55
+ type PublicTxSimulatorConfig,
56
+ TelemetryPublicTxSimulator,
57
+ } from '../public_tx_simulator/index.js';
58
+ import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
38
59
  import { PublicProcessorMetrics } from './public_processor_metrics.js';
39
60
 
40
61
  /**
@@ -43,13 +64,12 @@ import { PublicProcessorMetrics } from './public_processor_metrics.js';
43
64
  export class PublicProcessorFactory {
44
65
  constructor(
45
66
  private contractDataSource: ContractDataSource,
46
- private dateProvider: DateProvider,
47
- private telemetryClient: TelemetryClient = getTelemetryClient(),
67
+ private dateProvider: DateProvider = new DateProvider(),
68
+ protected telemetryClient: TelemetryClient = getTelemetryClient(),
48
69
  ) {}
49
70
 
50
71
  /**
51
72
  * Creates a new instance of a PublicProcessor.
52
- * @param historicalHeader - The header of a block previous to the one in which the tx is included.
53
73
  * @param globalVariables - The global variables for the block being processed.
54
74
  * @param skipFeeEnforcement - Allows disabling balance checks for fee estimations.
55
75
  * @returns A new instance of a PublicProcessor.
@@ -57,22 +77,17 @@ export class PublicProcessorFactory {
57
77
  public create(
58
78
  merkleTree: MerkleTreeWriteOperations,
59
79
  globalVariables: GlobalVariables,
60
- skipFeeEnforcement: boolean,
80
+ config: PublicSimulatorConfig,
61
81
  ): PublicProcessor {
62
- const worldStateDB = new WorldStateDB(merkleTree, this.contractDataSource);
63
- const publicTxSimulator = this.createPublicTxSimulator(
64
- merkleTree,
65
- worldStateDB,
66
- globalVariables,
67
- /*doMerkleOperations=*/ true,
68
- skipFeeEnforcement,
69
- this.telemetryClient,
70
- );
82
+ const contractsDB = new PublicContractsDB(this.contractDataSource);
83
+
84
+ const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
85
+ const publicTxSimulator = this.createPublicTxSimulator(guardedFork, contractsDB, globalVariables, config);
71
86
 
72
87
  return new PublicProcessor(
73
- merkleTree,
74
88
  globalVariables,
75
- worldStateDB,
89
+ guardedFork,
90
+ contractsDB,
76
91
  publicTxSimulator,
77
92
  this.dateProvider,
78
93
  this.telemetryClient,
@@ -80,21 +95,12 @@ export class PublicProcessorFactory {
80
95
  }
81
96
 
82
97
  protected createPublicTxSimulator(
83
- db: MerkleTreeWriteOperations,
84
- worldStateDB: WorldStateDB,
98
+ merkleTree: MerkleTreeWriteOperations,
99
+ contractsDB: PublicContractsDB,
85
100
  globalVariables: GlobalVariables,
86
- doMerkleOperations: boolean,
87
- skipFeeEnforcement: boolean,
88
- telemetryClient: TelemetryClient,
89
- ) {
90
- return new PublicTxSimulator(
91
- db,
92
- worldStateDB,
93
- globalVariables,
94
- doMerkleOperations,
95
- skipFeeEnforcement,
96
- telemetryClient,
97
- );
101
+ config?: Partial<PublicTxSimulatorConfig>,
102
+ ): PublicTxSimulator {
103
+ return new TelemetryPublicTxSimulator(merkleTree, contractsDB, globalVariables, this.telemetryClient, config);
98
104
  }
99
105
  }
100
106
 
@@ -111,14 +117,16 @@ class PublicProcessorTimeoutError extends Error {
111
117
  */
112
118
  export class PublicProcessor implements Traceable {
113
119
  private metrics: PublicProcessorMetrics;
120
+
114
121
  constructor(
115
- protected db: MerkleTreeWriteOperations,
116
122
  protected globalVariables: GlobalVariables,
117
- protected worldStateDB: WorldStateDB,
123
+ private guardedMerkleTree: GuardedMerkleTreeOperations,
124
+ protected contractsDB: PublicContractsDB,
118
125
  protected publicTxSimulator: PublicTxSimulator,
119
126
  private dateProvider: DateProvider,
120
127
  telemetryClient: TelemetryClient = getTelemetryClient(),
121
128
  private log = createLogger('simulator:public-processor'),
129
+ private opts: Pick<SequencerConfig, 'fakeProcessingDelayPerTxMs'> = {},
122
130
  ) {
123
131
  this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
124
132
  }
@@ -130,26 +138,19 @@ export class PublicProcessor implements Traceable {
130
138
  /**
131
139
  * Run each tx through the public circuit and the public kernel circuit if needed.
132
140
  * @param txs - Txs to process.
133
- * @param processedTxHandler - Handler for processed txs in the context of block building or proving.
141
+ * @param limits - Limits for processing the txs.
142
+ * @param validator - Pre-process validator and nullifier cache to use for processing the txs.
134
143
  * @returns The list of processed txs with their circuit simulation outputs.
135
144
  */
136
145
  public async process(
137
146
  txs: Iterable<Tx> | AsyncIterable<Tx>,
138
- limits: {
139
- maxTransactions?: number;
140
- maxBlockSize?: number;
141
- maxBlockGas?: Gas;
142
- deadline?: Date;
143
- } = {},
144
- validators: {
145
- preprocessValidator?: TxValidator<Tx>;
146
- postprocessValidator?: TxValidator<ProcessedTx>;
147
- nullifierCache?: { addNullifiers: (nullifiers: Buffer[]) => void };
148
- } = {},
149
- ): Promise<[ProcessedTx[], FailedTx[], NestedProcessReturnValues[]]> {
150
- const { maxTransactions, maxBlockSize, deadline, maxBlockGas } = limits;
151
- const { preprocessValidator, postprocessValidator, nullifierCache } = validators;
147
+ limits: PublicProcessorLimits = {},
148
+ validator: PublicProcessorValidator = {},
149
+ ): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[]]> {
150
+ const { maxTransactions, maxBlockSize, deadline, maxBlockGas, maxBlobFields } = limits;
151
+ const { preprocessValidator, nullifierCache } = validator;
152
152
  const result: ProcessedTx[] = [];
153
+ const usedTxs: Tx[] = [];
153
154
  const failed: FailedTx[] = [];
154
155
  const timer = new Timer();
155
156
 
@@ -157,6 +158,7 @@ export class PublicProcessor implements Traceable {
157
158
  let returns: NestedProcessReturnValues[] = [];
158
159
  let totalPublicGas = new Gas(0, 0);
159
160
  let totalBlockGas = new Gas(0, 0);
161
+ let totalBlobFields = 0;
160
162
 
161
163
  for await (const origTx of txs) {
162
164
  // Only process up to the max tx limit
@@ -172,7 +174,7 @@ export class PublicProcessor implements Traceable {
172
174
  }
173
175
 
174
176
  // Skip this tx if it'd exceed max block size
175
- const txHash = (await origTx.getTxHash()).toString();
177
+ const txHash = origTx.getTxHash().toString();
176
178
  const preTxSizeInBytes = origTx.getEstimatedPrivateTxEffectsSize();
177
179
  if (maxBlockSize !== undefined && totalSizeInBytes + preTxSizeInBytes > maxBlockSize) {
178
180
  this.log.warn(`Skipping processing of tx ${txHash} sized ${preTxSizeInBytes} bytes due to block size limit`, {
@@ -202,16 +204,16 @@ export class PublicProcessor implements Traceable {
202
204
  // We validate the tx before processing it, to avoid unnecessary work.
203
205
  if (preprocessValidator) {
204
206
  const result = await preprocessValidator.validateTx(tx);
205
- const txHash = await tx.getTxHash();
207
+ const txHash = tx.getTxHash();
206
208
  if (result.result === 'invalid') {
207
209
  const reason = result.reason.join(', ');
208
- this.log.warn(`Rejecting tx ${txHash.toString()} due to pre-process validation fail: ${reason}`);
210
+ this.log.debug(`Rejecting tx ${txHash.toString()} due to pre-process validation fail: ${reason}`);
209
211
  failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
210
212
  returns.push(new NestedProcessReturnValues([]));
211
213
  continue;
212
214
  } else if (result.result === 'skipped') {
213
215
  const reason = result.reason.join(', ');
214
- this.log.warn(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
216
+ this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
215
217
  returns.push(new NestedProcessReturnValues([]));
216
218
  continue;
217
219
  } else {
@@ -222,15 +224,21 @@ export class PublicProcessor implements Traceable {
222
224
  // We checkpoint the transaction here, then within the try/catch we
223
225
  // 1. Revert the checkpoint if the tx fails or needs to be discarded for any reason
224
226
  // 2. Commit the transaction in the finally block. Note that by using the ForkCheckpoint lifecycle only the first commit/revert takes effect
225
- const checkpoint = await ForkCheckpoint.new(this.worldStateDB);
227
+ // By doing this, every transaction starts on a fresh checkpoint and it's state updates only make it to the fork if this checkpoint is committed.
228
+ // Note: We use the underlying fork here not the guarded one, this ensures that it's not impacted by stopping the guarded version
229
+ const checkpoint = await ForkCheckpoint.new(this.guardedMerkleTree.getUnderlyingFork());
230
+ const startStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
231
+ this.contractsDB.createCheckpoint();
226
232
 
227
233
  try {
228
234
  const [processedTx, returnValues] = await this.processTx(tx, deadline);
229
235
 
236
+ const txBlobFields = processedTx.txEffect.getNumBlobFields();
237
+
230
238
  // If the actual size of this tx would exceed block size, skip it
231
- const txSize = processedTx.txEffect.getDASize();
239
+ const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
232
240
  if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
233
- this.log.warn(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
241
+ this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
234
242
  txHash,
235
243
  sizeInBytes: txSize,
236
244
  totalSizeInBytes,
@@ -238,63 +246,83 @@ export class PublicProcessor implements Traceable {
238
246
  });
239
247
  // Need to revert the checkpoint here and don't go any further
240
248
  await checkpoint.revert();
249
+ this.contractsDB.revertCheckpoint();
241
250
  continue;
242
251
  }
243
252
 
244
- // Re-validate the transaction
245
- if (postprocessValidator) {
246
- // Only accept processed transactions that are not double-spends,
247
- // public functions emitting nullifiers would pass earlier check but fail here.
248
- // Note that we're checking all nullifiers generated in the private execution twice,
249
- // we could store the ones already checked and skip them here as an optimization.
250
- // TODO(palla/txs): Can we get into this case? AVM validates this. We should be able to remove it.
251
- const result = await postprocessValidator.validateTx(processedTx);
252
- if (result.result !== 'valid') {
253
- const reason = result.reason.join(', ');
254
- this.log.error(`Rejecting tx ${processedTx.hash} after processing: ${reason}.`);
255
- failed.push({ tx, error: new Error(`Tx failed post-process validation: ${reason}`) });
256
- // Need to revert the checkpoint here and don't go any further
257
- await checkpoint.revert();
258
- continue;
259
- } else {
260
- this.log.trace(`Tx ${txHash.toString()} is valid post processing.`);
261
- }
262
- }
263
-
264
- if (!tx.hasPublicCalls()) {
265
- // If there are no public calls, perform all tree insertions for side effects from private
266
- // When there are public calls, the PublicTxSimulator & AVM handle tree insertions.
267
- await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
268
- // Add any contracts registered/deployed in this private-only tx to the block-level cache
269
- // (add to tx-level cache and then commit to block-level cache)
270
- await this.worldStateDB.addNewContracts(tx);
271
- this.worldStateDB.commitContractsForTx();
253
+ // If the actual blob fields of this tx would exceed the limit, skip it
254
+ if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
255
+ this.log.debug(
256
+ `Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`,
257
+ {
258
+ txHash,
259
+ txBlobFields,
260
+ totalBlobFields,
261
+ maxBlobFields,
262
+ },
263
+ );
264
+ // Need to revert the checkpoint here and don't go any further
265
+ await checkpoint.revert();
266
+ this.contractsDB.revertCheckpoint();
267
+ continue;
272
268
  }
273
269
 
270
+ // FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
271
+ // I'd rather pass the validators the processedTx as well and let them deal with it.
274
272
  nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
275
273
  result.push(processedTx);
274
+ usedTxs.push(tx);
276
275
  returns = returns.concat(returnValues);
277
276
 
278
277
  totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
279
278
  totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
280
279
  totalSizeInBytes += txSize;
280
+ totalBlobFields += txBlobFields;
281
281
  } catch (err: any) {
282
- // Roll back state to start of TX before proceeding to next TX
283
- await checkpoint.revert();
284
282
  if (err?.name === 'PublicProcessorTimeoutError') {
285
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.
286
+ await this.guardedMerkleTree.stop();
287
+
288
+ // We now know there can't be any further access to world state. The fork is in a state where there is:
289
+ // 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
290
+ // 2. Possible state updates on that checkpoint or any others created during execution.
291
+
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();
300
+
301
+ // Revert any contracts added to the DB for the tx.
302
+ this.contractsDB.revertCheckpoint();
303
+
304
+ // Ensure we're at the same state as when we started processing this tx.
305
+ await this.checkWorldStateUnchanged(startStateReference, txHash, err);
306
+
307
+ // We should now be in a position where the fork is in a clean state and no further updates can be made to it.
286
308
  break;
287
309
  }
288
- const errorMessage = err instanceof Error ? err.message : 'Unknown error';
289
- this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
290
310
 
311
+ // Roll back state to start of TX before proceeding to next TX
312
+ await checkpoint.revert();
313
+ await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
314
+ this.contractsDB.revertCheckpoint();
315
+ const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
316
+ this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
291
317
  failed.push({ tx, error: err instanceof Error ? err : new Error(errorMessage) });
292
318
  returns.push(new NestedProcessReturnValues([]));
319
+
320
+ // Ensure we're at the same state as when we started processing this tx.
321
+ await this.checkWorldStateUnchanged(startStateReference, txHash, err);
293
322
  } finally {
294
- // Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was reverted
323
+ // Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
295
324
  await checkpoint.commit();
296
- // The tx-level contracts cache should not live on to the next tx
297
- this.worldStateDB.clearContractsForTx();
325
+ this.contractsDB.commitCheckpointOkIfNone();
298
326
  }
299
327
  }
300
328
 
@@ -310,17 +338,33 @@ export class PublicProcessor implements Traceable {
310
338
  totalSizeInBytes,
311
339
  });
312
340
 
313
- return [result, failed, returns];
341
+ return [result, failed, usedTxs, returns];
314
342
  }
315
343
 
316
- @trackSpan('PublicProcessor.processTx', async tx => ({ [Attributes.TX_HASH]: (await tx.getTxHash()).toString() }))
317
- private async processTx(tx: Tx, deadline?: Date): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
344
+ private async checkWorldStateUnchanged(
345
+ startStateReference: StateReference,
346
+ txHash: `0x${string}`,
347
+ cause: Error,
348
+ ): Promise<void> {
349
+ const endStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
350
+ if (!startStateReference.equals(endStateReference)) {
351
+ this.log.warn(`Fork state reference changed by tx ${txHash} after error in public processor`, {
352
+ expected: startStateReference.toInspect(),
353
+ actual: endStateReference.toInspect(),
354
+ cause,
355
+ });
356
+ throw new Error(`Fork state reference changed by tx ${txHash} after error in public processor`, { cause });
357
+ }
358
+ }
359
+
360
+ @trackSpan('PublicProcessor.processTx', tx => ({ [Attributes.TX_HASH]: tx.getTxHash().toString() }))
361
+ private async processTx(tx: Tx, deadline: Date | undefined): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
318
362
  const [time, [processedTx, returnValues]] = await elapsed(() => this.processTxWithinDeadline(tx, deadline));
319
363
 
320
364
  this.log.verbose(
321
365
  !tx.hasPublicCalls()
322
366
  ? `Processed tx ${processedTx.hash} with no public calls in ${time}ms`
323
- : `Processed tx ${processedTx.hash} with ${tx.enqueuedPublicFunctionCalls.length} public calls in ${time}ms`,
367
+ : `Processed tx ${processedTx.hash} with ${tx.numberOfPublicCalls()} public calls in ${time}ms`,
324
368
  {
325
369
  txHash: processedTx.hash,
326
370
  txFee: processedTx.txEffect.transactionFee.toBigInt(),
@@ -341,10 +385,7 @@ export class PublicProcessor implements Traceable {
341
385
  return [processedTx, returnValues ?? []];
342
386
  }
343
387
 
344
- private async doTreeInsertionsForPrivateOnlyTx(
345
- processedTx: ProcessedTx,
346
- txValidator?: TxValidator<ProcessedTx>,
347
- ): Promise<void> {
388
+ private async doTreeInsertionsForPrivateOnlyTx(processedTx: ProcessedTx): Promise<void> {
348
389
  const treeInsertionStart = process.hrtime.bigint();
349
390
 
350
391
  // Update the state so that the next tx in the loop has the correct .startState
@@ -353,31 +394,20 @@ export class PublicProcessor implements Traceable {
353
394
  // b) always had a txHandler with the same db passed to it as this.db, which updated the db in buildBaseRollupHints in this loop
354
395
  // To see how this ^ happens, move back to one shared db in test_context and run orchestrator_multi_public_functions.test.ts
355
396
  // The below is taken from buildBaseRollupHints:
356
- await this.db.appendLeaves(
397
+ await this.guardedMerkleTree.appendLeaves(
357
398
  MerkleTreeId.NOTE_HASH_TREE,
358
399
  padArrayEnd(processedTx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
359
400
  );
360
401
  try {
361
- await this.db.batchInsert(
402
+ await this.guardedMerkleTree.batchInsert(
362
403
  MerkleTreeId.NULLIFIER_TREE,
363
404
  padArrayEnd(processedTx.txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map(n => n.toBuffer()),
364
405
  NULLIFIER_SUBTREE_HEIGHT,
365
406
  );
366
- } catch (error) {
367
- if (txValidator) {
368
- // Ideally the validator has already caught this above, but just in case:
369
- throw new Error(`Transaction ${processedTx.hash} invalid after processing public functions`);
370
- } else {
371
- // We have no validator and assume this call should blindly process txs with duplicates being caught later
372
- this.log.warn(`Detected duplicate nullifier after public processing for: ${processedTx.hash}.`);
373
- }
407
+ } catch (cause) {
408
+ throw new Error(`Transaction ${processedTx.hash} failed with duplicate nullifiers`, { cause });
374
409
  }
375
410
 
376
- // The only public data write should be for fee payment
377
- await this.db.sequentialInsert(
378
- MerkleTreeId.PUBLIC_DATA_TREE,
379
- processedTx.txEffect.publicDataWrites.map(x => x.toBuffer()),
380
- );
381
411
  const treeInsertionEnd = process.hrtime.bigint();
382
412
  this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
383
413
  }
@@ -385,17 +415,29 @@ export class PublicProcessor implements Traceable {
385
415
  /** Processes the given tx within deadline. Returns timeout if deadline is hit. */
386
416
  private async processTxWithinDeadline(
387
417
  tx: Tx,
388
- deadline?: Date,
418
+ deadline: Date | undefined,
389
419
  ): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> {
390
- const processFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> = tx.hasPublicCalls()
420
+ const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> = tx.hasPublicCalls()
391
421
  ? () => this.processTxWithPublicCalls(tx)
392
422
  : () => this.processPrivateOnlyTx(tx);
393
423
 
424
+ // Fake a delay per tx if instructed (used for tests)
425
+ const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
426
+ const processFn =
427
+ fakeDelayPerTxMs && fakeDelayPerTxMs > 0
428
+ ? async () => {
429
+ const result = await innerProcessFn();
430
+ this.log.warn(`Sleeping ${fakeDelayPerTxMs}ms after processing tx ${tx.getTxHash().toString()}`);
431
+ await sleep(fakeDelayPerTxMs);
432
+ return result;
433
+ }
434
+ : innerProcessFn;
435
+
394
436
  if (!deadline) {
395
437
  return await processFn();
396
438
  }
397
439
 
398
- const txHash = await tx.getTxHash();
440
+ const txHash = tx.getTxHash();
399
441
  const timeout = +deadline - this.dateProvider.now();
400
442
  if (timeout <= 0) {
401
443
  throw new PublicProcessorTimeoutError();
@@ -419,14 +461,16 @@ export class PublicProcessor implements Traceable {
419
461
  * This is used in private only txs, since for txs with public calls
420
462
  * the avm handles the fee payment itself.
421
463
  */
422
- private async getFeePaymentPublicDataWrite(txFee: Fr, feePayer: AztecAddress): Promise<PublicDataWrite> {
464
+ private async performFeePaymentPublicDataWrite(txFee: Fr, feePayer: AztecAddress): Promise<PublicDataWrite> {
423
465
  const feeJuiceAddress = ProtocolContractAddress.FeeJuice;
424
466
  const balanceSlot = await computeFeePayerBalanceStorageSlot(feePayer);
425
467
  const leafSlot = await computeFeePayerBalanceLeafSlot(feePayer);
468
+ // This high-level db is used as a convenient helper. It could be done with the merkleTree directly.
469
+ const treesDB = new PublicTreesDB(this.guardedMerkleTree);
426
470
 
427
471
  this.log.debug(`Deducting ${txFee.toBigInt()} balance in Fee Juice for ${feePayer}`);
428
472
 
429
- const balance = await this.worldStateDB.storageRead(feeJuiceAddress, balanceSlot);
473
+ const balance = await treesDB.storageRead(feeJuiceAddress, balanceSlot);
430
474
 
431
475
  if (balance.lt(txFee)) {
432
476
  throw new Error(
@@ -435,87 +479,91 @@ export class PublicProcessor implements Traceable {
435
479
  }
436
480
 
437
481
  const updatedBalance = balance.sub(txFee);
438
- await this.worldStateDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
482
+ await treesDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
439
483
 
440
484
  return new PublicDataWrite(leafSlot, updatedBalance);
441
485
  }
442
486
 
443
- @trackSpan('PublicProcessor.processPrivateOnlyTx', async (tx: Tx) => ({
444
- [Attributes.TX_HASH]: (await tx.getTxHash()).toString(),
487
+ @trackSpan('PublicProcessor.processPrivateOnlyTx', (tx: Tx) => ({
488
+ [Attributes.TX_HASH]: tx.getTxHash().toString(),
445
489
  }))
446
490
  private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined]> {
447
491
  const gasFees = this.globalVariables.gasFees;
448
- const transactionFee = tx.data.gasUsed.computeFee(gasFees);
492
+ const transactionFee = computeTransactionFee(gasFees, tx.data.constants.txContext.gasSettings, tx.data.gasUsed);
449
493
 
450
- const feePaymentPublicDataWrite = await this.getFeePaymentPublicDataWrite(transactionFee, tx.data.feePayer);
494
+ const feePaymentPublicDataWrite = await this.performFeePaymentPublicDataWrite(transactionFee, tx.data.feePayer);
451
495
 
452
- const processedTx = await makeProcessedTxFromPrivateOnlyTx(
496
+ const processedTx = makeProcessedTxFromPrivateOnlyTx(
453
497
  tx,
454
498
  transactionFee,
455
499
  feePaymentPublicDataWrite,
456
500
  this.globalVariables,
457
501
  );
458
502
 
459
- const siloedContractClassLogs = await tx.filterContractClassLogs(
460
- tx.data.getNonEmptyContractClassLogsHashes(),
461
- true,
503
+ this.metrics.recordClassPublication(
504
+ ...tx
505
+ .getContractClassLogs()
506
+ .filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
507
+ .map(log => ContractClassPublishedEvent.fromLog(log)),
462
508
  );
463
509
 
464
- this.metrics.recordClassRegistration(
465
- ...siloedContractClassLogs
466
- .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
467
- .map(log => ContractClassRegisteredEvent.fromLog(log)),
468
- );
510
+ // Fee payment insertion has already been done. Do the rest.
511
+ await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
512
+
513
+ await this.contractsDB.addNewContracts(tx);
514
+
469
515
  return [processedTx, undefined];
470
516
  }
471
517
 
472
- @trackSpan('PublicProcessor.processTxWithPublicCalls', async tx => ({
473
- [Attributes.TX_HASH]: (await tx.getTxHash()).toString(),
518
+ @trackSpan('PublicProcessor.processTxWithPublicCalls', tx => ({
519
+ [Attributes.TX_HASH]: tx.getTxHash().toString(),
474
520
  }))
475
521
  private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
476
522
  const timer = new Timer();
477
523
 
478
- const { avmProvingRequest, gasUsed, revertCode, revertReason, processedPhases } =
524
+ const { hints, publicInputs, gasUsed, revertCode, revertReason, appLogicReturnValues } =
479
525
  await this.publicTxSimulator.simulate(tx);
480
526
 
481
- if (!avmProvingRequest) {
527
+ if (!hints) {
482
528
  this.metrics.recordFailedTx();
483
529
  throw new Error('Avm proving result was not generated.');
484
530
  }
485
531
 
486
- processedPhases.forEach(phase => {
487
- if (phase.reverted) {
488
- this.metrics.recordRevertedPhase(phase.phase);
489
- } else {
490
- this.metrics.recordPhaseDuration(phase.phase, phase.durationMs);
491
- }
492
- });
493
-
494
- const siloedContractClassLogs = await tx.filterContractClassLogs(
495
- tx.data.getNonEmptyContractClassLogsHashes(),
496
- true,
497
- );
498
-
499
- this.metrics.recordClassRegistration(
500
- ...siloedContractClassLogs
501
- .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
502
- .map(log => ContractClassRegisteredEvent.fromLog(log)),
532
+ const contractClassLogs = revertCode.isOK()
533
+ ? tx.getContractClassLogs()
534
+ : tx.getSplitContractClassLogs(false /* revertible */);
535
+ this.metrics.recordClassPublication(
536
+ ...contractClassLogs
537
+ .filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
538
+ .map(log => ContractClassPublishedEvent.fromLog(log)),
503
539
  );
504
540
 
505
- const phaseCount = processedPhases.length;
541
+ // TODO(fcarreiro): remove phase count metric.
542
+ const phaseCount = 1;
506
543
  const durationMs = timer.ms();
507
544
  this.metrics.recordTx(phaseCount, durationMs, gasUsed.publicGas);
508
545
 
509
- const processedTx = await makeProcessedTxFromTxWithPublicCalls(
546
+ const processedTx = makeProcessedTxFromTxWithPublicCalls(
510
547
  tx,
511
- avmProvingRequest,
548
+ PublicProcessor.generateProvingRequest(publicInputs, hints),
512
549
  gasUsed,
513
550
  revertCode,
514
551
  revertReason,
515
552
  );
516
553
 
517
- const returnValues = processedPhases.find(({ phase }) => phase === TxExecutionPhase.APP_LOGIC)?.returnValues ?? [];
554
+ return [processedTx, appLogicReturnValues ?? []];
555
+ }
518
556
 
519
- return [processedTx, returnValues];
557
+ /**
558
+ * Generate the proving request for the AVM circuit.
559
+ */
560
+ private static generateProvingRequest(
561
+ publicInputs: AvmCircuitPublicInputs,
562
+ hints: AvmExecutionHints,
563
+ ): AvmProvingRequest {
564
+ return {
565
+ type: ProvingRequestType.PUBLIC_VM,
566
+ inputs: new AvmCircuitInputs(hints, publicInputs),
567
+ };
520
568
  }
521
569
  }
@@ -1,4 +1,4 @@
1
- import type { ContractClassRegisteredEvent } from '@aztec/protocol-contracts/class-registerer';
1
+ import type { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
2
2
  import type { Gas } from '@aztec/stdlib/gas';
3
3
  import type { TxExecutionPhase } from '@aztec/stdlib/tx';
4
4
  import {
@@ -137,7 +137,7 @@ export class PublicProcessorMetrics {
137
137
  this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: false });
138
138
  }
139
139
 
140
- recordClassRegistration(...events: ContractClassRegisteredEvent[]) {
140
+ recordClassPublication(...events: ContractClassPublishedEvent[]) {
141
141
  let totalBytecode = 0;
142
142
  for (const event of events) {
143
143
  totalBytecode += event.packedPublicBytecode.length;