@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.017a351

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 (533) hide show
  1. package/README.md +12 -4
  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 +6 -9
  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 +15 -7
  14. package/dest/private/acvm/acvm.d.ts.map +1 -1
  15. package/dest/private/acvm/acvm.js +14 -19
  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 +19 -20
  19. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  20. package/dest/private/acvm/deserialize.js +32 -24
  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 +21 -4
  25. package/dest/private/acvm/serialize.d.ts.map +1 -1
  26. package/dest/private/acvm/serialize.js +54 -1
  27. package/dest/private/acvm_native.d.ts +41 -0
  28. package/dest/private/acvm_native.d.ts.map +1 -0
  29. package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
  30. package/dest/private/acvm_wasm.d.ts +16 -0
  31. package/dest/private/acvm_wasm.d.ts.map +1 -0
  32. package/dest/private/acvm_wasm.js +67 -0
  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 +109 -0
  37. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  38. package/dest/private/circuit_recording/circuit_recorder.js +212 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -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 +10 -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} +8 -5
  54. package/dest/public/avm/avm_context.d.ts +8 -8
  55. package/dest/public/avm/avm_context.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
  57. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  58. package/dest/public/avm/avm_contract_call_result.js +12 -8
  59. package/dest/public/avm/avm_execution_environment.d.ts +9 -6
  60. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  61. package/dest/public/avm/avm_execution_environment.js +5 -3
  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 +29 -37
  65. package/dest/public/avm/avm_machine_state.d.ts +9 -6
  66. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  67. package/dest/public/avm/avm_machine_state.js +5 -2
  68. package/dest/public/avm/avm_memory_types.d.ts +100 -89
  69. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  70. package/dest/public/avm/avm_memory_types.js +21 -7
  71. package/dest/public/avm/avm_simulator.d.ts +8 -7
  72. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  73. package/dest/public/avm/avm_simulator.js +33 -43
  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/calldata.d.ts +51 -0
  78. package/dest/public/avm/calldata.d.ts.map +1 -0
  79. package/dest/public/avm/calldata.js +64 -0
  80. package/dest/public/avm/errors.d.ts +11 -29
  81. package/dest/public/avm/errors.d.ts.map +1 -1
  82. package/dest/public/avm/errors.js +19 -57
  83. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +2 -0
  84. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
  85. package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
  86. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  87. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  88. package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
  89. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +9 -6
  90. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  91. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +53 -15
  92. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  93. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  94. package/dest/public/avm/fixtures/initializers.js +45 -0
  95. package/dest/public/avm/fixtures/utils.d.ts +39 -0
  96. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  97. package/dest/public/avm/fixtures/utils.js +99 -0
  98. package/dest/public/avm/index.d.ts +1 -3
  99. package/dest/public/avm/index.d.ts.map +1 -1
  100. package/dest/public/avm/index.js +0 -2
  101. package/dest/public/avm/opcodes/accrued_substate.d.ts +18 -19
  102. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/accrued_substate.js +61 -59
  104. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  105. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  107. package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
  108. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/arithmetic.js +27 -3
  110. package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
  111. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/bitwise.js +22 -29
  113. package/dest/public/avm/opcodes/comparators.d.ts +1 -1
  114. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/comparators.js +3 -3
  116. package/dest/public/avm/opcodes/contract.d.ts +5 -5
  117. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/contract.js +16 -13
  119. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  120. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/control_flow.js +13 -11
  122. package/dest/public/avm/opcodes/conversion.d.ts +4 -3
  123. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/conversion.js +270 -6
  125. package/dest/public/avm/opcodes/ec_add.d.ts +3 -5
  126. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/ec_add.js +28 -33
  128. package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
  129. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/environment_getters.js +20 -22
  131. package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
  132. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/external_calls.js +52 -46
  134. package/dest/public/avm/opcodes/hashing.d.ts +7 -7
  135. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  136. package/dest/public/avm/opcodes/hashing.js +24 -19
  137. package/dest/public/avm/opcodes/index.d.ts +1 -1
  138. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  139. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  140. package/dest/public/avm/opcodes/instruction.js +23 -19
  141. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  142. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  143. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  144. package/dest/public/avm/opcodes/memory.d.ts +15 -15
  145. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  146. package/dest/public/avm/opcodes/memory.js +52 -48
  147. package/dest/public/avm/opcodes/misc.d.ts +4 -3
  148. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  149. package/dest/public/avm/opcodes/misc.js +42 -17
  150. package/dest/public/avm/opcodes/storage.d.ts +14 -13
  151. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  152. package/dest/public/avm/opcodes/storage.js +39 -27
  153. package/dest/public/avm/revert_reason.d.ts +18 -0
  154. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  155. package/dest/public/avm/revert_reason.js +39 -0
  156. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  157. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  158. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  159. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  160. package/dest/public/avm/serialization/bytecode_serialization.js +81 -77
  161. package/dest/public/avm/serialization/instruction_serialization.d.ts +15 -6
  162. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  163. package/dest/public/avm/serialization/instruction_serialization.js +71 -36
  164. package/dest/public/avm/test_utils.d.ts +12 -15
  165. package/dest/public/avm/test_utils.d.ts.map +1 -1
  166. package/dest/public/avm/test_utils.js +17 -25
  167. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  168. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  169. package/dest/public/contracts_db_checkpoint.js +30 -0
  170. package/dest/public/db_interfaces.d.ts +68 -0
  171. package/dest/public/db_interfaces.d.ts.map +1 -0
  172. package/dest/public/db_interfaces.js +3 -0
  173. package/dest/public/debug_fn_name.d.ts +18 -0
  174. package/dest/public/debug_fn_name.d.ts.map +1 -0
  175. package/dest/public/debug_fn_name.js +37 -0
  176. package/dest/public/executor_metrics.d.ts +12 -4
  177. package/dest/public/executor_metrics.d.ts.map +1 -1
  178. package/dest/public/executor_metrics.js +33 -23
  179. package/dest/public/executor_metrics_interface.d.ts +10 -0
  180. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  181. package/dest/public/executor_metrics_interface.js +1 -0
  182. package/dest/public/fixtures/amm_test.d.ts +10 -0
  183. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  184. package/dest/public/fixtures/amm_test.js +213 -0
  185. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  186. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  187. package/dest/public/fixtures/bulk_test.js +289 -0
  188. package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
  189. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  190. package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
  191. package/dest/public/fixtures/custom_bytecode_tests.d.ts +14 -0
  192. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  193. package/dest/public/fixtures/custom_bytecode_tests.js +234 -0
  194. package/dest/public/fixtures/index.d.ts +10 -1
  195. package/dest/public/fixtures/index.d.ts.map +1 -1
  196. package/dest/public/fixtures/index.js +9 -0
  197. package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
  198. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  199. package/dest/public/fixtures/minimal_public_tx.js +19 -0
  200. package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
  201. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  202. package/dest/public/fixtures/opcode_spammer.js +1645 -0
  203. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +56 -15
  204. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  205. package/dest/public/fixtures/public_tx_simulation_tester.js +164 -71
  206. package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
  207. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  208. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  209. package/dest/public/fixtures/token_test.d.ts +12 -0
  210. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  211. package/dest/public/fixtures/token_test.js +96 -0
  212. package/dest/public/fixtures/utils.d.ts +18 -5
  213. package/dest/public/fixtures/utils.d.ts.map +1 -1
  214. package/dest/public/fixtures/utils.js +112 -70
  215. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
  216. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  217. package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
  218. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  219. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  220. package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
  221. package/dest/public/hinting_db_sources.d.ts +81 -0
  222. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  223. package/dest/public/hinting_db_sources.js +359 -0
  224. package/dest/public/index.d.ts +6 -9
  225. package/dest/public/index.d.ts.map +1 -1
  226. package/dest/public/index.js +4 -7
  227. package/dest/public/public_db_sources.d.ts +58 -104
  228. package/dest/public/public_db_sources.d.ts.map +1 -1
  229. package/dest/public/public_db_sources.js +227 -194
  230. package/dest/public/public_errors.d.ts +12 -0
  231. package/dest/public/public_errors.d.ts.map +1 -0
  232. package/dest/public/public_errors.js +13 -0
  233. package/dest/public/public_processor/guarded_merkle_tree.d.ts +52 -0
  234. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  235. package/dest/public/public_processor/guarded_merkle_tree.js +116 -0
  236. package/dest/public/public_processor/public_processor.d.ts +32 -39
  237. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  238. package/dest/public/public_processor/public_processor.js +642 -167
  239. package/dest/public/public_processor/public_processor_metrics.d.ts +7 -4
  240. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  241. package/dest/public/public_processor/public_processor_metrics.js +37 -46
  242. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
  243. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  244. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +99 -0
  245. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
  246. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  247. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +126 -0
  248. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  249. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  250. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  251. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  252. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  253. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +167 -0
  254. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
  255. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  256. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  257. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  258. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  259. package/dest/public/public_tx_simulator/factories.js +28 -0
  260. package/dest/public/public_tx_simulator/index.d.ts +8 -0
  261. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  262. package/dest/public/public_tx_simulator/index.js +5 -0
  263. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  264. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  265. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  266. package/dest/public/public_tx_simulator/public_tx_context.d.ts +31 -33
  267. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  268. package/dest/public/public_tx_simulator/public_tx_context.js +83 -105
  269. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -58
  270. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  271. package/dest/public/public_tx_simulator/public_tx_simulator.js +225 -207
  272. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
  273. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  274. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  275. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  276. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  277. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +415 -0
  278. package/dest/public/side_effect_errors.d.ts +42 -2
  279. package/dest/public/side_effect_errors.d.ts.map +1 -1
  280. package/dest/public/side_effect_errors.js +70 -1
  281. package/dest/public/side_effect_trace.d.ts +24 -69
  282. package/dest/public/side_effect_trace.d.ts.map +1 -1
  283. package/dest/public/side_effect_trace.js +74 -124
  284. package/dest/public/side_effect_trace_interface.d.ts +13 -25
  285. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  286. package/dest/public/state_manager/index.d.ts +2 -0
  287. package/dest/public/state_manager/index.d.ts.map +1 -0
  288. package/dest/public/state_manager/index.js +1 -0
  289. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
  290. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  291. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  292. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
  293. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  294. package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
  295. package/dest/public/state_manager/state_manager.d.ts +170 -0
  296. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  297. package/dest/public/state_manager/state_manager.js +402 -0
  298. package/dest/public/test_executor_metrics.d.ts +61 -0
  299. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  300. package/dest/public/test_executor_metrics.js +329 -0
  301. package/dest/public/unique_class_ids.d.ts +1 -1
  302. package/dest/public/unique_class_ids.d.ts.map +1 -1
  303. package/dest/public/utils.d.ts +3 -5
  304. package/dest/public/utils.d.ts.map +1 -1
  305. package/dest/public/utils.js +4 -21
  306. package/dest/server.d.ts +7 -4
  307. package/dest/server.d.ts.map +1 -1
  308. package/dest/server.js +5 -2
  309. package/dest/testing.d.ts +2 -0
  310. package/dest/testing.d.ts.map +1 -0
  311. package/dest/testing.js +1 -0
  312. package/package.json +39 -33
  313. package/src/client.ts +5 -3
  314. package/src/common/errors.ts +80 -45
  315. package/src/common/index.ts +0 -1
  316. package/src/private/acvm/acvm.ts +21 -35
  317. package/src/private/acvm/acvm_types.ts +1 -1
  318. package/src/private/acvm/deserialize.ts +36 -30
  319. package/src/private/acvm/index.ts +0 -1
  320. package/src/private/acvm/serialize.ts +64 -1
  321. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +57 -28
  322. package/src/private/acvm_wasm.ts +79 -0
  323. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  324. package/src/private/circuit_recording/circuit_recorder.ts +263 -0
  325. package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
  326. package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -0
  327. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  328. package/src/private/circuit_simulator.ts +90 -0
  329. package/src/private/{providers/factory.ts → factory.ts} +13 -10
  330. package/src/public/avm/avm_context.ts +6 -6
  331. package/src/public/avm/avm_contract_call_result.ts +23 -9
  332. package/src/public/avm/avm_execution_environment.ts +17 -5
  333. package/src/public/avm/avm_gas.ts +27 -39
  334. package/src/public/avm/avm_machine_state.ts +12 -6
  335. package/src/public/avm/avm_memory_types.ts +24 -7
  336. package/src/public/avm/avm_simulator.ts +58 -63
  337. package/src/public/avm/avm_simulator_interface.ts +8 -0
  338. package/src/public/avm/calldata.ts +101 -0
  339. package/src/public/avm/errors.ts +20 -75
  340. package/src/public/avm/fixtures/account_proof.json +553 -0
  341. package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
  342. package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
  343. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +66 -13
  344. package/src/public/avm/fixtures/initializers.ts +103 -0
  345. package/src/public/avm/fixtures/utils.ts +154 -0
  346. package/src/public/avm/index.ts +0 -2
  347. package/src/public/avm/opcodes/accrued_substate.ts +84 -52
  348. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  349. package/src/public/avm/opcodes/arithmetic.ts +37 -3
  350. package/src/public/avm/opcodes/bitwise.ts +33 -29
  351. package/src/public/avm/opcodes/comparators.ts +6 -3
  352. package/src/public/avm/opcodes/contract.ts +15 -11
  353. package/src/public/avm/opcodes/control_flow.ts +19 -10
  354. package/src/public/avm/opcodes/conversion.ts +29 -5
  355. package/src/public/avm/opcodes/ec_add.ts +30 -37
  356. package/src/public/avm/opcodes/environment_getters.ts +28 -23
  357. package/src/public/avm/opcodes/external_calls.ts +70 -36
  358. package/src/public/avm/opcodes/hashing.ts +39 -13
  359. package/src/public/avm/opcodes/instruction.ts +31 -21
  360. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  361. package/src/public/avm/opcodes/memory.ts +81 -42
  362. package/src/public/avm/opcodes/misc.ts +61 -19
  363. package/src/public/avm/opcodes/storage.ts +47 -23
  364. package/src/public/avm/revert_reason.ts +58 -0
  365. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  366. package/src/public/avm/serialization/bytecode_serialization.ts +90 -81
  367. package/src/public/avm/serialization/instruction_serialization.ts +76 -35
  368. package/src/public/avm/test_utils.ts +25 -42
  369. package/src/public/contracts_db_checkpoint.ts +41 -0
  370. package/src/public/db_interfaces.ts +76 -0
  371. package/src/public/debug_fn_name.ts +52 -0
  372. package/src/public/executor_metrics.ts +49 -23
  373. package/src/public/executor_metrics_interface.ts +15 -0
  374. package/src/public/fixtures/amm_test.ts +331 -0
  375. package/src/public/fixtures/bulk_test.ts +194 -0
  376. package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
  377. package/src/public/fixtures/custom_bytecode_tests.ts +366 -0
  378. package/src/public/fixtures/index.ts +13 -0
  379. package/src/public/fixtures/minimal_public_tx.ts +26 -0
  380. package/src/public/fixtures/opcode_spammer.ts +1713 -0
  381. package/src/public/fixtures/public_tx_simulation_tester.ts +264 -114
  382. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
  383. package/src/public/fixtures/token_test.ts +148 -0
  384. package/src/public/fixtures/utils.ts +156 -80
  385. package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
  386. package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
  387. package/src/public/hinting_db_sources.ts +614 -0
  388. package/src/public/index.ts +11 -8
  389. package/src/public/public_db_sources.ts +295 -258
  390. package/src/public/public_errors.ts +14 -0
  391. package/src/public/public_processor/guarded_merkle_tree.ts +161 -0
  392. package/src/public/public_processor/public_processor.ts +354 -227
  393. package/src/public/public_processor/public_processor_metrics.ts +30 -46
  394. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +125 -0
  395. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +201 -0
  396. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
  397. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +232 -0
  398. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
  399. package/src/public/public_tx_simulator/factories.ts +44 -0
  400. package/src/public/public_tx_simulator/index.ts +7 -0
  401. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  402. package/src/public/public_tx_simulator/public_tx_context.ts +187 -209
  403. package/src/public/public_tx_simulator/public_tx_simulator.ts +320 -263
  404. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
  405. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  406. package/src/public/side_effect_errors.ts +91 -1
  407. package/src/public/side_effect_trace.ts +99 -322
  408. package/src/public/side_effect_trace_interface.ts +11 -59
  409. package/src/public/state_manager/index.ts +1 -0
  410. package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
  411. package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
  412. package/src/public/state_manager/state_manager.ts +569 -0
  413. package/src/public/test_executor_metrics.ts +421 -0
  414. package/src/public/utils.ts +5 -21
  415. package/src/server.ts +6 -3
  416. package/src/testing.ts +1 -0
  417. package/dest/common/db_interfaces.d.ts +0 -80
  418. package/dest/common/db_interfaces.d.ts.map +0 -1
  419. package/dest/common/db_interfaces.js +0 -1
  420. package/dest/common/debug_fn_name.d.ts +0 -5
  421. package/dest/common/debug_fn_name.d.ts.map +0 -1
  422. package/dest/common/debug_fn_name.js +0 -6
  423. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  424. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  425. package/dest/common/message_load_oracle_inputs.js +0 -15
  426. package/dest/private/acvm/oracle/index.d.ts +0 -14
  427. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  428. package/dest/private/acvm/oracle/index.js +0 -2
  429. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  430. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  431. package/dest/private/acvm/oracle/oracle.js +0 -263
  432. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  433. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  434. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  435. package/dest/private/execution_data_provider.d.ts +0 -261
  436. package/dest/private/execution_data_provider.d.ts.map +0 -1
  437. package/dest/private/execution_data_provider.js +0 -14
  438. package/dest/private/execution_note_cache.d.ts +0 -93
  439. package/dest/private/execution_note_cache.d.ts.map +0 -1
  440. package/dest/private/execution_note_cache.js +0 -180
  441. package/dest/private/hashed_values_cache.d.ts +0 -28
  442. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  443. package/dest/private/hashed_values_cache.js +0 -46
  444. package/dest/private/index.d.ts +0 -13
  445. package/dest/private/index.d.ts.map +0 -1
  446. package/dest/private/index.js +0 -12
  447. package/dest/private/pick_notes.d.ts +0 -85
  448. package/dest/private/pick_notes.d.ts.map +0 -1
  449. package/dest/private/pick_notes.js +0 -51
  450. package/dest/private/private_execution.d.ts +0 -25
  451. package/dest/private/private_execution.d.ts.map +0 -1
  452. package/dest/private/private_execution.js +0 -92
  453. package/dest/private/private_execution_oracle.d.ts +0 -215
  454. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  455. package/dest/private/private_execution_oracle.js +0 -382
  456. package/dest/private/providers/acvm_native.d.ts +0 -40
  457. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  458. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  459. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  460. package/dest/private/providers/acvm_wasm.js +0 -62
  461. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  462. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  463. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  464. package/dest/private/providers/factory.d.ts +0 -12
  465. package/dest/private/providers/factory.d.ts.map +0 -1
  466. package/dest/private/providers/simulation_provider.d.ts +0 -19
  467. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  468. package/dest/private/providers/simulation_provider.js +0 -24
  469. package/dest/private/simulator.d.ts +0 -34
  470. package/dest/private/simulator.d.ts.map +0 -1
  471. package/dest/private/simulator.js +0 -76
  472. package/dest/private/unconstrained_execution.d.ts +0 -10
  473. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  474. package/dest/private/unconstrained_execution.js +0 -27
  475. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  476. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  477. package/dest/private/unconstrained_execution_oracle.js +0 -258
  478. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  479. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  480. package/dest/public/avm/bytecode_utils.js +0 -17
  481. package/dest/public/avm/fixtures/index.d.ts +0 -84
  482. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  483. package/dest/public/avm/fixtures/index.js +0 -175
  484. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  485. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  486. package/dest/public/avm/journal/index.d.ts +0 -2
  487. package/dest/public/avm/journal/index.d.ts.map +0 -1
  488. package/dest/public/avm/journal/index.js +0 -1
  489. package/dest/public/avm/journal/journal.d.ts +0 -209
  490. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  491. package/dest/public/avm/journal/journal.js +0 -486
  492. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  493. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  494. package/dest/public/bytecode_errors.d.ts +0 -4
  495. package/dest/public/bytecode_errors.d.ts.map +0 -1
  496. package/dest/public/bytecode_errors.js +0 -6
  497. package/dest/public/execution.d.ts +0 -108
  498. package/dest/public/execution.d.ts.map +0 -1
  499. package/dest/public/execution.js +0 -9
  500. package/dest/public/tx_contract_cache.d.ts +0 -41
  501. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  502. package/dest/public/tx_contract_cache.js +0 -49
  503. package/dest/test/utils.d.ts +0 -13
  504. package/dest/test/utils.d.ts.map +0 -1
  505. package/dest/test/utils.js +0 -22
  506. package/src/common/db_interfaces.ts +0 -94
  507. package/src/common/debug_fn_name.ts +0 -18
  508. package/src/common/message_load_oracle_inputs.ts +0 -15
  509. package/src/private/acvm/oracle/index.ts +0 -16
  510. package/src/private/acvm/oracle/oracle.ts +0 -455
  511. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  512. package/src/private/execution_data_provider.ts +0 -323
  513. package/src/private/execution_note_cache.ts +0 -217
  514. package/src/private/hashed_values_cache.ts +0 -55
  515. package/src/private/index.ts +0 -16
  516. package/src/private/pick_notes.ts +0 -141
  517. package/src/private/private_execution.ts +0 -151
  518. package/src/private/private_execution_oracle.ts +0 -614
  519. package/src/private/providers/acvm_wasm.ts +0 -63
  520. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  521. package/src/private/providers/simulation_provider.ts +0 -45
  522. package/src/private/simulator.ts +0 -147
  523. package/src/private/unconstrained_execution.ts +0 -50
  524. package/src/private/unconstrained_execution_oracle.ts +0 -373
  525. package/src/public/avm/bytecode_utils.ts +0 -17
  526. package/src/public/avm/fixtures/index.ts +0 -296
  527. package/src/public/avm/journal/index.ts +0 -1
  528. package/src/public/avm/journal/journal.ts +0 -742
  529. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  530. package/src/public/bytecode_errors.ts +0 -6
  531. package/src/public/execution.ts +0 -140
  532. package/src/public/tx_contract_cache.ts +0 -69
  533. package/src/test/utils.ts +0 -36
@@ -1,41 +1,40 @@
1
1
  import {
2
- MAX_L2_GAS_PER_TX_PUBLIC_PORTION,
2
+ MAX_ENQUEUED_CALLS_PER_TX,
3
3
  MAX_L2_TO_L1_MSGS_PER_TX,
4
4
  MAX_NOTE_HASHES_PER_TX,
5
5
  MAX_NULLIFIERS_PER_TX,
6
6
  MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
7
- NULLIFIER_SUBTREE_HEIGHT,
8
7
  } from '@aztec/constants';
9
8
  import { padArrayEnd } from '@aztec/foundation/collection';
10
- import { Fr } from '@aztec/foundation/fields';
11
- import { type Logger, createLogger } from '@aztec/foundation/log';
12
- import { assertLength } from '@aztec/foundation/serialize';
9
+ import { Fr } from '@aztec/foundation/curves/bn254';
10
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
13
11
  import {
14
- AvmCircuitInputs,
15
- type AvmCircuitPublicInputs,
16
- type AvmProvingRequest,
12
+ AvmAccumulatedData,
13
+ AvmAccumulatedDataArrayLengths,
14
+ AvmCircuitPublicInputs,
17
15
  PublicDataWrite,
18
16
  RevertCode,
19
17
  } from '@aztec/stdlib/avm';
20
18
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
19
+ import { AllContractDeploymentData, type ContractDeploymentData } from '@aztec/stdlib/contract';
21
20
  import type { SimulationError } from '@aztec/stdlib/errors';
22
- import { computeTransactionFee } from '@aztec/stdlib/fees';
21
+ import { computeEffectiveGasFees, computeTransactionFee } from '@aztec/stdlib/fees';
23
22
  import { Gas, GasSettings } from '@aztec/stdlib/gas';
24
- import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
25
23
  import {
26
24
  PrivateToAvmAccumulatedData,
27
25
  PrivateToAvmAccumulatedDataArrayLengths,
28
- type PrivateToPublicAccumulatedData,
26
+ PrivateToPublicAccumulatedData,
29
27
  PublicCallRequest,
28
+ PublicCallRequestArrayLengths,
30
29
  countAccumulatedItems,
31
- mergeAccumulatedData,
32
30
  } from '@aztec/stdlib/kernel';
33
- import { ProvingRequestType } from '@aztec/stdlib/proofs';
31
+ import { FlatPublicLogs } from '@aztec/stdlib/logs';
32
+ import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
34
33
  import { MerkleTreeId } from '@aztec/stdlib/trees';
35
34
  import {
36
35
  type GlobalVariables,
37
- type PublicExecutionRequest,
38
- type StateReference,
36
+ ProtocolContracts,
37
+ PublicCallRequestWithCalldata,
39
38
  TreeSnapshots,
40
39
  type Tx,
41
40
  TxExecutionPhase,
@@ -45,10 +44,11 @@ import {
45
44
  import { strict as assert } from 'assert';
46
45
  import { inspect } from 'util';
47
46
 
48
- import { AvmPersistableStateManager } from '../avm/index.js';
49
- import type { WorldStateDB } from '../public_db_sources.js';
50
- import { SideEffectArrayLengths, SideEffectTrace } from '../side_effect_trace.js';
51
- import { getCallRequestsByPhase, getExecutionRequestsByPhase } from '../utils.js';
47
+ import type { PublicContractsDBInterface } from '../db_interfaces.js';
48
+ import type { PublicTreesDB } from '../public_db_sources.js';
49
+ import { SideEffectTrace } from '../side_effect_trace.js';
50
+ import { PublicPersistableStateManager } from '../state_manager/state_manager.js';
51
+ import { getCallRequestsWithCalldataByPhase } from '../utils.js';
52
52
 
53
53
  /**
54
54
  * The transaction-level context for public execution.
@@ -67,79 +67,85 @@ export class PublicTxContext {
67
67
  private revertCode: RevertCode = RevertCode.OK;
68
68
  /* What caused a revert (if one occurred)? */
69
69
  public revertReason: SimulationError | undefined;
70
-
71
- public avmProvingRequest: AvmProvingRequest | undefined; // FIXME(dbanks12): remove
72
-
73
- constructor(
70
+ private constructor(
74
71
  public readonly txHash: TxHash,
75
72
  public readonly state: PhaseStateManager,
73
+ private readonly startTreeSnapshots: TreeSnapshots,
76
74
  private readonly globalVariables: GlobalVariables,
77
- private readonly startStateReference: StateReference,
75
+ private readonly protocolContracts: ProtocolContracts,
76
+ private readonly proverId: Fr,
78
77
  private readonly gasSettings: GasSettings,
79
78
  private readonly gasUsedByPrivate: Gas,
80
79
  private readonly gasAllocatedToPublic: Gas,
81
- private readonly setupCallRequests: PublicCallRequest[],
82
- private readonly appLogicCallRequests: PublicCallRequest[],
83
- private readonly teardownCallRequests: PublicCallRequest[],
84
- private readonly setupExecutionRequests: PublicExecutionRequest[],
85
- private readonly appLogicExecutionRequests: PublicExecutionRequest[],
86
- private readonly teardownExecutionRequests: PublicExecutionRequest[],
80
+ private readonly gasAllocatedToPublicTeardown: Gas,
81
+ private readonly setupCallRequests: PublicCallRequestWithCalldata[],
82
+ private readonly appLogicCallRequests: PublicCallRequestWithCalldata[],
83
+ private readonly teardownCallRequests: PublicCallRequestWithCalldata[],
84
+ public readonly nonRevertibleContractDeploymentData: ContractDeploymentData,
85
+ public readonly revertibleContractDeploymentData: ContractDeploymentData,
87
86
  public readonly nonRevertibleAccumulatedDataFromPrivate: PrivateToPublicAccumulatedData,
88
87
  public readonly revertibleAccumulatedDataFromPrivate: PrivateToPublicAccumulatedData,
89
88
  public readonly feePayer: AztecAddress,
90
- public trace: SideEffectTrace, // FIXME(dbanks12): should be private
89
+ private readonly trace: SideEffectTrace,
90
+ bindings?: LoggerBindings,
91
91
  ) {
92
- this.log = createLogger(`simulator:public_tx_context`);
92
+ this.log = createLogger(`simulator:public_tx_context`, bindings);
93
93
  }
94
94
 
95
95
  public static async create(
96
- db: MerkleTreeReadOperations,
97
- worldStateDB: WorldStateDB,
96
+ treesDB: PublicTreesDB,
97
+ contractsDB: PublicContractsDBInterface,
98
98
  tx: Tx,
99
99
  globalVariables: GlobalVariables,
100
- doMerkleOperations: boolean,
100
+ protocolContracts: ProtocolContracts,
101
+ proverId: Fr,
102
+ bindings?: LoggerBindings,
101
103
  ) {
104
+ const contractDeploymentData = AllContractDeploymentData.fromTx(tx);
105
+ const nonRevertibleContractDeploymentData = contractDeploymentData.getNonRevertibleContractDeploymentData();
106
+ const revertibleContractDeploymentData = contractDeploymentData.getRevertibleContractDeploymentData();
102
107
  const nonRevertibleAccumulatedDataFromPrivate = tx.data.forPublic!.nonRevertibleAccumulatedData;
103
108
 
104
- const previousAccumulatedDataArrayLengths = new SideEffectArrayLengths(
105
- /*publicDataWrites*/ 0,
106
- /*protocolPublicDataWrites*/ 0,
107
- /*noteHashes*/ 0,
108
- /*nullifiers=*/ 0,
109
- countAccumulatedItems(nonRevertibleAccumulatedDataFromPrivate.l2ToL1Msgs),
110
- /*publicLogs*/ 0,
111
- );
112
-
113
- const trace = new SideEffectTrace(/*startSideEffectCounter=*/ 0, previousAccumulatedDataArrayLengths);
109
+ const trace = new SideEffectTrace(0, bindings);
114
110
 
115
111
  const firstNullifier = nonRevertibleAccumulatedDataFromPrivate.nullifiers[0];
116
112
 
117
113
  // Transaction level state manager that will be forked for revertible phases.
118
- const txStateManager = AvmPersistableStateManager.create(worldStateDB, trace, doMerkleOperations, firstNullifier);
114
+ const txStateManager = PublicPersistableStateManager.create(
115
+ treesDB,
116
+ contractsDB,
117
+ trace,
118
+ firstNullifier,
119
+ globalVariables.timestamp,
120
+ bindings,
121
+ );
119
122
 
120
123
  const gasSettings = tx.data.constants.txContext.gasSettings;
121
124
  const gasUsedByPrivate = tx.data.gasUsed;
122
- // Gas allocated to public is "whatever's left" after private, but with some max applied.
123
- const gasAllocatedToPublic = applyMaxToAvailableGas(gasSettings.gasLimits.sub(gasUsedByPrivate));
125
+ const gasAllocatedToPublic = gasSettings.gasLimits.sub(gasUsedByPrivate);
126
+ const gasAllocatedToPublicTeardown = gasSettings.teardownGasLimits;
124
127
 
125
128
  return new PublicTxContext(
126
- await tx.getTxHash(),
127
- new PhaseStateManager(txStateManager),
129
+ tx.getTxHash(),
130
+ new PhaseStateManager(txStateManager, bindings),
131
+ await txStateManager.getTreeSnapshots(),
128
132
  globalVariables,
129
- await db.getStateReference(),
133
+ protocolContracts,
134
+ proverId,
130
135
  gasSettings,
131
136
  gasUsedByPrivate,
132
137
  gasAllocatedToPublic,
133
- getCallRequestsByPhase(tx, TxExecutionPhase.SETUP),
134
- getCallRequestsByPhase(tx, TxExecutionPhase.APP_LOGIC),
135
- getCallRequestsByPhase(tx, TxExecutionPhase.TEARDOWN),
136
- getExecutionRequestsByPhase(tx, TxExecutionPhase.SETUP),
137
- getExecutionRequestsByPhase(tx, TxExecutionPhase.APP_LOGIC),
138
- getExecutionRequestsByPhase(tx, TxExecutionPhase.TEARDOWN),
138
+ gasAllocatedToPublicTeardown,
139
+ getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP),
140
+ getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.APP_LOGIC),
141
+ getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.TEARDOWN),
142
+ nonRevertibleContractDeploymentData,
143
+ revertibleContractDeploymentData,
139
144
  tx.data.forPublic!.nonRevertibleAccumulatedData,
140
145
  tx.data.forPublic!.revertibleAccumulatedData,
141
146
  tx.data.feePayer,
142
147
  trace,
148
+ bindings,
143
149
  );
144
150
  }
145
151
 
@@ -148,10 +154,8 @@ export class PublicTxContext {
148
154
  * All phases have been processed.
149
155
  * Actual transaction fee and actual total consumed gas can now be queried.
150
156
  */
151
- async halt() {
152
- if (this.state.isForked()) {
153
- await this.state.mergeForkedState();
154
- }
157
+ halt() {
158
+ assert(!this.state.isForked(), 'Cannot halt when state is forked');
155
159
  this.halted = true;
156
160
  }
157
161
 
@@ -161,7 +165,7 @@ export class PublicTxContext {
161
165
  * NOTE: this does not "halt" the entire transaction execution.
162
166
  */
163
167
  revert(phase: TxExecutionPhase, revertReason: SimulationError | undefined = undefined, culprit = '') {
164
- this.log.warn(`${TxExecutionPhase[phase]} phase reverted! ${culprit} failed with reason: ${revertReason}`);
168
+ this.log.warn(`${TxExecutionPhase[phase]} phase reverted! ${culprit} failed with reason: ${revertReason?.message}`);
165
169
 
166
170
  if (revertReason && !this.revertReason) {
167
171
  // don't override revertReason
@@ -170,19 +174,8 @@ export class PublicTxContext {
170
174
  }
171
175
  if (phase === TxExecutionPhase.SETUP) {
172
176
  this.log.warn(`Setup phase reverted! The transaction will be thrown out.`);
173
- if (revertReason) {
174
- throw revertReason;
175
- } else {
176
- throw new Error(`Setup phase reverted! The transaction will be thrown out. ${culprit} failed`);
177
- }
178
- } else if (phase === TxExecutionPhase.APP_LOGIC) {
179
- this.revertCode = RevertCode.APP_LOGIC_REVERTED;
180
- } else if (phase === TxExecutionPhase.TEARDOWN) {
181
- if (this.revertCode.equals(RevertCode.APP_LOGIC_REVERTED)) {
182
- this.revertCode = RevertCode.BOTH_REVERTED;
183
- } else {
184
- this.revertCode = RevertCode.TEARDOWN_REVERTED;
185
- }
177
+ } else if (phase === TxExecutionPhase.APP_LOGIC || phase === TxExecutionPhase.TEARDOWN) {
178
+ this.revertCode = RevertCode.REVERTED;
186
179
  }
187
180
  }
188
181
 
@@ -212,7 +205,7 @@ export class PublicTxContext {
212
205
  /**
213
206
  * Get the call requests for the specified phase (including args hashes).
214
207
  */
215
- getCallRequestsForPhase(phase: TxExecutionPhase): PublicCallRequest[] {
208
+ getCallRequestsForPhase(phase: TxExecutionPhase): PublicCallRequestWithCalldata[] {
216
209
  switch (phase) {
217
210
  case TxExecutionPhase.SETUP:
218
211
  return this.setupCallRequests;
@@ -223,26 +216,13 @@ export class PublicTxContext {
223
216
  }
224
217
  }
225
218
 
226
- /**
227
- * Get the call requests for the specified phase (including actual args).
228
- */
229
- getExecutionRequestsForPhase(phase: TxExecutionPhase): PublicExecutionRequest[] {
230
- switch (phase) {
231
- case TxExecutionPhase.SETUP:
232
- return this.setupExecutionRequests;
233
- case TxExecutionPhase.APP_LOGIC:
234
- return this.appLogicExecutionRequests;
235
- case TxExecutionPhase.TEARDOWN:
236
- return this.teardownExecutionRequests;
237
- }
238
- }
239
-
240
219
  /**
241
220
  * How much gas is left as of the specified phase?
242
221
  */
243
222
  getGasLeftAtPhase(phase: TxExecutionPhase): Gas {
244
223
  if (phase === TxExecutionPhase.TEARDOWN) {
245
- return applyMaxToAvailableGas(this.gasSettings.teardownGasLimits);
224
+ const gasLeftForPublicTeardown = this.gasAllocatedToPublicTeardown.sub(this.teardownGasUsed);
225
+ return gasLeftForPublicTeardown;
246
226
  } else {
247
227
  const gasLeftForPublic = this.gasAllocatedToPublic.sub(this.gasUsedByPublic);
248
228
  return gasLeftForPublic;
@@ -261,8 +241,12 @@ export class PublicTxContext {
261
241
  }
262
242
 
263
243
  /**
264
- * The gasUsed by public and private,
265
- * as if the entire teardown gas limit was consumed.
244
+ * The gasUsed by public and private, as if the entire teardown gas limit was consumed.
245
+ *
246
+ * This is intentional: teardown is used for gas accounting and refunds, so the transaction
247
+ * fee must be deterministic _before_ teardown executes. If fees depended on teardown's actual
248
+ * consumption there would be a circular dependency. Billing the full teardown gas limit
249
+ * (set by the user) makes the fee known in advance and available to the teardown function.
266
250
  */
267
251
  getTotalGasUsed(): Gas {
268
252
  return this.gasUsedByPrivate.add(this.gasUsedByPublic);
@@ -322,124 +306,125 @@ export class PublicTxContext {
322
306
  /**
323
307
  * Generate the public inputs for the AVM circuit.
324
308
  */
325
- private async generateAvmCircuitPublicInputs(endStateReference: StateReference): Promise<AvmCircuitPublicInputs> {
309
+ public async generateAvmCircuitPublicInputs(): Promise<AvmCircuitPublicInputs> {
326
310
  assert(this.halted, 'Can only get AvmCircuitPublicInputs after tx execution ends');
327
311
  const stateManager = this.state.getActiveStateManager();
328
312
 
329
- const startTreeSnapshots = new TreeSnapshots(
330
- this.startStateReference.l1ToL2MessageTree,
331
- this.startStateReference.partial.noteHashTree,
332
- this.startStateReference.partial.nullifierTree,
333
- this.startStateReference.partial.publicDataTree,
313
+ // We get the side effects from the AVM.
314
+ // The AVM will already have handled the conditional insertion of most private side-effects.
315
+ // (depending on the revert code of each stage). Only l2ToL1Msgs and publicLogs still need to be "merged".
316
+ const {
317
+ publicDataWrites: avmPublicDataWrites,
318
+ noteHashes: avmNoteHashes,
319
+ nullifiers: avmNullifiers,
320
+ l2ToL1Msgs: avmL2ToL1Msgs,
321
+ publicLogs: avmPublicLogs,
322
+ } = this.trace.getSideEffects();
323
+
324
+ // Private generates PrivateLogs, and public execution generates PublicLogs.
325
+ // Since these are two different categories, they should not be merged.
326
+ const finalPublicLogs = avmPublicLogs;
327
+
328
+ // We squash public data writes.
329
+ // Maps slot to value. Maps in TS are iterable in insertion order, which is exactly what we want for
330
+ // squashing "to the left", where the first occurrence of a slot uses the value of the last write to it,
331
+ // and the rest occurrences are omitted.
332
+ // Note: you can't write public state from private, so we only squash what we got from the AVM.
333
+ const finalPublicDataWrites = (() => {
334
+ const squashedPublicDataWrites: Map<bigint, Fr> = new Map();
335
+ for (const publicDataWrite of avmPublicDataWrites) {
336
+ squashedPublicDataWrites.set(publicDataWrite.leafSlot.toBigInt(), publicDataWrite.newValue);
337
+ }
338
+ return Array.from(squashedPublicDataWrites.entries()).map(
339
+ ([slot, value]) => new PublicDataWrite(new Fr(slot), value),
340
+ );
341
+ })();
342
+
343
+ // Count before padding.
344
+ const accumulatedDataArrayLengths = new AvmAccumulatedDataArrayLengths(
345
+ avmNoteHashes.length,
346
+ avmNullifiers.length,
347
+ avmL2ToL1Msgs.length,
348
+ finalPublicDataWrites.length,
334
349
  );
335
350
 
336
- // Will be patched/padded at the end of this fn
337
- const endTreeSnapshots = new TreeSnapshots(
338
- endStateReference.l1ToL2MessageTree,
339
- endStateReference.partial.noteHashTree,
340
- endStateReference.partial.nullifierTree,
341
- endStateReference.partial.publicDataTree,
351
+ const accumulatedData = new AvmAccumulatedData(
352
+ /*noteHashes=*/ padArrayEnd(
353
+ avmNoteHashes.map(n => n.value),
354
+ Fr.zero(),
355
+ MAX_NOTE_HASHES_PER_TX,
356
+ ),
357
+ /*nullifiers=*/ padArrayEnd(
358
+ avmNullifiers.map(n => n.value),
359
+ Fr.zero(),
360
+ MAX_NULLIFIERS_PER_TX,
361
+ ),
362
+ /*l2ToL1Msgs=*/ padArrayEnd(avmL2ToL1Msgs, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
363
+ /*publicLogs=*/ FlatPublicLogs.fromLogs(finalPublicLogs),
364
+ /*publicDataWrites=*/ padArrayEnd(
365
+ finalPublicDataWrites,
366
+ PublicDataWrite.empty(),
367
+ MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
368
+ ),
342
369
  );
343
370
 
344
- const avmCircuitPublicInputs = this.trace.toAvmCircuitPublicInputs(
345
- this.globalVariables,
346
- startTreeSnapshots,
347
- /*startGasUsed=*/ this.gasUsedByPrivate,
348
- this.gasSettings,
349
- this.feePayer,
350
- this.setupCallRequests,
351
- this.appLogicCallRequests,
352
- /*teardownCallRequest=*/ this.teardownCallRequests.length
353
- ? this.teardownCallRequests[0]
354
- : PublicCallRequest.empty(),
355
- endTreeSnapshots,
356
- /*endGasUsed=*/ this.getTotalGasUsed(),
357
- /*transactionFee=*/ this.getTransactionFeeUnsafe(),
358
- /*reverted=*/ !this.revertCode.isOK(),
359
- );
371
+ // Now we finally have enough information to pad the trees.
372
+ // NOTE(fcarreiro): a bit weird that a method that generates the PIs does this,
373
+ // but we do need the end tree snapshots. We can consider moving things to the caller.
374
+ const numNoteHashesToPad = MAX_NOTE_HASHES_PER_TX - avmNoteHashes.length;
375
+ const numNullifiersToPad = MAX_NULLIFIERS_PER_TX - avmNullifiers.length;
376
+ await stateManager.padTree(MerkleTreeId.NOTE_HASH_TREE, numNoteHashesToPad);
377
+ await stateManager.padTree(MerkleTreeId.NULLIFIER_TREE, numNullifiersToPad);
378
+ const endTreeSnapshots = await stateManager.getTreeSnapshots();
360
379
 
361
- const getArrayLengths = (from: PrivateToPublicAccumulatedData) =>
380
+ // This converts the private accumulated data to the avm accumulated data format.
381
+ const convertAccumulatedData = (from: PrivateToPublicAccumulatedData) =>
382
+ new PrivateToAvmAccumulatedData(from.noteHashes, from.nullifiers, from.l2ToL1Msgs);
383
+ const getPreviousAccumulatedDataArrayLengths = (from: PrivateToPublicAccumulatedData) =>
362
384
  new PrivateToAvmAccumulatedDataArrayLengths(
363
385
  countAccumulatedItems(from.noteHashes),
364
386
  countAccumulatedItems(from.nullifiers),
365
387
  countAccumulatedItems(from.l2ToL1Msgs),
366
388
  );
367
- const convertAccumulatedData = (from: PrivateToPublicAccumulatedData) =>
368
- new PrivateToAvmAccumulatedData(from.noteHashes, from.nullifiers, from.l2ToL1Msgs);
369
- // Temporary overrides as these entries aren't yet populated in trace
370
- avmCircuitPublicInputs.previousNonRevertibleAccumulatedDataArrayLengths = getArrayLengths(
371
- this.nonRevertibleAccumulatedDataFromPrivate,
372
- );
373
- avmCircuitPublicInputs.previousRevertibleAccumulatedDataArrayLengths = getArrayLengths(
374
- this.revertibleAccumulatedDataFromPrivate,
375
- );
376
- avmCircuitPublicInputs.previousNonRevertibleAccumulatedData = convertAccumulatedData(
377
- this.nonRevertibleAccumulatedDataFromPrivate,
378
- );
379
- avmCircuitPublicInputs.previousRevertibleAccumulatedData = convertAccumulatedData(
380
- this.revertibleAccumulatedDataFromPrivate,
381
- );
382
-
383
- const msgsFromPrivate = this.revertCode.isOK()
384
- ? mergeAccumulatedData(
385
- avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs,
386
- avmCircuitPublicInputs.previousRevertibleAccumulatedData.l2ToL1Msgs,
387
- )
388
- : avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs;
389
- avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs = assertLength(
390
- mergeAccumulatedData(msgsFromPrivate, avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs),
391
- MAX_L2_TO_L1_MSGS_PER_TX,
392
- );
393
-
394
- // Maps slot to value. Maps in TS are iterable in insertion order, which is exactly what we want for
395
- // squashing "to the left", where the first occurrence of a slot uses the value of the last write to it,
396
- // and the rest occurrences are omitted
397
- const squashedPublicDataWrites: Map<bigint, Fr> = new Map();
398
- for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
399
- squashedPublicDataWrites.set(publicDataWrite.leafSlot.toBigInt(), publicDataWrite.value);
400
- }
401
-
402
- avmCircuitPublicInputs.accumulatedData.publicDataWrites = padArrayEnd(
403
- Array.from(squashedPublicDataWrites.entries()).map(([slot, value]) => new PublicDataWrite(new Fr(slot), value)),
404
- PublicDataWrite.empty(),
405
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
406
- );
407
- const numNoteHashesToPad =
408
- MAX_NOTE_HASHES_PER_TX - countAccumulatedItems(avmCircuitPublicInputs.accumulatedData.noteHashes);
409
- await stateManager.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, padArrayEnd([], Fr.ZERO, numNoteHashesToPad));
410
- const numNullifiersToPad =
411
- MAX_NULLIFIERS_PER_TX - countAccumulatedItems(avmCircuitPublicInputs.accumulatedData.nullifiers);
412
- await stateManager.db.batchInsert(
413
- MerkleTreeId.NULLIFIER_TREE,
414
- padArrayEnd([], Fr.ZERO, numNullifiersToPad).map(nullifier => nullifier.toBuffer()),
415
- NULLIFIER_SUBTREE_HEIGHT,
416
- );
417
-
418
- const paddedState = await stateManager.db.getStateReference();
419
- avmCircuitPublicInputs.endTreeSnapshots = new TreeSnapshots(
420
- paddedState.l1ToL2MessageTree,
421
- paddedState.partial.noteHashTree,
422
- paddedState.partial.nullifierTree,
423
- paddedState.partial.publicDataTree,
424
- );
425
-
426
- return avmCircuitPublicInputs;
427
- }
428
389
 
429
- /**
430
- * Generate the proving request for the AVM circuit.
431
- */
432
- async generateProvingRequest(endStateReference: StateReference): Promise<AvmProvingRequest> {
433
- const hints = this.trace.getAvmCircuitHints();
434
- return {
435
- type: ProvingRequestType.PUBLIC_VM,
436
- inputs: new AvmCircuitInputs(
437
- 'public_dispatch',
438
- [],
439
- hints,
440
- await this.generateAvmCircuitPublicInputs(endStateReference),
390
+ return new AvmCircuitPublicInputs(
391
+ this.globalVariables,
392
+ this.protocolContracts,
393
+ this.startTreeSnapshots,
394
+ /*startGasUsed=*/ this.gasUsedByPrivate,
395
+ this.gasSettings,
396
+ computeEffectiveGasFees(this.globalVariables.gasFees, this.gasSettings),
397
+ this.feePayer,
398
+ this.proverId,
399
+ /*publicCallRequestArrayLengths=*/ new PublicCallRequestArrayLengths(
400
+ this.setupCallRequests.length,
401
+ this.appLogicCallRequests.length,
402
+ this.teardownCallRequests.length > 0,
403
+ ),
404
+ /*publicSetupCallRequests=*/ padArrayEnd(
405
+ this.setupCallRequests.map(r => r.request),
406
+ PublicCallRequest.empty(),
407
+ MAX_ENQUEUED_CALLS_PER_TX,
441
408
  ),
442
- };
409
+ /*publicAppLogicCallRequests=*/ padArrayEnd(
410
+ this.appLogicCallRequests.map(r => r.request),
411
+ PublicCallRequest.empty(),
412
+ MAX_ENQUEUED_CALLS_PER_TX,
413
+ ),
414
+ /*publicTeardownCallRequests=*/ this.teardownCallRequests.length > 0
415
+ ? this.teardownCallRequests[0].request
416
+ : PublicCallRequest.empty(),
417
+ getPreviousAccumulatedDataArrayLengths(this.nonRevertibleAccumulatedDataFromPrivate),
418
+ getPreviousAccumulatedDataArrayLengths(this.revertibleAccumulatedDataFromPrivate),
419
+ convertAccumulatedData(this.nonRevertibleAccumulatedDataFromPrivate),
420
+ convertAccumulatedData(this.revertibleAccumulatedDataFromPrivate),
421
+ endTreeSnapshots,
422
+ this.getTotalGasUsed(),
423
+ accumulatedDataArrayLengths,
424
+ accumulatedData,
425
+ /*transactionFee=*/ this.getTransactionFeeUnsafe(),
426
+ /*isReverted=*/ !this.revertCode.isOK(),
427
+ );
443
428
  }
444
429
  }
445
430
 
@@ -456,10 +441,13 @@ export class PublicTxContext {
456
441
  class PhaseStateManager {
457
442
  private log: Logger;
458
443
 
459
- private currentlyActiveStateManager: AvmPersistableStateManager | undefined;
444
+ private currentlyActiveStateManager: PublicPersistableStateManager | undefined;
460
445
 
461
- constructor(private readonly txStateManager: AvmPersistableStateManager) {
462
- this.log = createLogger(`simulator:public_phase_state_manager`);
446
+ constructor(
447
+ private readonly txStateManager: PublicPersistableStateManager,
448
+ bindings?: LoggerBindings,
449
+ ) {
450
+ this.log = createLogger(`simulator:public_phase_state_manager`, bindings);
463
451
  }
464
452
 
465
453
  async fork() {
@@ -492,13 +480,3 @@ class PhaseStateManager {
492
480
  this.currentlyActiveStateManager = undefined;
493
481
  }
494
482
  }
495
-
496
- /**
497
- * Apply L2 gas maximum.
498
- */
499
- function applyMaxToAvailableGas(availableGas: Gas) {
500
- return new Gas(
501
- /*daGas=*/ availableGas.daGas,
502
- /*l2Gas=*/ Math.min(availableGas.l2Gas, MAX_L2_GAS_PER_TX_PUBLIC_PORTION),
503
- );
504
- }