@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.5daedc8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (492) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +6 -4
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +5 -14
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +1 -2
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/common/stats/index.d.ts +1 -1
  12. package/dest/common/stats/stats.d.ts +1 -1
  13. package/dest/private/acvm/acvm.d.ts +12 -6
  14. package/dest/private/acvm/acvm.d.ts.map +1 -1
  15. package/dest/private/acvm/acvm.js +10 -16
  16. package/dest/private/acvm/acvm_types.d.ts +2 -2
  17. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.d.ts +18 -19
  19. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  20. package/dest/private/acvm/deserialize.js +31 -23
  21. package/dest/private/acvm/index.d.ts +1 -2
  22. package/dest/private/acvm/index.d.ts.map +1 -1
  23. package/dest/private/acvm/index.js +0 -1
  24. package/dest/private/acvm/serialize.d.ts +20 -3
  25. package/dest/private/acvm/serialize.d.ts.map +1 -1
  26. package/dest/private/acvm/serialize.js +53 -0
  27. package/dest/private/acvm_native.d.ts +39 -0
  28. package/dest/private/acvm_native.d.ts.map +1 -0
  29. package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
  30. package/dest/private/acvm_wasm.d.ts +15 -0
  31. package/dest/private/acvm_wasm.d.ts.map +1 -0
  32. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  33. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  34. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  35. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  36. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  37. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  38. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  40. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  41. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  43. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  44. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  46. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  47. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  48. package/dest/private/circuit_simulator.d.ts +35 -0
  49. package/dest/private/circuit_simulator.d.ts.map +1 -0
  50. package/dest/private/circuit_simulator.js +43 -0
  51. package/dest/private/factory.d.ts +12 -0
  52. package/dest/private/factory.d.ts.map +1 -0
  53. package/dest/private/{providers/factory.js → factory.js} +2 -2
  54. package/dest/public/avm/avm_context.d.ts +6 -6
  55. package/dest/public/avm/avm_context.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.d.ts +5 -3
  57. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  58. package/dest/public/avm/avm_contract_call_result.js +11 -7
  59. package/dest/public/avm/avm_execution_environment.d.ts +4 -2
  60. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  61. package/dest/public/avm/avm_execution_environment.js +4 -2
  62. package/dest/public/avm/avm_gas.d.ts +5 -21
  63. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  64. package/dest/public/avm/avm_gas.js +27 -35
  65. package/dest/public/avm/avm_machine_state.d.ts +3 -1
  66. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  67. package/dest/public/avm/avm_machine_state.js +2 -0
  68. package/dest/public/avm/avm_memory_types.d.ts +99 -88
  69. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  70. package/dest/public/avm/avm_memory_types.js +17 -6
  71. package/dest/public/avm/avm_simulator.d.ts +6 -6
  72. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  73. package/dest/public/avm/avm_simulator.js +23 -35
  74. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  75. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  76. package/dest/public/avm/avm_simulator_interface.js +3 -0
  77. package/dest/public/avm/errors.d.ts +7 -31
  78. package/dest/public/avm/errors.d.ts.map +1 -1
  79. package/dest/public/avm/errors.js +7 -57
  80. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  81. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  82. package/dest/public/avm/fixtures/avm_simulation_tester.js +22 -15
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +7 -5
  84. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  85. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +37 -14
  86. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  87. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  88. package/dest/public/avm/fixtures/initializers.js +44 -0
  89. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  90. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  91. package/dest/public/avm/fixtures/utils.js +95 -0
  92. package/dest/public/avm/index.d.ts +1 -3
  93. package/dest/public/avm/index.d.ts.map +1 -1
  94. package/dest/public/avm/index.js +0 -2
  95. package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
  96. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/accrued_substate.js +28 -25
  98. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  99. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  101. package/dest/public/avm/opcodes/arithmetic.d.ts +17 -7
  102. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  104. package/dest/public/avm/opcodes/bitwise.d.ts +10 -18
  105. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/bitwise.js +19 -26
  107. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  108. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/comparators.js +3 -3
  110. package/dest/public/avm/opcodes/contract.d.ts +2 -3
  111. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/contract.js +9 -10
  113. package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
  114. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/control_flow.js +10 -8
  116. package/dest/public/avm/opcodes/conversion.d.ts +2 -1
  117. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/conversion.js +267 -3
  119. package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
  120. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/ec_add.js +6 -6
  122. package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
  123. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/environment_getters.js +17 -19
  125. package/dest/public/avm/opcodes/external_calls.d.ts +9 -8
  126. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/external_calls.js +39 -34
  128. package/dest/public/avm/opcodes/hashing.d.ts +2 -2
  129. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/hashing.js +6 -6
  131. package/dest/public/avm/opcodes/index.d.ts +1 -1
  132. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  133. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  134. package/dest/public/avm/opcodes/instruction.js +23 -19
  135. package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
  136. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  137. package/dest/public/avm/opcodes/memory.d.ts +6 -6
  138. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  139. package/dest/public/avm/opcodes/memory.js +37 -33
  140. package/dest/public/avm/opcodes/misc.d.ts +3 -2
  141. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  142. package/dest/public/avm/opcodes/misc.js +41 -16
  143. package/dest/public/avm/opcodes/storage.d.ts +3 -3
  144. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  145. package/dest/public/avm/opcodes/storage.js +7 -5
  146. package/dest/public/avm/revert_reason.d.ts +18 -0
  147. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  148. package/dest/public/avm/revert_reason.js +38 -0
  149. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  150. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  151. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  152. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  153. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  154. package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
  155. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  156. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  157. package/dest/public/avm/test_utils.d.ts +11 -14
  158. package/dest/public/avm/test_utils.d.ts.map +1 -1
  159. package/dest/public/avm/test_utils.js +16 -24
  160. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  161. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  162. package/dest/public/contracts_db_checkpoint.js +30 -0
  163. package/dest/public/db_interfaces.d.ts +68 -0
  164. package/dest/public/db_interfaces.d.ts.map +1 -0
  165. package/dest/public/db_interfaces.js +3 -0
  166. package/dest/public/debug_fn_name.d.ts +5 -0
  167. package/dest/public/debug_fn_name.d.ts.map +1 -0
  168. package/dest/public/debug_fn_name.js +9 -0
  169. package/dest/public/executor_metrics.d.ts +12 -4
  170. package/dest/public/executor_metrics.d.ts.map +1 -1
  171. package/dest/public/executor_metrics.js +37 -6
  172. package/dest/public/executor_metrics_interface.d.ts +10 -0
  173. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  174. package/dest/public/executor_metrics_interface.js +1 -0
  175. package/dest/public/fixtures/amm_test.d.ts +10 -0
  176. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  177. package/dest/public/fixtures/amm_test.js +213 -0
  178. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  179. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  180. package/dest/public/fixtures/bulk_test.js +326 -0
  181. package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
  182. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  183. package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
  184. package/dest/public/fixtures/custom_bytecode_tests.d.ts +9 -0
  185. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  186. package/dest/public/fixtures/custom_bytecode_tests.js +109 -0
  187. package/dest/public/fixtures/index.d.ts +8 -1
  188. package/dest/public/fixtures/index.d.ts.map +1 -1
  189. package/dest/public/fixtures/index.js +7 -0
  190. package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
  191. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  192. package/dest/public/fixtures/minimal_public_tx.js +29 -0
  193. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +35 -14
  194. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  195. package/dest/public/fixtures/public_tx_simulation_tester.js +100 -71
  196. package/dest/public/fixtures/simple_contract_data_source.d.ts +35 -0
  197. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  198. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  199. package/dest/public/fixtures/token_test.d.ts +8 -0
  200. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  201. package/dest/public/fixtures/token_test.js +94 -0
  202. package/dest/public/fixtures/utils.d.ts +17 -4
  203. package/dest/public/fixtures/utils.d.ts.map +1 -1
  204. package/dest/public/fixtures/utils.js +100 -58
  205. package/dest/public/hinting_db_sources.d.ts +78 -0
  206. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  207. package/dest/public/hinting_db_sources.js +350 -0
  208. package/dest/public/index.d.ts +6 -9
  209. package/dest/public/index.d.ts.map +1 -1
  210. package/dest/public/index.js +4 -7
  211. package/dest/public/public_db_sources.d.ts +51 -101
  212. package/dest/public/public_db_sources.d.ts.map +1 -1
  213. package/dest/public/public_db_sources.js +219 -192
  214. package/dest/public/public_errors.d.ts +12 -0
  215. package/dest/public/public_errors.d.ts.map +1 -0
  216. package/dest/public/public_errors.js +13 -0
  217. package/dest/public/public_processor/guarded_merkle_tree.d.ts +49 -0
  218. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  219. package/dest/public/public_processor/guarded_merkle_tree.js +108 -0
  220. package/dest/public/public_processor/public_processor.d.ts +25 -37
  221. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  222. package/dest/public/public_processor/public_processor.js +154 -111
  223. package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
  224. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  225. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  226. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +30 -0
  227. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  228. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +133 -0
  229. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +66 -0
  230. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  231. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +210 -0
  232. package/dest/public/public_tx_simulator/index.d.ts +5 -0
  233. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  234. package/dest/public/public_tx_simulator/index.js +2 -0
  235. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  236. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  237. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  238. package/dest/public/public_tx_simulator/public_tx_context.d.ts +23 -30
  239. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  240. package/dest/public/public_tx_simulator/public_tx_context.js +71 -91
  241. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +36 -58
  242. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  243. package/dest/public/public_tx_simulator/public_tx_simulator.js +208 -206
  244. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -0
  245. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  246. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  247. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  248. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  249. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  250. package/dest/public/side_effect_errors.d.ts +42 -2
  251. package/dest/public/side_effect_errors.d.ts.map +1 -1
  252. package/dest/public/side_effect_errors.js +70 -1
  253. package/dest/public/side_effect_trace.d.ts +21 -67
  254. package/dest/public/side_effect_trace.d.ts.map +1 -1
  255. package/dest/public/side_effect_trace.js +71 -121
  256. package/dest/public/side_effect_trace_interface.d.ts +12 -24
  257. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  258. package/dest/public/state_manager/index.d.ts +2 -0
  259. package/dest/public/state_manager/index.d.ts.map +1 -0
  260. package/dest/public/state_manager/index.js +1 -0
  261. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +3 -6
  262. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  263. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  264. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +3 -3
  265. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  266. package/dest/public/state_manager/state_manager.d.ts +159 -0
  267. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  268. package/dest/public/state_manager/state_manager.js +392 -0
  269. package/dest/public/test_executor_metrics.d.ts +55 -0
  270. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  271. package/dest/public/test_executor_metrics.js +307 -0
  272. package/dest/public/unique_class_ids.d.ts +1 -1
  273. package/dest/public/unique_class_ids.d.ts.map +1 -1
  274. package/dest/public/utils.d.ts +3 -5
  275. package/dest/public/utils.d.ts.map +1 -1
  276. package/dest/public/utils.js +4 -21
  277. package/dest/server.d.ts +7 -4
  278. package/dest/server.d.ts.map +1 -1
  279. package/dest/server.js +5 -2
  280. package/dest/testing.d.ts +2 -0
  281. package/dest/testing.d.ts.map +1 -0
  282. package/dest/testing.js +1 -0
  283. package/package.json +39 -33
  284. package/src/client.ts +5 -3
  285. package/src/common/errors.ts +79 -44
  286. package/src/common/index.ts +0 -1
  287. package/src/private/acvm/acvm.ts +17 -32
  288. package/src/private/acvm/acvm_types.ts +1 -1
  289. package/src/private/acvm/deserialize.ts +35 -29
  290. package/src/private/acvm/index.ts +0 -1
  291. package/src/private/acvm/serialize.ts +63 -0
  292. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
  293. package/src/private/acvm_wasm.ts +72 -0
  294. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  295. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  296. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  297. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  298. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  299. package/src/private/circuit_simulator.ts +90 -0
  300. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  301. package/src/public/avm/avm_context.ts +4 -4
  302. package/src/public/avm/avm_contract_call_result.ts +17 -5
  303. package/src/public/avm/avm_execution_environment.ts +8 -1
  304. package/src/public/avm/avm_gas.ts +23 -35
  305. package/src/public/avm/avm_machine_state.ts +5 -0
  306. package/src/public/avm/avm_memory_types.ts +19 -6
  307. package/src/public/avm/avm_simulator.ts +43 -54
  308. package/src/public/avm/avm_simulator_interface.ts +8 -0
  309. package/src/public/avm/errors.ts +8 -77
  310. package/src/public/avm/fixtures/avm_simulation_tester.ts +32 -21
  311. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
  312. package/src/public/avm/fixtures/initializers.ts +102 -0
  313. package/src/public/avm/fixtures/utils.ts +150 -0
  314. package/src/public/avm/index.ts +0 -2
  315. package/src/public/avm/opcodes/accrued_substate.ts +64 -29
  316. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  317. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  318. package/src/public/avm/opcodes/bitwise.ts +33 -29
  319. package/src/public/avm/opcodes/comparators.ts +6 -3
  320. package/src/public/avm/opcodes/contract.ts +10 -7
  321. package/src/public/avm/opcodes/control_flow.ts +19 -10
  322. package/src/public/avm/opcodes/conversion.ts +27 -3
  323. package/src/public/avm/opcodes/ec_add.ts +9 -6
  324. package/src/public/avm/opcodes/environment_getters.ts +27 -22
  325. package/src/public/avm/opcodes/external_calls.ts +61 -29
  326. package/src/public/avm/opcodes/hashing.ts +28 -8
  327. package/src/public/avm/opcodes/instruction.ts +31 -21
  328. package/src/public/avm/opcodes/memory.ts +71 -32
  329. package/src/public/avm/opcodes/misc.ts +60 -18
  330. package/src/public/avm/opcodes/storage.ts +22 -6
  331. package/src/public/avm/revert_reason.ts +55 -0
  332. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  333. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  334. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  335. package/src/public/avm/test_utils.ts +24 -41
  336. package/src/public/contracts_db_checkpoint.ts +41 -0
  337. package/src/public/db_interfaces.ts +76 -0
  338. package/src/{common → public}/debug_fn_name.ts +7 -7
  339. package/src/public/executor_metrics.ts +56 -6
  340. package/src/public/executor_metrics_interface.ts +15 -0
  341. package/src/public/fixtures/amm_test.ts +331 -0
  342. package/src/public/fixtures/bulk_test.ts +169 -0
  343. package/src/public/fixtures/custom_bytecode_tester.ts +49 -0
  344. package/src/public/fixtures/custom_bytecode_tests.ts +135 -0
  345. package/src/public/fixtures/index.ts +7 -0
  346. package/src/public/fixtures/minimal_public_tx.ts +35 -0
  347. package/src/public/fixtures/public_tx_simulation_tester.ts +166 -113
  348. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  349. package/src/public/fixtures/token_test.ts +139 -0
  350. package/src/public/fixtures/utils.ts +141 -68
  351. package/src/public/hinting_db_sources.ts +602 -0
  352. package/src/public/index.ts +5 -8
  353. package/src/public/public_db_sources.ts +278 -258
  354. package/src/public/public_errors.ts +14 -0
  355. package/src/public/public_processor/guarded_merkle_tree.ts +153 -0
  356. package/src/public/public_processor/public_processor.ts +212 -164
  357. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  358. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +162 -0
  359. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +306 -0
  360. package/src/public/public_tx_simulator/index.ts +4 -0
  361. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  362. package/src/public/public_tx_simulator/public_tx_context.ts +167 -194
  363. package/src/public/public_tx_simulator/public_tx_simulator.ts +292 -265
  364. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +10 -0
  365. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  366. package/src/public/side_effect_errors.ts +91 -1
  367. package/src/public/side_effect_trace.ts +94 -320
  368. package/src/public/side_effect_trace_interface.ts +10 -58
  369. package/src/public/state_manager/index.ts +1 -0
  370. package/src/public/{avm/journal → state_manager}/nullifiers.ts +5 -11
  371. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  372. package/src/public/state_manager/state_manager.ts +553 -0
  373. package/src/public/test_executor_metrics.ts +397 -0
  374. package/src/public/utils.ts +5 -21
  375. package/src/server.ts +6 -3
  376. package/src/testing.ts +1 -0
  377. package/dest/common/db_interfaces.d.ts +0 -80
  378. package/dest/common/db_interfaces.d.ts.map +0 -1
  379. package/dest/common/db_interfaces.js +0 -1
  380. package/dest/common/debug_fn_name.d.ts +0 -5
  381. package/dest/common/debug_fn_name.d.ts.map +0 -1
  382. package/dest/common/debug_fn_name.js +0 -6
  383. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  384. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  385. package/dest/common/message_load_oracle_inputs.js +0 -15
  386. package/dest/private/acvm/oracle/index.d.ts +0 -14
  387. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  388. package/dest/private/acvm/oracle/index.js +0 -2
  389. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  390. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  391. package/dest/private/acvm/oracle/oracle.js +0 -263
  392. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  393. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  394. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  395. package/dest/private/execution_data_provider.d.ts +0 -261
  396. package/dest/private/execution_data_provider.d.ts.map +0 -1
  397. package/dest/private/execution_data_provider.js +0 -14
  398. package/dest/private/execution_note_cache.d.ts +0 -93
  399. package/dest/private/execution_note_cache.d.ts.map +0 -1
  400. package/dest/private/execution_note_cache.js +0 -180
  401. package/dest/private/hashed_values_cache.d.ts +0 -28
  402. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  403. package/dest/private/hashed_values_cache.js +0 -46
  404. package/dest/private/index.d.ts +0 -13
  405. package/dest/private/index.d.ts.map +0 -1
  406. package/dest/private/index.js +0 -12
  407. package/dest/private/pick_notes.d.ts +0 -85
  408. package/dest/private/pick_notes.d.ts.map +0 -1
  409. package/dest/private/pick_notes.js +0 -51
  410. package/dest/private/private_execution.d.ts +0 -25
  411. package/dest/private/private_execution.d.ts.map +0 -1
  412. package/dest/private/private_execution.js +0 -92
  413. package/dest/private/private_execution_oracle.d.ts +0 -215
  414. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  415. package/dest/private/private_execution_oracle.js +0 -382
  416. package/dest/private/providers/acvm_native.d.ts +0 -40
  417. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  418. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  419. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  420. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  421. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  422. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  423. package/dest/private/providers/factory.d.ts +0 -12
  424. package/dest/private/providers/factory.d.ts.map +0 -1
  425. package/dest/private/providers/simulation_provider.d.ts +0 -19
  426. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  427. package/dest/private/providers/simulation_provider.js +0 -24
  428. package/dest/private/simulator.d.ts +0 -34
  429. package/dest/private/simulator.d.ts.map +0 -1
  430. package/dest/private/simulator.js +0 -76
  431. package/dest/private/unconstrained_execution.d.ts +0 -10
  432. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  433. package/dest/private/unconstrained_execution.js +0 -27
  434. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  435. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  436. package/dest/private/unconstrained_execution_oracle.js +0 -258
  437. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  438. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  439. package/dest/public/avm/bytecode_utils.js +0 -17
  440. package/dest/public/avm/fixtures/index.d.ts +0 -84
  441. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  442. package/dest/public/avm/fixtures/index.js +0 -175
  443. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  444. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  445. package/dest/public/avm/journal/index.d.ts +0 -2
  446. package/dest/public/avm/journal/index.d.ts.map +0 -1
  447. package/dest/public/avm/journal/index.js +0 -1
  448. package/dest/public/avm/journal/journal.d.ts +0 -209
  449. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  450. package/dest/public/avm/journal/journal.js +0 -486
  451. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  452. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  453. package/dest/public/bytecode_errors.d.ts +0 -4
  454. package/dest/public/bytecode_errors.d.ts.map +0 -1
  455. package/dest/public/bytecode_errors.js +0 -6
  456. package/dest/public/execution.d.ts +0 -108
  457. package/dest/public/execution.d.ts.map +0 -1
  458. package/dest/public/execution.js +0 -9
  459. package/dest/public/tx_contract_cache.d.ts +0 -41
  460. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  461. package/dest/public/tx_contract_cache.js +0 -49
  462. package/dest/test/utils.d.ts +0 -13
  463. package/dest/test/utils.d.ts.map +0 -1
  464. package/dest/test/utils.js +0 -22
  465. package/src/common/db_interfaces.ts +0 -94
  466. package/src/common/message_load_oracle_inputs.ts +0 -15
  467. package/src/private/acvm/oracle/index.ts +0 -16
  468. package/src/private/acvm/oracle/oracle.ts +0 -455
  469. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  470. package/src/private/execution_data_provider.ts +0 -323
  471. package/src/private/execution_note_cache.ts +0 -217
  472. package/src/private/hashed_values_cache.ts +0 -55
  473. package/src/private/index.ts +0 -16
  474. package/src/private/pick_notes.ts +0 -141
  475. package/src/private/private_execution.ts +0 -151
  476. package/src/private/private_execution_oracle.ts +0 -614
  477. package/src/private/providers/acvm_wasm.ts +0 -63
  478. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  479. package/src/private/providers/simulation_provider.ts +0 -45
  480. package/src/private/simulator.ts +0 -147
  481. package/src/private/unconstrained_execution.ts +0 -50
  482. package/src/private/unconstrained_execution_oracle.ts +0 -373
  483. package/src/public/avm/bytecode_utils.ts +0 -17
  484. package/src/public/avm/fixtures/index.ts +0 -296
  485. package/src/public/avm/journal/index.ts +0 -1
  486. package/src/public/avm/journal/journal.ts +0 -742
  487. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  488. package/src/public/bytecode_errors.ts +0 -6
  489. package/src/public/execution.ts +0 -140
  490. package/src/public/tx_contract_cache.ts +0 -69
  491. package/src/test/utils.ts +0 -36
  492. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -1,78 +1,44 @@
1
1
  import {
2
- L1_TO_L2_MSG_TREE_HEIGHT,
3
- MAX_ENQUEUED_CALLS_PER_TX,
2
+ FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH,
4
3
  MAX_L2_TO_L1_MSGS_PER_TX,
5
4
  MAX_NOTE_HASHES_PER_TX,
6
5
  MAX_NULLIFIERS_PER_TX,
7
6
  MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
8
7
  MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
9
- MAX_PUBLIC_LOGS_PER_TX,
10
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
11
- NOTE_HASH_TREE_HEIGHT,
12
- NULLIFIER_TREE_HEIGHT,
13
8
  PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
14
- PUBLIC_DATA_TREE_HEIGHT,
15
- PUBLIC_LOG_DATA_SIZE_IN_FIELDS,
16
9
  } from '@aztec/constants';
17
- import { padArrayEnd } from '@aztec/foundation/collection';
18
10
  import { EthAddress } from '@aztec/foundation/eth-address';
19
11
  import { Fr } from '@aztec/foundation/fields';
20
- import { createLogger } from '@aztec/foundation/log';
21
- import {
22
- AvmAccumulatedData,
23
- AvmAppendTreeHint,
24
- AvmCircuitPublicInputs,
25
- AvmContractClassHint,
26
- AvmContractInstanceHint,
27
- AvmEnqueuedCallHint,
28
- AvmExecutionHints,
29
- AvmNullifierReadTreeHint,
30
- AvmNullifierWriteTreeHint,
31
- AvmPublicDataReadTreeHint,
32
- AvmPublicDataWriteTreeHint,
33
- PublicDataUpdateRequest,
34
- PublicDataWrite,
35
- } from '@aztec/stdlib/avm';
12
+ import { type LogLevel, createLogger } from '@aztec/foundation/log';
13
+ import { PublicDataUpdateRequest } from '@aztec/stdlib/avm';
36
14
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
37
- import { type ContractClassWithCommitment, SerializableContractInstance } from '@aztec/stdlib/contract';
38
- import type { Gas, GasSettings } from '@aztec/stdlib/gas';
39
15
  import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
40
- import {
41
- NoteHash,
42
- Nullifier,
43
- PrivateToAvmAccumulatedData,
44
- PrivateToAvmAccumulatedDataArrayLengths,
45
- PublicCallRequest,
46
- } from '@aztec/stdlib/kernel';
47
- import { PublicLog } from '@aztec/stdlib/logs';
16
+ import { NoteHash, Nullifier } from '@aztec/stdlib/kernel';
17
+ import { DebugLog, PublicLog } from '@aztec/stdlib/logs';
48
18
  import { L2ToL1Message, ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
49
- import { NullifierLeafPreimage, PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
50
- import type { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
51
19
 
52
20
  import { strict as assert } from 'assert';
53
21
 
54
- import { SideEffectLimitReachedError } from './side_effect_errors.js';
22
+ import {
23
+ L2ToL1MessageLimitReachedError,
24
+ MaxCallsToUniqueContractClassIdsError,
25
+ NoteHashLimitReachedError,
26
+ NullifierLimitReachedError,
27
+ SideEffectLimitReachedError,
28
+ } from './side_effect_errors.js';
55
29
  import type { PublicSideEffectTraceInterface } from './side_effect_trace_interface.js';
56
30
  import { UniqueClassIds } from './unique_class_ids.js';
57
31
 
58
- const emptyPublicDataPath = () => new Array(PUBLIC_DATA_TREE_HEIGHT).fill(Fr.zero());
59
- const emptyNoteHashPath = () => new Array(NOTE_HASH_TREE_HEIGHT).fill(Fr.zero());
60
- const emptyNullifierPath = () => new Array(NULLIFIER_TREE_HEIGHT).fill(Fr.zero());
61
- const emptyL1ToL2MessagePath = () => new Array(L1_TO_L2_MSG_TREE_HEIGHT).fill(Fr.zero());
62
-
63
32
  /**
64
33
  * A struct containing just the side effects as regular arrays
65
34
  * as opposed to "Tuple" arrays used by circuit public inputs.
66
35
  * This struct is helpful for testing and checking array lengths.
67
36
  **/
68
37
  export type SideEffects = {
69
- enqueuedCalls: PublicCallRequest[];
70
-
71
38
  publicDataWrites: PublicDataUpdateRequest[];
72
39
  noteHashes: NoteHash[];
73
40
  nullifiers: Nullifier[];
74
41
  l2ToL1Msgs: ScopedL2ToL1Message[];
75
-
76
42
  publicLogs: PublicLog[];
77
43
  };
78
44
 
@@ -83,7 +49,7 @@ export class SideEffectArrayLengths {
83
49
  public readonly noteHashes: number,
84
50
  public readonly nullifiers: number,
85
51
  public readonly l2ToL1Msgs: number,
86
- public readonly publicLogs: number,
52
+ public readonly publicLogFields: number,
87
53
  ) {}
88
54
 
89
55
  static empty() {
@@ -100,8 +66,6 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
100
66
  /** The side effect counter increments with every call to the trace. */
101
67
  private sideEffectCounter: number;
102
68
 
103
- private enqueuedCalls: PublicCallRequest[] = [];
104
-
105
69
  private publicDataWrites: PublicDataUpdateRequest[] = [];
106
70
  private protocolPublicDataWritesLength: number = 0;
107
71
  private userPublicDataWritesLength: number = 0;
@@ -109,9 +73,6 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
109
73
  private nullifiers: Nullifier[] = [];
110
74
  private l2ToL1Messages: ScopedL2ToL1Message[] = [];
111
75
  private publicLogs: PublicLog[] = [];
112
-
113
- private avmCircuitHints: AvmExecutionHints;
114
-
115
76
  /** Make sure a forked trace is never merged twice. */
116
77
  private alreadyMergedIntoParent = false;
117
78
 
@@ -124,9 +85,11 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
124
85
  private readonly previousSideEffectArrayLengths: SideEffectArrayLengths = SideEffectArrayLengths.empty(),
125
86
  /** We need to track the set of class IDs used, to enforce limits. */
126
87
  private uniqueClassIds: UniqueClassIds = new UniqueClassIds(),
88
+ private writtenPublicDataSlots: Set<string> = new Set(),
89
+ private debugLogs: DebugLog[] = [],
90
+ private debugLogMemoryReads: number = 0,
127
91
  ) {
128
92
  this.sideEffectCounter = startSideEffectCounter;
129
- this.avmCircuitHints = AvmExecutionHints.empty();
130
93
  }
131
94
 
132
95
  public fork() {
@@ -138,9 +101,13 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
138
101
  this.previousSideEffectArrayLengths.noteHashes + this.noteHashes.length,
139
102
  this.previousSideEffectArrayLengths.nullifiers + this.nullifiers.length,
140
103
  this.previousSideEffectArrayLengths.l2ToL1Msgs + this.l2ToL1Messages.length,
141
- this.previousSideEffectArrayLengths.publicLogs + this.publicLogs.length,
104
+ this.previousSideEffectArrayLengths.publicLogFields +
105
+ this.publicLogs.reduce((acc, log) => acc + log.sizeInFields(), 0),
142
106
  ),
143
107
  this.uniqueClassIds.fork(),
108
+ new Set(this.writtenPublicDataSlots),
109
+ this.debugLogs.slice(),
110
+ this.debugLogMemoryReads,
144
111
  );
145
112
  }
146
113
 
@@ -153,7 +120,9 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
153
120
  forkedTrace.alreadyMergedIntoParent = true;
154
121
 
155
122
  this.sideEffectCounter = forkedTrace.sideEffectCounter;
156
- this.enqueuedCalls.push(...forkedTrace.enqueuedCalls);
123
+ this.uniqueClassIds.acceptAndMerge(forkedTrace.uniqueClassIds);
124
+ this.debugLogs = forkedTrace.debugLogs;
125
+ this.debugLogMemoryReads = forkedTrace.debugLogMemoryReads;
157
126
 
158
127
  if (!reverted) {
159
128
  this.publicDataWrites.push(...forkedTrace.publicDataWrites);
@@ -161,22 +130,12 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
161
130
  this.nullifiers.push(...forkedTrace.nullifiers);
162
131
  this.l2ToL1Messages.push(...forkedTrace.l2ToL1Messages);
163
132
  this.publicLogs.push(...forkedTrace.publicLogs);
133
+ this.userPublicDataWritesLength += forkedTrace.userPublicDataWritesLength;
134
+ this.protocolPublicDataWritesLength += forkedTrace.protocolPublicDataWritesLength;
135
+ for (const slot of forkedTrace.writtenPublicDataSlots) {
136
+ this.writtenPublicDataSlots.add(slot);
137
+ }
164
138
  }
165
- this.mergeHints(forkedTrace);
166
- }
167
-
168
- private mergeHints(forkedTrace: this) {
169
- this.uniqueClassIds.acceptAndMerge(forkedTrace.uniqueClassIds);
170
- this.avmCircuitHints.enqueuedCalls.push(...forkedTrace.avmCircuitHints.enqueuedCalls);
171
- this.avmCircuitHints.contractInstances.push(...forkedTrace.avmCircuitHints.contractInstances);
172
- this.avmCircuitHints.contractClasses.push(...forkedTrace.avmCircuitHints.contractClasses);
173
- this.avmCircuitHints.publicDataReads.push(...forkedTrace.avmCircuitHints.publicDataReads);
174
- this.avmCircuitHints.publicDataWrites.push(...forkedTrace.avmCircuitHints.publicDataWrites);
175
- this.avmCircuitHints.nullifierReads.push(...forkedTrace.avmCircuitHints.nullifierReads);
176
- this.avmCircuitHints.nullifierWrites.push(...forkedTrace.avmCircuitHints.nullifierWrites);
177
- this.avmCircuitHints.noteHashReads.push(...forkedTrace.avmCircuitHints.noteHashReads);
178
- this.avmCircuitHints.noteHashWrites.push(...forkedTrace.avmCircuitHints.noteHashWrites);
179
- this.avmCircuitHints.l1ToL2MessageReads.push(...forkedTrace.avmCircuitHints.l1ToL2MessageReads);
180
139
  }
181
140
 
182
141
  public getCounter() {
@@ -191,241 +150,136 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
191
150
  return this.previousSideEffectArrayLengths.noteHashes + this.noteHashes.length;
192
151
  }
193
152
 
194
- public tracePublicStorageRead(
195
- contractAddress: AztecAddress,
196
- slot: Fr,
197
- value: Fr,
198
- leafPreimage: PublicDataTreeLeafPreimage = PublicDataTreeLeafPreimage.empty(),
199
- leafIndex: Fr = Fr.zero(),
200
- path: Fr[] = emptyPublicDataPath(),
201
- ) {
202
- this.avmCircuitHints.publicDataReads.push(new AvmPublicDataReadTreeHint(leafPreimage, leafIndex, path));
203
- this.log.trace(
204
- `Tracing storage read (address=${contractAddress}, slot=${slot}): value=${value} (counter=${this.sideEffectCounter})`,
205
- );
206
- this.incrementSideEffectCounter();
207
- }
208
-
209
153
  public async tracePublicStorageWrite(
210
154
  contractAddress: AztecAddress,
211
155
  slot: Fr,
212
156
  value: Fr,
213
157
  protocolWrite: boolean,
214
- lowLeafPreimage: PublicDataTreeLeafPreimage = PublicDataTreeLeafPreimage.empty(),
215
- lowLeafIndex: Fr = Fr.zero(),
216
- lowLeafPath: Fr[] = emptyPublicDataPath(),
217
- newLeafPreimage: PublicDataTreeLeafPreimage = PublicDataTreeLeafPreimage.empty(),
218
- insertionPath: Fr[] = emptyPublicDataPath(),
219
158
  ): Promise<void> {
220
- if (protocolWrite) {
221
- if (
222
- this.protocolPublicDataWritesLength + this.previousSideEffectArrayLengths.protocolPublicDataWrites >=
223
- PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
224
- ) {
225
- throw new SideEffectLimitReachedError(
226
- 'protocol public data (contract storage) write',
227
- PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
228
- );
159
+ // Only increment counts if the storage slot has not been written to before.
160
+ if (this.isStorageCold(contractAddress, slot)) {
161
+ if (protocolWrite) {
162
+ if (
163
+ this.protocolPublicDataWritesLength + this.previousSideEffectArrayLengths.protocolPublicDataWrites >=
164
+ PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
165
+ ) {
166
+ throw new SideEffectLimitReachedError(
167
+ 'protocol public data (contract storage) write',
168
+ PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
169
+ );
170
+ }
171
+ this.protocolPublicDataWritesLength++;
172
+ } else {
173
+ if (
174
+ this.userPublicDataWritesLength + this.previousSideEffectArrayLengths.publicDataWrites >=
175
+ MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
176
+ ) {
177
+ throw new SideEffectLimitReachedError(
178
+ 'public data (contract storage) write',
179
+ MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
180
+ );
181
+ }
182
+ this.userPublicDataWritesLength++;
229
183
  }
230
- this.protocolPublicDataWritesLength++;
231
- } else {
232
- if (
233
- this.userPublicDataWritesLength + this.previousSideEffectArrayLengths.publicDataWrites >=
234
- MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
235
- ) {
236
- throw new SideEffectLimitReachedError(
237
- 'public data (contract storage) write',
238
- MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
239
- );
240
- }
241
- this.userPublicDataWritesLength++;
242
184
  }
243
185
 
244
186
  const leafSlot = await computePublicDataTreeLeafSlot(contractAddress, slot);
245
187
  this.publicDataWrites.push(new PublicDataUpdateRequest(leafSlot, value, this.sideEffectCounter));
246
188
 
247
- // New hinting
248
- const readHint = new AvmPublicDataReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
249
- this.avmCircuitHints.publicDataWrites.push(
250
- new AvmPublicDataWriteTreeHint(readHint, newLeafPreimage, insertionPath),
251
- );
252
-
253
189
  this.log.trace(
254
190
  `Traced public data write (address=${contractAddress}, slot=${slot}): value=${value} (counter=${this.sideEffectCounter}, isProtocol:${protocolWrite})`,
255
191
  );
256
192
  this.incrementSideEffectCounter();
193
+ this.writtenPublicDataSlots.add(this.computePublicDataSlotKey(contractAddress, slot));
257
194
  }
258
195
 
259
- // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
260
- public traceNoteHashCheck(
261
- _contractAddress: AztecAddress,
262
- noteHash: Fr,
263
- leafIndex: Fr,
264
- _exists: boolean,
265
- path: Fr[] = emptyNoteHashPath(),
266
- ) {
267
- // New Hinting
268
- this.avmCircuitHints.noteHashReads.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
269
- // NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
270
- this.log.trace(`Tracing note hash check (counter=${this.sideEffectCounter})`);
196
+ private computePublicDataSlotKey(contractAddress: AztecAddress, slot: Fr): string {
197
+ return `${contractAddress.toString()}:${slot.toString()}`;
271
198
  }
272
199
 
273
- public traceNewNoteHash(noteHash: Fr, leafIndex: Fr = Fr.zero(), path: Fr[] = emptyNoteHashPath()) {
200
+ public isStorageCold(contractAddress: AztecAddress, slot: Fr): boolean {
201
+ return !this.writtenPublicDataSlots.has(this.computePublicDataSlotKey(contractAddress, slot));
202
+ }
203
+
204
+ public traceNewNoteHash(noteHash: Fr) {
274
205
  if (this.noteHashes.length + this.previousSideEffectArrayLengths.noteHashes >= MAX_NOTE_HASHES_PER_TX) {
275
- throw new SideEffectLimitReachedError('note hash', MAX_NOTE_HASHES_PER_TX);
206
+ throw new NoteHashLimitReachedError();
276
207
  }
277
208
 
278
209
  this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
279
- this.avmCircuitHints.noteHashWrites.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
280
210
  this.log.trace(`Tracing new note hash (counter=${this.sideEffectCounter})`);
281
211
  this.incrementSideEffectCounter();
282
212
  }
283
213
 
284
- public traceNullifierCheck(
285
- _siloedNullifier: Fr,
286
- _exists: boolean,
287
- lowLeafPreimage: NullifierLeafPreimage = NullifierLeafPreimage.empty(),
288
- lowLeafIndex: Fr = Fr.zero(),
289
- lowLeafPath: Fr[] = emptyNullifierPath(),
290
- ) {
291
- this.avmCircuitHints.nullifierReads.push(new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath));
292
- this.log.trace(`Tracing nullifier check (counter=${this.sideEffectCounter})`);
293
- this.incrementSideEffectCounter();
294
- }
295
-
296
- public traceNewNullifier(
297
- siloedNullifier: Fr,
298
- lowLeafPreimage: NullifierLeafPreimage = NullifierLeafPreimage.empty(),
299
- lowLeafIndex: Fr = Fr.zero(),
300
- lowLeafPath: Fr[] = emptyNullifierPath(),
301
- insertionPath: Fr[] = emptyNullifierPath(),
302
- ) {
214
+ public traceNewNullifier(siloedNullifier: Fr) {
303
215
  if (this.nullifiers.length + this.previousSideEffectArrayLengths.nullifiers >= MAX_NULLIFIERS_PER_TX) {
304
- throw new SideEffectLimitReachedError('nullifier', MAX_NULLIFIERS_PER_TX);
216
+ throw new NullifierLimitReachedError();
305
217
  }
306
218
 
307
- this.nullifiers.push(new Nullifier(siloedNullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
219
+ this.nullifiers.push(new Nullifier(siloedNullifier, /*noteHash=*/ Fr.ZERO, this.sideEffectCounter));
308
220
 
309
- const lowLeafReadHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
310
- this.avmCircuitHints.nullifierWrites.push(new AvmNullifierWriteTreeHint(lowLeafReadHint, insertionPath));
311
221
  this.log.trace(`Tracing new nullifier (counter=${this.sideEffectCounter})`);
312
222
  this.incrementSideEffectCounter();
313
223
  }
314
224
 
315
- // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
316
- public traceL1ToL2MessageCheck(
317
- _contractAddress: AztecAddress,
318
- msgHash: Fr,
319
- msgLeafIndex: Fr,
320
- _exists: boolean,
321
- path: Fr[] = emptyL1ToL2MessagePath(),
322
- ) {
323
- this.avmCircuitHints.l1ToL2MessageReads.push(new AvmAppendTreeHint(msgLeafIndex, msgHash, path));
324
- this.log.trace(`Tracing l1 to l2 message check (counter=${this.sideEffectCounter})`);
325
- }
326
-
327
225
  public traceNewL2ToL1Message(contractAddress: AztecAddress, recipient: Fr, content: Fr) {
328
226
  if (this.l2ToL1Messages.length + this.previousSideEffectArrayLengths.l2ToL1Msgs >= MAX_L2_TO_L1_MSGS_PER_TX) {
329
- throw new SideEffectLimitReachedError('l2 to l1 message', MAX_L2_TO_L1_MSGS_PER_TX);
227
+ throw new L2ToL1MessageLimitReachedError();
330
228
  }
331
229
 
332
230
  const recipientAddress = EthAddress.fromField(recipient);
333
- this.l2ToL1Messages.push(
334
- new L2ToL1Message(recipientAddress, content, this.sideEffectCounter).scope(contractAddress),
335
- );
231
+ this.l2ToL1Messages.push(new L2ToL1Message(recipientAddress, content).scope(contractAddress));
336
232
  this.log.trace(`Tracing new l2 to l1 message (counter=${this.sideEffectCounter})`);
337
233
  this.incrementSideEffectCounter();
338
234
  }
339
235
 
340
236
  public tracePublicLog(contractAddress: AztecAddress, log: Fr[]) {
341
- if (this.publicLogs.length + this.previousSideEffectArrayLengths.publicLogs >= MAX_PUBLIC_LOGS_PER_TX) {
342
- throw new SideEffectLimitReachedError('public log', MAX_PUBLIC_LOGS_PER_TX);
343
- }
237
+ const previouslyEmittedPublicLogFieldsCount =
238
+ this.previousSideEffectArrayLengths.publicLogFields +
239
+ this.publicLogs.reduce((acc, log) => acc + log.sizeInFields(), 0);
344
240
 
345
- if (log.length > PUBLIC_LOG_DATA_SIZE_IN_FIELDS) {
346
- throw new Error(`Emitted public log is too large, max: ${PUBLIC_LOG_DATA_SIZE_IN_FIELDS}, passed: ${log.length}`);
241
+ const publicLog = new PublicLog(contractAddress, log);
242
+
243
+ if (previouslyEmittedPublicLogFieldsCount + publicLog.sizeInFields() > FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH) {
244
+ throw new SideEffectLimitReachedError('public log fields', FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH);
347
245
  }
348
- const publicLog = new PublicLog(contractAddress, padArrayEnd(log, Fr.ZERO, PUBLIC_LOG_DATA_SIZE_IN_FIELDS));
246
+
349
247
  this.publicLogs.push(publicLog);
350
248
  this.log.trace(`Tracing new public log (counter=${this.sideEffectCounter})`);
351
249
  this.incrementSideEffectCounter();
352
250
  }
353
251
 
354
- public traceGetContractInstance(
355
- contractAddress: AztecAddress,
356
- exists: boolean,
357
- instance: SerializableContractInstance = SerializableContractInstance.default(),
358
- updateMembershipHint: AvmPublicDataReadTreeHint = AvmPublicDataReadTreeHint.empty(),
359
- updatePreimage: Fr[] = [],
360
- ) {
361
- this.avmCircuitHints.contractInstances.push(
362
- new AvmContractInstanceHint(
363
- contractAddress,
364
- exists,
365
- instance.salt,
366
- instance.deployer,
367
- instance.currentContractClassId,
368
- instance.originalContractClassId,
369
- instance.initializationHash,
370
- instance.publicKeys,
371
- updateMembershipHint,
372
- updatePreimage,
373
- ),
374
- );
375
- this.log.trace(`Tracing contract instance retrieval (counter=${this.sideEffectCounter})`);
376
- this.incrementSideEffectCounter();
252
+ public traceDebugLog(contractAddress: AztecAddress, level: LogLevel, message: string, fields: Fr[]) {
253
+ this.debugLogs.push(new DebugLog(contractAddress, level, message, fields));
254
+ }
255
+
256
+ public getDebugLogs() {
257
+ return this.debugLogs;
258
+ }
259
+
260
+ public getDebugLogMemoryReads() {
261
+ return this.debugLogMemoryReads;
377
262
  }
378
263
 
379
- public traceGetContractClass(contractClassId: Fr, exists: boolean, contractClass?: ContractClassWithCommitment) {
380
- if (!exists) {
381
- this.avmCircuitHints.contractClasses.push(
382
- new AvmContractClassHint(contractClassId, exists, Fr.zero(), Fr.zero(), Fr.zero(), Buffer.alloc(0)),
383
- );
384
- } else if (!this.uniqueClassIds.has(contractClassId.toString())) {
264
+ public traceDebugLogMemoryReads(memoryReads: number) {
265
+ this.debugLogMemoryReads += memoryReads;
266
+ }
267
+
268
+ public traceGetContractClass(contractClassId: Fr, exists: boolean) {
269
+ // We limit the number of unique contract class IDs due to hashing and the trace length limit.
270
+ if (exists && !this.uniqueClassIds.has(contractClassId.toString())) {
385
271
  if (this.uniqueClassIds.size() >= MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS) {
386
272
  this.log.debug(`Bytecode retrieval failure for contract class ID ${contractClassId} (limit reached)`);
387
- throw new SideEffectLimitReachedError(
388
- 'contract calls to unique class IDs',
389
- MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
390
- );
273
+ throw new MaxCallsToUniqueContractClassIdsError();
391
274
  }
392
-
275
+ this.log.trace(`Adding contract class ID ${contractClassId} (counter=${this.sideEffectCounter})`);
393
276
  this.uniqueClassIds.add(contractClassId.toString());
394
- this.avmCircuitHints.contractClasses.push(
395
- new AvmContractClassHint(
396
- contractClassId,
397
- exists,
398
- contractClass!.artifactHash,
399
- contractClass!.privateFunctionsRoot,
400
- contractClass!.publicBytecodeCommitment,
401
- contractClass!.packedBytecode,
402
- ),
403
- );
404
-
405
277
  this.incrementSideEffectCounter();
406
278
  }
407
279
  }
408
280
 
409
- /**
410
- * Trace an enqueued call.
411
- * Accept some results from a finished call's trace into this one.
412
- */
413
- public traceEnqueuedCall(
414
- /** The call request from private that enqueued this call. */
415
- publicCallRequest: PublicCallRequest,
416
- /** The call's calldata */
417
- calldata: Fr[],
418
- /** Did the call revert? */
419
- _reverted: boolean,
420
- ) {
421
- // TODO(4805): check if some threshold is reached for max enqueued or nested calls (to unique contracts?)
422
- this.enqueuedCalls.push(publicCallRequest);
423
- this.avmCircuitHints.enqueuedCalls.push(new AvmEnqueuedCallHint(publicCallRequest.contractAddress, calldata));
424
- }
425
-
426
281
  public getSideEffects(): SideEffects {
427
282
  return {
428
- enqueuedCalls: this.enqueuedCalls,
429
283
  publicDataWrites: this.publicDataWrites,
430
284
  noteHashes: this.noteHashes,
431
285
  nullifiers: this.nullifiers,
@@ -433,84 +287,4 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
433
287
  publicLogs: this.publicLogs,
434
288
  };
435
289
  }
436
-
437
- public toAvmCircuitPublicInputs(
438
- /** Globals. */
439
- globalVariables: GlobalVariables,
440
- /** Start tree snapshots. */
441
- startTreeSnapshots: TreeSnapshots,
442
- /** Gas used at start of TX. */
443
- startGasUsed: Gas,
444
- /** How much gas was available for this public execution. */
445
- gasLimits: GasSettings,
446
- /** Address of the fee payer. */
447
- feePayer: AztecAddress,
448
- /** Call requests for setup phase. */
449
- publicSetupCallRequests: PublicCallRequest[],
450
- /** Call requests for app logic phase. */
451
- publicAppLogicCallRequests: PublicCallRequest[],
452
- /** Call request for teardown phase. */
453
- publicTeardownCallRequest: PublicCallRequest,
454
- /** End tree snapshots. */
455
- endTreeSnapshots: TreeSnapshots,
456
- /**
457
- * Gas used by the whole transaction, assuming entire teardown limit is used.
458
- * This is the gas used when computing transaction fee.
459
- */
460
- endGasUsed: Gas,
461
- /** Transaction fee. */
462
- transactionFee: Fr,
463
- /** The call's results */
464
- reverted: boolean,
465
- ): AvmCircuitPublicInputs {
466
- return new AvmCircuitPublicInputs(
467
- globalVariables,
468
- startTreeSnapshots,
469
- startGasUsed,
470
- gasLimits,
471
- feePayer,
472
- padArrayEnd(publicSetupCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX),
473
- padArrayEnd(publicAppLogicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX),
474
- publicTeardownCallRequest,
475
- /*previousNonRevertibleAccumulatedDataArrayLengths=*/ PrivateToAvmAccumulatedDataArrayLengths.empty(),
476
- /*previousRevertibleAccumulatedDataArrayLengths=*/ PrivateToAvmAccumulatedDataArrayLengths.empty(),
477
- /*previousNonRevertibleAccumulatedDataArray=*/ PrivateToAvmAccumulatedData.empty(),
478
- /*previousRevertibleAccumulatedDataArray=*/ PrivateToAvmAccumulatedData.empty(),
479
- endTreeSnapshots,
480
- endGasUsed,
481
- /*accumulatedData=*/ this.getAvmAccumulatedData(),
482
- transactionFee,
483
- reverted,
484
- );
485
- }
486
-
487
- public getPublicLogs() {
488
- return this.publicLogs;
489
- }
490
-
491
- public getAvmCircuitHints() {
492
- return this.avmCircuitHints;
493
- }
494
-
495
- private getAvmAccumulatedData() {
496
- return new AvmAccumulatedData(
497
- padArrayEnd(
498
- this.noteHashes.map(n => n.value),
499
- Fr.zero(),
500
- MAX_NOTE_HASHES_PER_TX,
501
- ),
502
- padArrayEnd(
503
- this.nullifiers.map(n => n.value),
504
- Fr.zero(),
505
- MAX_NULLIFIERS_PER_TX,
506
- ),
507
- padArrayEnd(this.l2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
508
- padArrayEnd(this.publicLogs, PublicLog.empty(), MAX_PUBLIC_LOGS_PER_TX),
509
- padArrayEnd(
510
- this.publicDataWrites.map(w => new PublicDataWrite(w.leafSlot, w.newValue)),
511
- PublicDataWrite.empty(),
512
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
513
- ),
514
- );
515
- }
516
290
  }
@@ -1,76 +1,28 @@
1
1
  import type { Fr } from '@aztec/foundation/fields';
2
- import type { AvmPublicDataReadTreeHint } from '@aztec/stdlib/avm';
2
+ import type { LogLevel } from '@aztec/foundation/log';
3
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
- import type { ContractClassWithCommitment, SerializableContractInstance } from '@aztec/stdlib/contract';
5
- import type { PublicCallRequest } from '@aztec/stdlib/kernel';
6
- import type { PublicLog } from '@aztec/stdlib/logs';
7
- import type { NullifierLeafPreimage, PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
4
+ import type { DebugLog } from '@aztec/stdlib/logs';
8
5
 
9
6
  export interface PublicSideEffectTraceInterface {
10
7
  fork(): PublicSideEffectTraceInterface;
11
8
  merge(nestedTrace: PublicSideEffectTraceInterface, reverted?: boolean): void;
12
9
  getCounter(): number;
13
10
  // all "trace*" functions can throw SideEffectLimitReachedError
14
- tracePublicStorageRead(
15
- contractAddress: AztecAddress,
16
- slot: Fr,
17
- value: Fr,
18
- leafPreimage?: PublicDataTreeLeafPreimage,
19
- leafIndex?: Fr,
20
- path?: Fr[],
21
- ): void;
22
11
  tracePublicStorageWrite(
23
12
  contractAddress: AztecAddress,
24
13
  slot: Fr, // This is the storage slot not the computed leaf slot
25
14
  value: Fr,
26
15
  protocolWrite: boolean,
27
- lowLeafPreimage?: PublicDataTreeLeafPreimage,
28
- lowLeafIndex?: Fr,
29
- lowLeafPath?: Fr[],
30
- newLeafPreimage?: PublicDataTreeLeafPreimage,
31
- insertionPath?: Fr[],
32
16
  ): Promise<void>;
33
- traceNoteHashCheck(contractAddress: AztecAddress, noteHash: Fr, leafIndex: Fr, exists: boolean, path?: Fr[]): void;
34
- traceNewNoteHash(uniqueNoteHash: Fr, leafIndex?: Fr, path?: Fr[]): void;
17
+ isStorageCold(contractAddress: AztecAddress, slot: Fr): boolean;
18
+ traceNewNoteHash(uniqueNoteHash: Fr): void;
35
19
  getNoteHashCount(): number;
36
- traceNullifierCheck(
37
- siloedNullifier: Fr,
38
- exists: boolean,
39
- lowLeafPreimage?: NullifierLeafPreimage,
40
- lowLeafIndex?: Fr,
41
- lowLeafPath?: Fr[],
42
- ): void;
43
- traceNewNullifier(
44
- siloedNullifier: Fr,
45
- lowLeafPreimage?: NullifierLeafPreimage,
46
- lowLeafIndex?: Fr,
47
- lowLeafPath?: Fr[],
48
- insertionPath?: Fr[],
49
- ): void;
50
- traceL1ToL2MessageCheck(
51
- contractAddress: AztecAddress,
52
- msgHash: Fr,
53
- msgLeafIndex: Fr,
54
- exists: boolean,
55
- path?: Fr[],
56
- ): void;
20
+ traceNewNullifier(siloedNullifier: Fr): void;
57
21
  traceNewL2ToL1Message(contractAddress: AztecAddress, recipient: Fr, content: Fr): void;
58
22
  tracePublicLog(contractAddress: AztecAddress, log: Fr[]): void;
59
- traceGetContractInstance(
60
- contractAddress: AztecAddress,
61
- exists: boolean,
62
- instance?: SerializableContractInstance,
63
- updateMembershipHint?: AvmPublicDataReadTreeHint,
64
- updatePreimage?: Fr[],
65
- ): void;
66
- traceGetContractClass(contractClassId: Fr, exists: boolean, contractClass?: ContractClassWithCommitment): void;
67
- traceEnqueuedCall(
68
- /** The call request from private that enqueued this call. */
69
- publicCallRequest: PublicCallRequest,
70
- /** The call's calldata */
71
- calldata: Fr[],
72
- /** Did the call revert? */
73
- reverted: boolean,
74
- ): void;
75
- getPublicLogs(): PublicLog[];
23
+ traceDebugLog(contractAddress: AztecAddress, level: LogLevel, message: string, fields: Fr[]): void;
24
+ getDebugLogs(): DebugLog[];
25
+ getDebugLogMemoryReads(): number;
26
+ traceDebugLogMemoryReads(memoryReads: number): void;
27
+ traceGetContractClass(contractClassId: Fr, exists: boolean): void;
76
28
  }
@@ -0,0 +1 @@
1
+ export * from './state_manager.js';