@aztec/simulator 0.0.0-test.1 → 0.0.1-fake-ceab37513c

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 (436) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +5 -3
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +4 -7
  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 +0 -1
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/private/acvm/acvm.d.ts +11 -5
  12. package/dest/private/acvm/acvm.d.ts.map +1 -1
  13. package/dest/private/acvm/acvm.js +10 -16
  14. package/dest/private/acvm/acvm_types.d.ts +1 -1
  15. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  16. package/dest/private/acvm/deserialize.d.ts +17 -18
  17. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.js +31 -23
  19. package/dest/private/acvm/index.d.ts +0 -1
  20. package/dest/private/acvm/index.d.ts.map +1 -1
  21. package/dest/private/acvm/index.js +0 -1
  22. package/dest/private/acvm/serialize.d.ts +19 -2
  23. package/dest/private/acvm/serialize.d.ts.map +1 -1
  24. package/dest/private/acvm/serialize.js +53 -0
  25. package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +10 -10
  26. package/dest/private/acvm_native.d.ts.map +1 -0
  27. package/dest/private/{providers/acvm_native.js → acvm_native.js} +11 -7
  28. package/dest/private/acvm_wasm.d.ts +15 -0
  29. package/dest/private/acvm_wasm.d.ts.map +1 -0
  30. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  31. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  32. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  33. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  34. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  35. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  36. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  37. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  38. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  40. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  41. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  43. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  44. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  46. package/dest/private/circuit_simulator.d.ts +35 -0
  47. package/dest/private/circuit_simulator.d.ts.map +1 -0
  48. package/dest/private/circuit_simulator.js +43 -0
  49. package/dest/private/factory.d.ts +12 -0
  50. package/dest/private/factory.d.ts.map +1 -0
  51. package/dest/private/{providers/factory.js → factory.js} +2 -2
  52. package/dest/public/avm/avm_context.d.ts +5 -5
  53. package/dest/public/avm/avm_context.d.ts.map +1 -1
  54. package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
  55. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.js +11 -7
  57. package/dest/public/avm/avm_execution_environment.d.ts +2 -1
  58. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  59. package/dest/public/avm/avm_execution_environment.js +4 -2
  60. package/dest/public/avm/avm_gas.d.ts +4 -20
  61. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  62. package/dest/public/avm/avm_gas.js +27 -35
  63. package/dest/public/avm/avm_machine_state.d.ts +2 -0
  64. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  65. package/dest/public/avm/avm_machine_state.js +2 -0
  66. package/dest/public/avm/avm_memory_types.d.ts +98 -87
  67. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  68. package/dest/public/avm/avm_memory_types.js +17 -6
  69. package/dest/public/avm/avm_simulator.d.ts +4 -5
  70. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  71. package/dest/public/avm/avm_simulator.js +13 -18
  72. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  73. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  74. package/dest/public/avm/avm_simulator_interface.js +3 -0
  75. package/dest/public/avm/errors.d.ts +1 -16
  76. package/dest/public/avm/errors.d.ts.map +1 -1
  77. package/dest/public/avm/errors.js +0 -37
  78. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +3 -3
  79. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  80. package/dest/public/avm/fixtures/avm_simulation_tester.js +10 -11
  81. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +4 -4
  82. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +16 -15
  84. package/dest/public/avm/fixtures/initializers.d.ts +43 -0
  85. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  86. package/dest/public/avm/fixtures/initializers.js +42 -0
  87. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  88. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  89. package/dest/public/avm/fixtures/utils.js +95 -0
  90. package/dest/public/avm/index.d.ts +0 -2
  91. package/dest/public/avm/index.d.ts.map +1 -1
  92. package/dest/public/avm/index.js +0 -2
  93. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  94. package/dest/public/avm/opcodes/accrued_substate.js +22 -19
  95. package/dest/public/avm/opcodes/addressing_mode.d.ts +11 -7
  96. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/addressing_mode.js +48 -27
  98. package/dest/public/avm/opcodes/arithmetic.d.ts +11 -1
  99. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  101. package/dest/public/avm/opcodes/bitwise.d.ts +5 -13
  102. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/bitwise.js +19 -26
  104. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  105. package/dest/public/avm/opcodes/comparators.js +3 -3
  106. package/dest/public/avm/opcodes/contract.d.ts +1 -2
  107. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  108. package/dest/public/avm/opcodes/contract.js +9 -10
  109. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  110. package/dest/public/avm/opcodes/control_flow.js +10 -8
  111. package/dest/public/avm/opcodes/conversion.d.ts +1 -0
  112. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  113. package/dest/public/avm/opcodes/conversion.js +264 -3
  114. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/ec_add.js +2 -2
  116. package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
  117. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/environment_getters.js +12 -12
  119. package/dest/public/avm/opcodes/external_calls.d.ts +8 -7
  120. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/external_calls.js +39 -33
  122. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  123. package/dest/public/avm/opcodes/hashing.js +6 -6
  124. package/dest/public/avm/opcodes/instruction.d.ts +14 -10
  125. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  126. package/dest/public/avm/opcodes/instruction.js +18 -13
  127. package/dest/public/avm/opcodes/memory.d.ts +4 -4
  128. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  129. package/dest/public/avm/opcodes/memory.js +37 -33
  130. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  131. package/dest/public/avm/opcodes/misc.js +17 -12
  132. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/storage.js +7 -5
  134. package/dest/public/avm/revert_reason.d.ts +18 -0
  135. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  136. package/dest/public/avm/revert_reason.js +38 -0
  137. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
  138. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  139. package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
  140. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  141. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  142. package/dest/public/avm/serialization/instruction_serialization.d.ts +5 -4
  143. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  144. package/dest/public/avm/serialization/instruction_serialization.js +60 -35
  145. package/dest/public/avm/test_utils.d.ts +10 -13
  146. package/dest/public/avm/test_utils.d.ts.map +1 -1
  147. package/dest/public/avm/test_utils.js +12 -17
  148. package/dest/public/db_interfaces.d.ts +56 -0
  149. package/dest/public/db_interfaces.d.ts.map +1 -0
  150. package/dest/public/db_interfaces.js +3 -0
  151. package/dest/public/debug_fn_name.d.ts +5 -0
  152. package/dest/public/debug_fn_name.d.ts.map +1 -0
  153. package/dest/public/debug_fn_name.js +9 -0
  154. package/dest/public/executor_metrics.d.ts +10 -3
  155. package/dest/public/executor_metrics.d.ts.map +1 -1
  156. package/dest/public/executor_metrics.js +37 -6
  157. package/dest/public/executor_metrics_interface.d.ts +9 -0
  158. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  159. package/dest/public/executor_metrics_interface.js +1 -0
  160. package/dest/public/fixtures/amm_test.d.ts +10 -0
  161. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  162. package/dest/public/fixtures/amm_test.js +213 -0
  163. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  164. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  165. package/dest/public/fixtures/bulk_test.js +393 -0
  166. package/dest/public/fixtures/index.d.ts +6 -0
  167. package/dest/public/fixtures/index.d.ts.map +1 -1
  168. package/dest/public/fixtures/index.js +6 -0
  169. package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
  170. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  171. package/dest/public/fixtures/minimal_public_tx.js +43 -0
  172. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +33 -13
  173. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  174. package/dest/public/fixtures/public_tx_simulation_tester.js +90 -70
  175. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
  176. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  177. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  178. package/dest/public/fixtures/token_test.d.ts +8 -0
  179. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  180. package/dest/public/fixtures/token_test.js +95 -0
  181. package/dest/public/fixtures/utils.d.ts +16 -3
  182. package/dest/public/fixtures/utils.d.ts.map +1 -1
  183. package/dest/public/fixtures/utils.js +100 -58
  184. package/dest/public/hinting_db_sources.d.ts +68 -0
  185. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  186. package/dest/public/hinting_db_sources.js +294 -0
  187. package/dest/public/index.d.ts +4 -8
  188. package/dest/public/index.d.ts.map +1 -1
  189. package/dest/public/index.js +4 -7
  190. package/dest/public/public_db_sources.d.ts +30 -39
  191. package/dest/public/public_db_sources.d.ts.map +1 -1
  192. package/dest/public/public_db_sources.js +141 -67
  193. package/dest/public/public_processor/guarded_merkle_tree.d.ts +47 -0
  194. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  195. package/dest/public/public_processor/guarded_merkle_tree.js +105 -0
  196. package/dest/public/public_processor/public_processor.d.ts +19 -29
  197. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  198. package/dest/public/public_processor/public_processor.js +133 -94
  199. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  200. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  201. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  202. package/dest/public/public_tx_simulator/index.d.ts +3 -0
  203. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  204. package/dest/public/public_tx_simulator/index.js +2 -0
  205. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +23 -0
  206. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  207. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +52 -0
  208. package/dest/public/public_tx_simulator/public_tx_context.d.ts +17 -29
  209. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  210. package/dest/public/public_tx_simulator/public_tx_context.js +59 -91
  211. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +27 -42
  212. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  213. package/dest/public/public_tx_simulator/public_tx_simulator.js +128 -171
  214. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +20 -0
  215. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  216. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  217. package/dest/public/side_effect_trace.d.ts +10 -62
  218. package/dest/public/side_effect_trace.d.ts.map +1 -1
  219. package/dest/public/side_effect_trace.js +43 -108
  220. package/dest/public/side_effect_trace_interface.d.ts +5 -22
  221. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  222. package/dest/public/state_manager/index.d.ts +2 -0
  223. package/dest/public/state_manager/index.d.ts.map +1 -0
  224. package/dest/public/state_manager/index.js +1 -0
  225. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +2 -2
  226. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  227. package/dest/public/{avm/journal → state_manager}/nullifiers.js +2 -2
  228. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +2 -2
  229. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  230. package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +37 -85
  231. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  232. package/dest/public/state_manager/state_manager.js +352 -0
  233. package/dest/public/test_executor_metrics.d.ts +54 -0
  234. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  235. package/dest/public/test_executor_metrics.js +306 -0
  236. package/dest/public/unique_class_ids.d.ts.map +1 -1
  237. package/dest/public/utils.d.ts +2 -4
  238. package/dest/public/utils.d.ts.map +1 -1
  239. package/dest/public/utils.js +4 -21
  240. package/dest/server.d.ts +6 -3
  241. package/dest/server.d.ts.map +1 -1
  242. package/dest/server.js +5 -2
  243. package/dest/testing.d.ts +2 -0
  244. package/dest/testing.d.ts.map +1 -0
  245. package/dest/testing.js +1 -0
  246. package/package.json +31 -30
  247. package/src/client.ts +5 -3
  248. package/src/common/errors.ts +79 -44
  249. package/src/common/index.ts +0 -1
  250. package/src/private/acvm/acvm.ts +17 -32
  251. package/src/private/acvm/acvm_types.ts +1 -1
  252. package/src/private/acvm/deserialize.ts +35 -29
  253. package/src/private/acvm/index.ts +0 -1
  254. package/src/private/acvm/serialize.ts +63 -0
  255. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +31 -15
  256. package/src/private/acvm_wasm.ts +72 -0
  257. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  258. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  259. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  260. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  261. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  262. package/src/private/circuit_simulator.ts +90 -0
  263. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  264. package/src/public/avm/avm_context.ts +4 -4
  265. package/src/public/avm/avm_contract_call_result.ts +17 -5
  266. package/src/public/avm/avm_execution_environment.ts +7 -1
  267. package/src/public/avm/avm_gas.ts +23 -35
  268. package/src/public/avm/avm_machine_state.ts +5 -0
  269. package/src/public/avm/avm_memory_types.ts +19 -6
  270. package/src/public/avm/avm_simulator.ts +30 -29
  271. package/src/public/avm/avm_simulator_interface.ts +8 -0
  272. package/src/public/avm/errors.ts +1 -53
  273. package/src/public/avm/fixtures/avm_simulation_tester.ts +19 -18
  274. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +15 -14
  275. package/src/public/avm/fixtures/initializers.ts +103 -0
  276. package/src/public/avm/fixtures/utils.ts +150 -0
  277. package/src/public/avm/index.ts +0 -2
  278. package/src/public/avm/opcodes/accrued_substate.ts +62 -27
  279. package/src/public/avm/opcodes/addressing_mode.ts +57 -33
  280. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  281. package/src/public/avm/opcodes/bitwise.ts +33 -29
  282. package/src/public/avm/opcodes/comparators.ts +6 -3
  283. package/src/public/avm/opcodes/contract.ts +10 -7
  284. package/src/public/avm/opcodes/control_flow.ts +19 -10
  285. package/src/public/avm/opcodes/conversion.ts +23 -3
  286. package/src/public/avm/opcodes/ec_add.ts +5 -2
  287. package/src/public/avm/opcodes/environment_getters.ts +22 -15
  288. package/src/public/avm/opcodes/external_calls.ts +61 -28
  289. package/src/public/avm/opcodes/hashing.ts +28 -8
  290. package/src/public/avm/opcodes/instruction.ts +23 -15
  291. package/src/public/avm/opcodes/memory.ts +71 -32
  292. package/src/public/avm/opcodes/misc.ts +24 -16
  293. package/src/public/avm/opcodes/storage.ts +22 -6
  294. package/src/public/avm/revert_reason.ts +55 -0
  295. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  296. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  297. package/src/public/avm/serialization/instruction_serialization.ts +63 -34
  298. package/src/public/avm/test_utils.ts +23 -32
  299. package/src/public/db_interfaces.ts +61 -0
  300. package/src/{common → public}/debug_fn_name.ts +7 -7
  301. package/src/public/executor_metrics.ts +55 -6
  302. package/src/public/executor_metrics_interface.ts +14 -0
  303. package/src/public/fixtures/amm_test.ts +331 -0
  304. package/src/public/fixtures/bulk_test.ts +151 -0
  305. package/src/public/fixtures/index.ts +6 -0
  306. package/src/public/fixtures/minimal_public_tx.ts +59 -0
  307. package/src/public/fixtures/public_tx_simulation_tester.ts +154 -113
  308. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  309. package/src/public/fixtures/token_test.ts +140 -0
  310. package/src/public/fixtures/utils.ts +141 -68
  311. package/src/public/hinting_db_sources.ts +500 -0
  312. package/src/public/index.ts +4 -8
  313. package/src/public/public_db_sources.ts +179 -96
  314. package/src/public/public_processor/guarded_merkle_tree.ts +149 -0
  315. package/src/public/public_processor/public_processor.ts +179 -139
  316. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  317. package/src/public/public_tx_simulator/index.ts +2 -0
  318. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +106 -0
  319. package/src/public/public_tx_simulator/public_tx_context.ts +153 -193
  320. package/src/public/public_tx_simulator/public_tx_simulator.ts +167 -211
  321. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +72 -0
  322. package/src/public/side_effect_trace.ts +52 -303
  323. package/src/public/side_effect_trace_interface.ts +4 -58
  324. package/src/public/state_manager/index.ts +1 -0
  325. package/src/public/{avm/journal → state_manager}/nullifiers.ts +4 -4
  326. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  327. package/src/public/state_manager/state_manager.ts +512 -0
  328. package/src/public/test_executor_metrics.ts +395 -0
  329. package/src/public/utils.ts +5 -21
  330. package/src/server.ts +6 -3
  331. package/src/testing.ts +1 -0
  332. package/dest/common/db_interfaces.d.ts +0 -80
  333. package/dest/common/db_interfaces.d.ts.map +0 -1
  334. package/dest/common/db_interfaces.js +0 -1
  335. package/dest/common/debug_fn_name.d.ts +0 -5
  336. package/dest/common/debug_fn_name.d.ts.map +0 -1
  337. package/dest/common/debug_fn_name.js +0 -6
  338. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  339. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  340. package/dest/common/message_load_oracle_inputs.js +0 -15
  341. package/dest/private/acvm/oracle/index.d.ts +0 -14
  342. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  343. package/dest/private/acvm/oracle/index.js +0 -2
  344. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  345. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  346. package/dest/private/acvm/oracle/oracle.js +0 -263
  347. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  348. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  349. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  350. package/dest/private/execution_data_provider.d.ts +0 -261
  351. package/dest/private/execution_data_provider.d.ts.map +0 -1
  352. package/dest/private/execution_data_provider.js +0 -14
  353. package/dest/private/execution_note_cache.d.ts +0 -93
  354. package/dest/private/execution_note_cache.d.ts.map +0 -1
  355. package/dest/private/execution_note_cache.js +0 -180
  356. package/dest/private/hashed_values_cache.d.ts +0 -28
  357. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  358. package/dest/private/hashed_values_cache.js +0 -46
  359. package/dest/private/index.d.ts +0 -13
  360. package/dest/private/index.d.ts.map +0 -1
  361. package/dest/private/index.js +0 -12
  362. package/dest/private/pick_notes.d.ts +0 -85
  363. package/dest/private/pick_notes.d.ts.map +0 -1
  364. package/dest/private/pick_notes.js +0 -51
  365. package/dest/private/private_execution.d.ts +0 -25
  366. package/dest/private/private_execution.d.ts.map +0 -1
  367. package/dest/private/private_execution.js +0 -92
  368. package/dest/private/private_execution_oracle.d.ts +0 -215
  369. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  370. package/dest/private/private_execution_oracle.js +0 -382
  371. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  372. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  373. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  374. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  375. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  376. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  377. package/dest/private/providers/factory.d.ts +0 -12
  378. package/dest/private/providers/factory.d.ts.map +0 -1
  379. package/dest/private/providers/simulation_provider.d.ts +0 -19
  380. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  381. package/dest/private/providers/simulation_provider.js +0 -24
  382. package/dest/private/simulator.d.ts +0 -34
  383. package/dest/private/simulator.d.ts.map +0 -1
  384. package/dest/private/simulator.js +0 -76
  385. package/dest/private/unconstrained_execution.d.ts +0 -10
  386. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  387. package/dest/private/unconstrained_execution.js +0 -27
  388. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  389. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  390. package/dest/private/unconstrained_execution_oracle.js +0 -258
  391. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  392. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  393. package/dest/public/avm/bytecode_utils.js +0 -17
  394. package/dest/public/avm/fixtures/index.d.ts +0 -84
  395. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  396. package/dest/public/avm/fixtures/index.js +0 -175
  397. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  398. package/dest/public/avm/journal/index.d.ts +0 -2
  399. package/dest/public/avm/journal/index.d.ts.map +0 -1
  400. package/dest/public/avm/journal/index.js +0 -1
  401. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  402. package/dest/public/avm/journal/journal.js +0 -486
  403. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  404. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  405. package/dest/public/execution.d.ts +0 -108
  406. package/dest/public/execution.d.ts.map +0 -1
  407. package/dest/public/execution.js +0 -9
  408. package/dest/test/utils.d.ts +0 -13
  409. package/dest/test/utils.d.ts.map +0 -1
  410. package/dest/test/utils.js +0 -22
  411. package/src/common/db_interfaces.ts +0 -94
  412. package/src/common/message_load_oracle_inputs.ts +0 -15
  413. package/src/private/acvm/oracle/index.ts +0 -16
  414. package/src/private/acvm/oracle/oracle.ts +0 -455
  415. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  416. package/src/private/execution_data_provider.ts +0 -323
  417. package/src/private/execution_note_cache.ts +0 -217
  418. package/src/private/hashed_values_cache.ts +0 -55
  419. package/src/private/index.ts +0 -16
  420. package/src/private/pick_notes.ts +0 -141
  421. package/src/private/private_execution.ts +0 -151
  422. package/src/private/private_execution_oracle.ts +0 -614
  423. package/src/private/providers/acvm_wasm.ts +0 -63
  424. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  425. package/src/private/providers/simulation_provider.ts +0 -45
  426. package/src/private/simulator.ts +0 -147
  427. package/src/private/unconstrained_execution.ts +0 -50
  428. package/src/private/unconstrained_execution_oracle.ts +0 -373
  429. package/src/public/avm/bytecode_utils.ts +0 -17
  430. package/src/public/avm/fixtures/index.ts +0 -296
  431. package/src/public/avm/journal/index.ts +0 -1
  432. package/src/public/avm/journal/journal.ts +0 -742
  433. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  434. package/src/public/execution.ts +0 -140
  435. package/src/test/utils.ts +0 -36
  436. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -1,36 +1,39 @@
1
+ import { AVM_MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
1
2
  import type { Fr } from '@aztec/foundation/fields';
2
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
- import { Timer } from '@aztec/foundation/timer';
4
4
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
5
5
  import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
6
- import type { AvmProvingRequest, RevertCode } from '@aztec/stdlib/avm';
6
+ import {
7
+ AvmCircuitInputs,
8
+ AvmCircuitPublicInputs,
9
+ AvmExecutionHints,
10
+ type AvmProvingRequest,
11
+ AvmTxHint,
12
+ type RevertCode,
13
+ } from '@aztec/stdlib/avm';
7
14
  import { SimulationError } from '@aztec/stdlib/errors';
8
15
  import type { Gas, GasUsed } from '@aztec/stdlib/gas';
9
- import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
10
- import type { PublicCallRequest } from '@aztec/stdlib/kernel';
11
- import type { AvmSimulationStats } from '@aztec/stdlib/stats';
16
+ import { ProvingRequestType } from '@aztec/stdlib/proofs';
17
+ import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
12
18
  import {
13
19
  type GlobalVariables,
14
20
  NestedProcessReturnValues,
15
- PublicExecutionRequest,
21
+ PublicCallRequestWithCalldata,
16
22
  Tx,
17
23
  TxExecutionPhase,
18
24
  } from '@aztec/stdlib/tx';
19
- import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
20
-
21
- import { strict as assert } from 'assert';
22
25
 
23
- import { getPublicFunctionDebugName } from '../../common/debug_fn_name.js';
24
26
  import type { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
25
- import { type AvmPersistableStateManager, AvmSimulator } from '../avm/index.js';
26
- import { NullifierCollisionError } from '../avm/journal/nullifiers.js';
27
- import { ExecutorMetrics } from '../executor_metrics.js';
28
- import type { WorldStateDB } from '../public_db_sources.js';
27
+ import { AvmSimulator } from '../avm/index.js';
28
+ import { getPublicFunctionDebugName } from '../debug_fn_name.js';
29
+ import { HintingMerkleWriteOperations, HintingPublicContractsDB } from '../hinting_db_sources.js';
30
+ import { type PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
31
+ import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
29
32
  import { PublicTxContext } from './public_tx_context.js';
30
33
 
31
34
  export type ProcessedPhase = {
32
35
  phase: TxExecutionPhase;
33
- durationMs: number;
36
+ durationMs?: number;
34
37
  returnValues: NestedProcessReturnValues[];
35
38
  reverted: boolean;
36
39
  revertReason?: SimulationError;
@@ -47,25 +50,19 @@ export type PublicTxResult = {
47
50
  };
48
51
 
49
52
  export class PublicTxSimulator {
50
- metrics: ExecutorMetrics;
51
-
52
- private log: Logger;
53
+ protected log: Logger;
53
54
 
54
55
  constructor(
55
- private db: MerkleTreeReadOperations,
56
- private worldStateDB: WorldStateDB,
56
+ private merkleTree: MerkleTreeWriteOperations,
57
+ private contractsDB: PublicContractsDB,
57
58
  private globalVariables: GlobalVariables,
58
59
  private doMerkleOperations: boolean = false,
59
60
  private skipFeeEnforcement: boolean = false,
60
- telemetryClient: TelemetryClient = getTelemetryClient(),
61
+ private clientInitiatedSimulation: boolean = false,
61
62
  ) {
62
63
  this.log = createLogger(`simulator:public_tx_simulator`);
63
- this.metrics = new ExecutorMetrics(telemetryClient, 'PublicTxSimulator');
64
64
  }
65
65
 
66
- get tracer(): Tracer {
67
- return this.metrics.tracer;
68
- }
69
66
  /**
70
67
  * Simulate a transaction's public portion including all of its phases.
71
68
  * @param tx - The transaction to simulate.
@@ -73,74 +70,100 @@ export class PublicTxSimulator {
73
70
  */
74
71
  public async simulate(tx: Tx): Promise<PublicTxResult> {
75
72
  try {
76
- const startTime = process.hrtime.bigint();
73
+ const txHash = this.computeTxHash(tx);
74
+ this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}`, { txHash });
77
75
 
78
- const txHash = await tx.getTxHash();
79
- this.log.debug(`Simulating ${tx.enqueuedPublicFunctionCalls.length} public calls for tx ${txHash}`, { txHash });
76
+ // Create hinting DBs.
77
+ const hints = new AvmExecutionHints(this.globalVariables, AvmTxHint.fromTx(tx, this.globalVariables.gasFees));
78
+ const hintingMerkleTree = await HintingMerkleWriteOperations.create(this.merkleTree, hints);
79
+ const hintingTreesDB = new PublicTreesDB(hintingMerkleTree);
80
+ const hintingContractsDB = new HintingPublicContractsDB(this.contractsDB, hints);
80
81
 
81
82
  const context = await PublicTxContext.create(
82
- this.db,
83
- this.worldStateDB,
83
+ hintingTreesDB,
84
+ hintingContractsDB,
84
85
  tx,
85
86
  this.globalVariables,
86
87
  this.doMerkleOperations,
87
88
  );
88
89
 
89
- const nonRevertStart = process.hrtime.bigint();
90
- await this.insertNonRevertiblesFromPrivate(context);
91
- // add new contracts to the contracts db so that their functions may be found and called
92
- // TODO(#6464): Should we allow emitting contracts in the private setup phase?
93
- await this.worldStateDB.addNewNonRevertibleContracts(tx);
94
- const nonRevertEnd = process.hrtime.bigint();
95
- this.metrics.recordPrivateEffectsInsertion(Number(nonRevertEnd - nonRevertStart) / 1_000, 'non-revertible');
90
+ // This will throw if there is a nullifier collision.
91
+ // In that case the transaction will be thrown out.
92
+ await this.insertNonRevertiblesFromPrivate(context, tx);
96
93
 
97
94
  const processedPhases: ProcessedPhase[] = [];
98
95
  if (context.hasPhase(TxExecutionPhase.SETUP)) {
99
- const setupResult: ProcessedPhase = await this.simulateSetupPhase(context);
96
+ // This will throw if the setup phase reverts.
97
+ // In that case the transaction will be thrown out.
98
+ const setupResult = await this.simulatePhase(TxExecutionPhase.SETUP, context);
99
+ if (setupResult.reverted) {
100
+ throw new Error(
101
+ `Setup phase reverted! The transaction will be thrown out. ${setupResult.revertReason?.message}`,
102
+ );
103
+ }
100
104
  processedPhases.push(setupResult);
101
105
  }
102
106
 
103
- const revertStart = process.hrtime.bigint();
104
- const success = await this.insertRevertiblesFromPrivate(context);
105
- if (success) {
106
- // add new contracts to the contracts db so that their functions may be found and called
107
- await this.worldStateDB.addNewRevertibleContracts(tx);
108
- const revertEnd = process.hrtime.bigint();
109
- this.metrics.recordPrivateEffectsInsertion(Number(revertEnd - revertStart) / 1_000, 'revertible');
107
+ // The checkpoint we should go back to if anything from now on reverts.
108
+ await context.state.fork();
110
109
 
111
- // Only proceed with app logic if there was no revert during revertible insertion
110
+ try {
111
+ // This will throw if there is a nullifier collision.
112
+ await this.insertRevertiblesFromPrivate(context, tx);
113
+ // Only proceed with app logic if there was no revert during revertible insertion.
112
114
  if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
113
- const appLogicResult: ProcessedPhase = await this.simulateAppLogicPhase(context);
115
+ const appLogicResult = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
114
116
  processedPhases.push(appLogicResult);
117
+ if (appLogicResult.reverted) {
118
+ throw new Error(`App logic phase reverted! ${appLogicResult.revertReason?.message}`);
119
+ }
115
120
  }
116
- } else {
117
- this.log.debug(`Revertible insertions failed. Skipping app logic.`);
121
+ } catch (e) {
122
+ this.log.debug(String(e));
123
+ // We revert to the post-setup state.
124
+ await context.state.discardForkedState();
125
+ // But we also create a new fork so that the teardown phase can transparently
126
+ // commit or rollback at the end of teardown.
127
+ await context.state.fork();
118
128
  }
119
129
 
120
- if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
121
- const teardownResult: ProcessedPhase = await this.simulateTeardownPhase(context);
122
- processedPhases.push(teardownResult);
130
+ try {
131
+ if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
132
+ const teardownResult = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
133
+ processedPhases.push(teardownResult);
134
+ if (teardownResult.reverted) {
135
+ throw new Error(`Teardown phase reverted! ${teardownResult.revertReason?.message}`);
136
+ }
137
+ }
138
+
139
+ // We commit the forked state and we are done.
140
+ await context.state.mergeForkedState();
141
+ } catch (e) {
142
+ this.log.debug(String(e));
143
+ // We rollback to the post-setup state.
144
+ await context.state.discardForkedState();
123
145
  }
124
146
 
125
- await context.halt();
126
- await this.payFee(context);
147
+ context.halt();
127
148
 
128
- const endStateReference = await this.db.getStateReference();
149
+ if (context.getActualGasUsed().l2Gas > AVM_MAX_PROCESSABLE_L2_GAS) {
150
+ throw new Error(
151
+ `Transaction consumes ${context.getActualGasUsed().l2Gas} L2 gas, which exceeds the AVM maximum processable gas of ${AVM_MAX_PROCESSABLE_L2_GAS}`,
152
+ );
153
+ }
154
+ await this.payFee(context);
129
155
 
130
- const avmProvingRequest = await context.generateProvingRequest(endStateReference);
156
+ const publicInputs = await context.generateAvmCircuitPublicInputs();
157
+ const avmProvingRequest = PublicTxSimulator.generateProvingRequest(publicInputs, hints);
131
158
 
132
159
  const revertCode = context.getFinalRevertCode();
133
160
 
134
- if (!revertCode.isOK()) {
135
- await tx.filterRevertedLogs();
136
- }
137
161
  // Commit contracts from this TX to the block-level cache and clear tx cache
138
162
  // If the tx reverted, only commit non-revertible contracts
139
163
  // NOTE: You can't create contracts in public, so this is only relevant for private-created contracts
140
- this.worldStateDB.commitContractsForTx(/*onlyNonRevertibles=*/ !revertCode.isOK());
141
-
142
- const endTime = process.hrtime.bigint();
143
- this.log.debug(`Public TX simulator took ${Number(endTime - startTime) / 1_000_000} ms\n`);
164
+ // FIXME(fcarreiro): this should conceptually use the hinted contracts db.
165
+ // However things should work as they are now because the hinted db would still pick up the new contracts.
166
+ this.contractsDB.commitContractsForTx(/*onlyNonRevertibles=*/ !revertCode.isOK());
144
167
 
145
168
  return {
146
169
  avmProvingRequest,
@@ -157,97 +180,41 @@ export class PublicTxSimulator {
157
180
  } finally {
158
181
  // Make sure there are no new contracts in the tx-level cache.
159
182
  // They should either be committed to block-level cache or cleared.
160
- this.worldStateDB.clearContractsForTx();
183
+ // FIXME(fcarreiro): this should conceptually use the hinted contracts db.
184
+ // However things should work as they are now because the hinted db would still pick up the new contracts.
185
+ this.contractsDB.clearContractsForTx();
161
186
  }
162
187
  }
163
188
 
164
- /**
165
- * Simulate the setup phase of a transaction's public execution.
166
- * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
167
- * @returns The phase result.
168
- */
169
- private async simulateSetupPhase(context: PublicTxContext): Promise<ProcessedPhase> {
170
- return await this.simulatePhase(TxExecutionPhase.SETUP, context);
171
- }
172
-
173
- /**
174
- * Simulate the app logic phase of a transaction's public execution.
175
- * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
176
- * @returns The phase result.
177
- */
178
- private async simulateAppLogicPhase(context: PublicTxContext): Promise<ProcessedPhase> {
179
- assert(context.state.isForked(), 'App logic phase should operate with forked state.');
180
-
181
- const result = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
182
-
183
- if (result.reverted) {
184
- // Drop the currently active forked state manager and rollback to end of setup.
185
- await context.state.discardForkedState();
186
- } else {
187
- if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
188
- // Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
189
- await context.state.mergeForkedState();
190
- }
191
- }
192
-
193
- return result;
194
- }
195
-
196
- /**
197
- * Simulate the teardown phase of a transaction's public execution.
198
- * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
199
- * @returns The phase result.
200
- */
201
- private async simulateTeardownPhase(context: PublicTxContext): Promise<ProcessedPhase> {
202
- if (!context.state.isForked()) {
203
- // If state isn't forked (app logic reverted), fork now
204
- // so we can rollback to the end of setup if teardown reverts.
205
- await context.state.fork();
206
- }
207
-
208
- const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
209
-
210
- if (result.reverted) {
211
- // Drop the currently active forked state manager and rollback to end of setup.
212
- await context.state.discardForkedState();
213
- } else {
214
- // Merge state updates from teardown,
215
- await context.state.mergeForkedState();
216
- }
217
-
218
- return result;
189
+ protected computeTxHash(tx: Tx) {
190
+ return tx.getTxHash();
219
191
  }
220
192
 
221
193
  /**
222
- * Simulate a phase of a transaction's public execution.
223
- * @param phase - The current phase
194
+ * Simulate the setup phase of a transaction's public execution.
224
195
  * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
225
196
  * @returns The phase result.
226
197
  */
227
- private async simulatePhase(phase: TxExecutionPhase, context: PublicTxContext): Promise<ProcessedPhase> {
198
+ protected async simulatePhase(phase: TxExecutionPhase, context: PublicTxContext): Promise<ProcessedPhase> {
228
199
  const callRequests = context.getCallRequestsForPhase(phase);
229
- const executionRequests = context.getExecutionRequestsForPhase(phase);
230
200
 
231
201
  this.log.debug(`Processing phase ${TxExecutionPhase[phase]} for tx ${context.txHash}`, {
232
202
  txHash: context.txHash.toString(),
233
203
  phase: TxExecutionPhase[phase],
234
204
  callRequests: callRequests.length,
235
- executionRequests: executionRequests.length,
236
205
  });
237
206
 
238
207
  const returnValues: NestedProcessReturnValues[] = [];
239
208
  let reverted = false;
240
209
  let revertReason: SimulationError | undefined;
241
- const phaseTimer = new Timer();
242
- for (let i = callRequests.length - 1; i >= 0; i--) {
210
+ for (let i = 0; i < callRequests.length; i++) {
243
211
  if (reverted) {
244
212
  break;
245
213
  }
246
214
 
247
215
  const callRequest = callRequests[i];
248
- const executionRequest = executionRequests[i];
249
216
 
250
- const enqueuedCallResult = await this.simulateEnqueuedCall(phase, context, callRequest, executionRequest);
217
+ const enqueuedCallResult = await this.simulateEnqueuedCall(phase, context, callRequest);
251
218
 
252
219
  returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.output));
253
220
 
@@ -259,7 +226,6 @@ export class PublicTxSimulator {
259
226
 
260
227
  return {
261
228
  phase,
262
- durationMs: phaseTimer.ms(),
263
229
  returnValues,
264
230
  reverted,
265
231
  revertReason,
@@ -270,31 +236,23 @@ export class PublicTxSimulator {
270
236
  * Simulate an enqueued public call.
271
237
  * @param phase - The current phase of public execution
272
238
  * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
273
- * @param callRequest - The enqueued call to execute
274
- * @param executionRequest - The execution request (includes args)
239
+ * @param callRequest - The public function call request, including the calldata.
275
240
  * @returns The result of execution.
276
241
  */
277
- @trackSpan('PublicTxSimulator.simulateEnqueuedCall', (phase, context, _callRequest, executionRequest) => ({
278
- [Attributes.TX_HASH]: context.txHash.toString(),
279
- [Attributes.TARGET_ADDRESS]: executionRequest.callContext.contractAddress.toString(),
280
- [Attributes.SENDER_ADDRESS]: executionRequest.callContext.msgSender.toString(),
281
- [Attributes.SIMULATOR_PHASE]: TxExecutionPhase[phase].toString(),
282
- }))
283
- private async simulateEnqueuedCall(
242
+ protected async simulateEnqueuedCall(
284
243
  phase: TxExecutionPhase,
285
244
  context: PublicTxContext,
286
- callRequest: PublicCallRequest,
287
- executionRequest: PublicExecutionRequest,
245
+ callRequest: PublicCallRequestWithCalldata,
288
246
  ): Promise<AvmFinalizedCallResult> {
289
247
  const stateManager = context.state.getActiveStateManager();
290
- const address = executionRequest.callContext.contractAddress;
291
- const fnName = await getPublicFunctionDebugName(this.worldStateDB, address, executionRequest.args);
248
+ const contractAddress = callRequest.request.contractAddress;
249
+ const fnName = await getPublicFunctionDebugName(this.contractsDB, contractAddress, callRequest.calldata);
292
250
 
293
251
  const allocatedGas = context.getGasLeftAtPhase(phase);
294
252
 
295
253
  const result = await this.simulateEnqueuedCallInternal(
296
- context.state.getActiveStateManager(),
297
- executionRequest,
254
+ stateManager,
255
+ callRequest,
298
256
  allocatedGas,
299
257
  /*transactionFee=*/ context.getTransactionFee(phase),
300
258
  fnName,
@@ -306,11 +264,9 @@ export class PublicTxSimulator {
306
264
  `Simulated enqueued public call (${fnName}) consumed ${gasUsed.l2Gas} L2 gas ending with ${result.gasLeft.l2Gas} L2 gas left.`,
307
265
  );
308
266
 
309
- stateManager.traceEnqueuedCall(callRequest, executionRequest.args, result.reverted);
310
-
311
267
  if (result.reverted) {
312
- const culprit = `${executionRequest.callContext.contractAddress}:${executionRequest.callContext.functionSelector}`;
313
- context.revert(phase, result.revertReason, culprit); // throws if in setup (non-revertible) phase
268
+ const culprit = `${contractAddress}:${callRequest.functionSelector}`;
269
+ context.revert(phase, result.revertReason, culprit);
314
270
  }
315
271
 
316
272
  return result;
@@ -324,32 +280,24 @@ export class PublicTxSimulator {
324
280
  * while still simulating phases and generating a proving request.
325
281
  *
326
282
  * @param stateManager - The state manager for AvmSimulation
327
- * @param context - The context of the currently executing public transaction portion
328
- * @param executionRequest - The execution request (includes args)
283
+ * @param callRequest - The public function call request, including the calldata.
329
284
  * @param allocatedGas - The gas allocated to the enqueued call
330
285
  * @param fnName - The name of the function
331
286
  * @returns The result of execution.
332
287
  */
333
- @trackSpan(
334
- 'PublicTxSimulator.simulateEnqueuedCallInternal',
335
- (_stateManager, _executionRequest, _allocatedGas, _transactionFee, fnName) => ({
336
- [Attributes.APP_CIRCUIT_NAME]: fnName,
337
- }),
338
- )
339
- private async simulateEnqueuedCallInternal(
340
- stateManager: AvmPersistableStateManager,
341
- executionRequest: PublicExecutionRequest,
288
+ protected async simulateEnqueuedCallInternal(
289
+ stateManager: PublicPersistableStateManager,
290
+ { request, calldata }: PublicCallRequestWithCalldata,
342
291
  allocatedGas: Gas,
343
292
  transactionFee: Fr,
344
293
  fnName: string,
345
294
  ): Promise<AvmFinalizedCallResult> {
346
- const address = executionRequest.callContext.contractAddress;
347
- const sender = executionRequest.callContext.msgSender;
295
+ const address = request.contractAddress;
296
+ const sender = request.msgSender;
348
297
 
349
298
  this.log.debug(
350
299
  `Executing enqueued public call to external function ${fnName}@${address} with ${allocatedGas.l2Gas} allocated L2 gas.`,
351
300
  );
352
- const timer = new Timer();
353
301
 
354
302
  const simulator = await AvmSimulator.create(
355
303
  stateManager,
@@ -357,79 +305,64 @@ export class PublicTxSimulator {
357
305
  sender,
358
306
  transactionFee,
359
307
  this.globalVariables,
360
- executionRequest.callContext.isStaticCall,
361
- executionRequest.args,
308
+ request.isStaticCall,
309
+ calldata,
362
310
  allocatedGas,
311
+ this.clientInitiatedSimulation,
363
312
  );
364
313
  const avmCallResult = await simulator.execute();
365
- const result = avmCallResult.finalize();
366
-
367
- this.log.verbose(
368
- result.reverted
369
- ? `Simulation of enqueued public call ${fnName} reverted with reason ${result.revertReason}.`
370
- : `Simulation of enqueued public call ${fnName} completed successfully.`,
371
- {
372
- eventName: 'avm-simulation',
373
- appCircuitName: fnName,
374
- duration: timer.ms(),
375
- } satisfies AvmSimulationStats,
376
- );
377
-
378
- if (result.reverted) {
379
- this.metrics.recordFunctionSimulationFailure();
380
- } else {
381
- this.metrics.recordFunctionSimulation(timer.ms(), allocatedGas.sub(result.gasLeft).l2Gas, fnName);
382
- }
383
-
384
- return result;
314
+ return avmCallResult.finalize();
385
315
  }
386
316
 
387
317
  /**
388
318
  * Insert the non-revertible accumulated data from private into the public state.
389
319
  */
390
- public async insertNonRevertiblesFromPrivate(context: PublicTxContext) {
320
+ protected async insertNonRevertiblesFromPrivate(context: PublicTxContext, tx: Tx) {
391
321
  const stateManager = context.state.getActiveStateManager();
392
- try {
393
- await stateManager.writeSiloedNullifiersFromPrivate(context.nonRevertibleAccumulatedDataFromPrivate.nullifiers);
394
- } catch (e) {
395
- if (e instanceof NullifierCollisionError) {
396
- throw new NullifierCollisionError(
397
- `Nullifier collision encountered when inserting non-revertible nullifiers from private.\nDetails: ${e.message}\nStack:${e.stack}`,
398
- );
399
- }
322
+
323
+ for (const siloedNullifier of context.nonRevertibleAccumulatedDataFromPrivate.nullifiers.filter(
324
+ n => !n.isEmpty(),
325
+ )) {
326
+ await stateManager.writeSiloedNullifier(siloedNullifier);
400
327
  }
401
328
  for (const noteHash of context.nonRevertibleAccumulatedDataFromPrivate.noteHashes) {
402
329
  if (!noteHash.isEmpty()) {
403
330
  await stateManager.writeUniqueNoteHash(noteHash);
404
331
  }
405
332
  }
333
+ for (const l2ToL1Message of context.nonRevertibleAccumulatedDataFromPrivate.l2ToL1Msgs) {
334
+ if (!l2ToL1Message.isEmpty()) {
335
+ stateManager.writeScopedL2ToL1Message(l2ToL1Message);
336
+ }
337
+ }
338
+
339
+ // add new contracts to the contracts db so that their functions may be found and called
340
+ // TODO(#6464): Should we allow emitting contracts in the private setup phase?
341
+ // FIXME(fcarreiro): this should conceptually use the hinted contracts db.
342
+ // However things should work as they are now because the hinted db would still pick up the new contracts.
343
+ await this.contractsDB.addNewNonRevertibleContracts(tx);
406
344
  }
407
345
 
408
346
  /**
409
347
  * Insert the revertible accumulated data from private into the public state.
410
348
  * Start by forking state so we can rollback to the end of setup if app logic or teardown reverts.
411
349
  */
412
- public async insertRevertiblesFromPrivate(context: PublicTxContext): /*success=*/ Promise<boolean> {
413
- // Fork the state manager so we can rollback to end of setup if app logic reverts.
414
- await context.state.fork();
350
+ protected async insertRevertiblesFromPrivate(context: PublicTxContext, tx: Tx): /*success=*/ Promise<boolean> {
415
351
  const stateManager = context.state.getActiveStateManager();
352
+
416
353
  try {
417
- await stateManager.writeSiloedNullifiersFromPrivate(context.revertibleAccumulatedDataFromPrivate.nullifiers);
418
- } catch (e) {
419
- if (e instanceof NullifierCollisionError) {
420
- // Instead of throwing, revert the app_logic phase
421
- context.revert(
422
- TxExecutionPhase.APP_LOGIC,
423
- new SimulationError(
424
- `Nullifier collision encountered when inserting revertible nullifiers from private\nDetails: ${e.message}\nError stack: ${e.stack}`,
425
- [],
426
- ),
427
- /*culprit=*/ 'insertRevertiblesFromPrivate',
428
- );
429
- return /*success=*/ false;
430
- } else {
431
- throw e;
354
+ for (const siloedNullifier of context.revertibleAccumulatedDataFromPrivate.nullifiers.filter(n => !n.isEmpty())) {
355
+ await stateManager.writeSiloedNullifier(siloedNullifier);
432
356
  }
357
+ } catch (e) {
358
+ context.revert(
359
+ TxExecutionPhase.APP_LOGIC,
360
+ new SimulationError(
361
+ `Nullifier collision encountered when inserting revertible nullifiers from private.\nDetails: ${String(e)}`,
362
+ [],
363
+ ),
364
+ );
365
+ throw e;
433
366
  }
434
367
  for (const noteHash of context.revertibleAccumulatedDataFromPrivate.noteHashes) {
435
368
  if (!noteHash.isEmpty()) {
@@ -437,6 +370,16 @@ export class PublicTxSimulator {
437
370
  await stateManager.writeSiloedNoteHash(noteHash);
438
371
  }
439
372
  }
373
+ for (const l2ToL1Message of context.revertibleAccumulatedDataFromPrivate.l2ToL1Msgs) {
374
+ if (!l2ToL1Message.isEmpty()) {
375
+ stateManager.writeScopedL2ToL1Message(l2ToL1Message);
376
+ }
377
+ }
378
+ // add new contracts to the contracts db so that their functions may be found and called
379
+ // FIXME(fcarreiro): this should conceptually use the hinted contracts db.
380
+ // However things should work as they are now because the hinted db would still pick up the new contracts.
381
+ await this.contractsDB.addNewRevertibleContracts(tx);
382
+
440
383
  return /*success=*/ true;
441
384
  }
442
385
 
@@ -471,4 +414,17 @@ export class PublicTxSimulator {
471
414
  const updatedBalance = currentBalance.sub(txFee);
472
415
  await stateManager.writeStorage(feeJuiceAddress, balanceSlot, updatedBalance, true);
473
416
  }
417
+
418
+ /**
419
+ * Generate the proving request for the AVM circuit.
420
+ */
421
+ private static generateProvingRequest(
422
+ publicInputs: AvmCircuitPublicInputs,
423
+ hints: AvmExecutionHints,
424
+ ): AvmProvingRequest {
425
+ return {
426
+ type: ProvingRequestType.PUBLIC_VM,
427
+ inputs: new AvmCircuitInputs(hints, publicInputs),
428
+ };
429
+ }
474
430
  }
@@ -0,0 +1,72 @@
1
+ import type { Fr } from '@aztec/foundation/fields';
2
+ import type { Gas } from '@aztec/stdlib/gas';
3
+ import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
4
+ import { type GlobalVariables, PublicCallRequestWithCalldata, TxExecutionPhase } from '@aztec/stdlib/tx';
5
+ import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
6
+
7
+ import type { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
8
+ import { ExecutorMetrics } from '../executor_metrics.js';
9
+ import type { PublicContractsDB } from '../public_db_sources.js';
10
+ import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
11
+ import { MeasuredPublicTxSimulator } from './measured_public_tx_simulator.js';
12
+ import { PublicTxContext } from './public_tx_context.js';
13
+
14
+ /**
15
+ * A public tx simulator that tracks runtime/production metrics with telemetry.
16
+ */
17
+ export class TelemetryPublicTxSimulator extends MeasuredPublicTxSimulator {
18
+ /* tracer needed by trackSpans */
19
+ public readonly tracer: Tracer;
20
+
21
+ constructor(
22
+ merkleTree: MerkleTreeWriteOperations,
23
+ contractsDB: PublicContractsDB,
24
+ globalVariables: GlobalVariables,
25
+ doMerkleOperations: boolean = false,
26
+ skipFeeEnforcement: boolean = false,
27
+ clientInitiatedSimulation: boolean = false,
28
+ telemetryClient: TelemetryClient = getTelemetryClient(),
29
+ ) {
30
+ const metrics = new ExecutorMetrics(telemetryClient, 'PublicTxSimulator');
31
+ super(
32
+ merkleTree,
33
+ contractsDB,
34
+ globalVariables,
35
+ doMerkleOperations,
36
+ skipFeeEnforcement,
37
+ clientInitiatedSimulation,
38
+ metrics,
39
+ );
40
+ this.tracer = metrics.tracer;
41
+ }
42
+
43
+ @trackSpan('PublicTxSimulator.simulateEnqueuedCall', (phase, context, callRequest) => ({
44
+ [Attributes.TX_HASH]: context.txHash.toString(),
45
+ [Attributes.TARGET_ADDRESS]: callRequest.request.contractAddress.toString(),
46
+ [Attributes.SENDER_ADDRESS]: callRequest.request.msgSender.toString(),
47
+ [Attributes.SIMULATOR_PHASE]: TxExecutionPhase[phase].toString(),
48
+ }))
49
+ protected override async simulateEnqueuedCall(
50
+ phase: TxExecutionPhase,
51
+ context: PublicTxContext,
52
+ callRequest: PublicCallRequestWithCalldata,
53
+ ): Promise<AvmFinalizedCallResult> {
54
+ return await super.simulateEnqueuedCall(phase, context, callRequest);
55
+ }
56
+
57
+ @trackSpan(
58
+ 'PublicTxSimulator.simulateEnqueuedCallInternal',
59
+ (_stateManager, _callRequest, _allocatedGas, _transactionFee, fnName) => ({
60
+ [Attributes.APP_CIRCUIT_NAME]: fnName,
61
+ }),
62
+ )
63
+ protected override async simulateEnqueuedCallInternal(
64
+ stateManager: PublicPersistableStateManager,
65
+ callRequest: PublicCallRequestWithCalldata,
66
+ allocatedGas: Gas,
67
+ transactionFee: Fr,
68
+ fnName: string,
69
+ ): Promise<AvmFinalizedCallResult> {
70
+ return await super.simulateEnqueuedCallInternal(stateManager, callRequest, allocatedGas, transactionFee, fnName);
71
+ }
72
+ }