@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.24de95ac

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 (466) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +5 -3
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +4 -7
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +0 -1
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/private/acvm/acvm.d.ts +11 -5
  12. package/dest/private/acvm/acvm.d.ts.map +1 -1
  13. package/dest/private/acvm/acvm.js +10 -16
  14. package/dest/private/acvm/acvm_types.d.ts +1 -1
  15. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  16. package/dest/private/acvm/deserialize.d.ts +17 -18
  17. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.js +31 -23
  19. package/dest/private/acvm/index.d.ts +0 -1
  20. package/dest/private/acvm/index.d.ts.map +1 -1
  21. package/dest/private/acvm/index.js +0 -1
  22. package/dest/private/acvm/serialize.d.ts +19 -2
  23. package/dest/private/acvm/serialize.d.ts.map +1 -1
  24. package/dest/private/acvm/serialize.js +53 -0
  25. package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +9 -10
  26. package/dest/private/acvm_native.d.ts.map +1 -0
  27. package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
  28. package/dest/private/acvm_wasm.d.ts +15 -0
  29. package/dest/private/acvm_wasm.d.ts.map +1 -0
  30. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  31. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  32. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  33. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  34. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  35. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  36. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  37. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  38. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  40. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  41. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  43. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  44. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  46. package/dest/private/circuit_simulator.d.ts +35 -0
  47. package/dest/private/circuit_simulator.d.ts.map +1 -0
  48. package/dest/private/circuit_simulator.js +43 -0
  49. package/dest/private/factory.d.ts +12 -0
  50. package/dest/private/factory.d.ts.map +1 -0
  51. package/dest/private/{providers/factory.js → factory.js} +2 -2
  52. package/dest/public/avm/avm_context.d.ts +5 -5
  53. package/dest/public/avm/avm_context.d.ts.map +1 -1
  54. package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
  55. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.js +11 -7
  57. package/dest/public/avm/avm_execution_environment.d.ts +3 -1
  58. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  59. package/dest/public/avm/avm_execution_environment.js +7 -2
  60. package/dest/public/avm/avm_gas.d.ts +4 -20
  61. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  62. package/dest/public/avm/avm_gas.js +27 -35
  63. package/dest/public/avm/avm_machine_state.d.ts +2 -0
  64. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  65. package/dest/public/avm/avm_machine_state.js +2 -0
  66. package/dest/public/avm/avm_memory_types.d.ts +98 -87
  67. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  68. package/dest/public/avm/avm_memory_types.js +17 -6
  69. package/dest/public/avm/avm_simulator.d.ts +4 -5
  70. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  71. package/dest/public/avm/avm_simulator.js +23 -35
  72. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  73. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  74. package/dest/public/avm/avm_simulator_interface.js +3 -0
  75. package/dest/public/avm/errors.d.ts +6 -30
  76. package/dest/public/avm/errors.d.ts.map +1 -1
  77. package/dest/public/avm/errors.js +7 -57
  78. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +5 -4
  79. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  80. package/dest/public/avm/fixtures/avm_simulation_tester.js +12 -14
  81. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +6 -4
  82. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +37 -14
  84. package/dest/public/avm/fixtures/initializers.d.ts +43 -0
  85. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  86. package/dest/public/avm/fixtures/initializers.js +42 -0
  87. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  88. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  89. package/dest/public/avm/fixtures/utils.js +95 -0
  90. package/dest/public/avm/index.d.ts +0 -2
  91. package/dest/public/avm/index.d.ts.map +1 -1
  92. package/dest/public/avm/index.js +0 -2
  93. package/dest/public/avm/opcodes/accrued_substate.d.ts +2 -2
  94. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  95. package/dest/public/avm/opcodes/accrued_substate.js +28 -25
  96. package/dest/public/avm/opcodes/addressing_mode.d.ts +11 -7
  97. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  98. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  99. package/dest/public/avm/opcodes/arithmetic.d.ts +11 -1
  100. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  101. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  102. package/dest/public/avm/opcodes/bitwise.d.ts +5 -13
  103. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  104. package/dest/public/avm/opcodes/bitwise.js +19 -26
  105. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/comparators.js +3 -3
  107. package/dest/public/avm/opcodes/contract.d.ts +1 -2
  108. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/contract.js +9 -10
  110. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  111. package/dest/public/avm/opcodes/control_flow.js +10 -8
  112. package/dest/public/avm/opcodes/conversion.d.ts +1 -0
  113. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  114. package/dest/public/avm/opcodes/conversion.js +267 -3
  115. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  116. package/dest/public/avm/opcodes/ec_add.js +6 -6
  117. package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
  118. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  119. package/dest/public/avm/opcodes/environment_getters.js +17 -19
  120. package/dest/public/avm/opcodes/external_calls.d.ts +8 -7
  121. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  122. package/dest/public/avm/opcodes/external_calls.js +39 -34
  123. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/hashing.js +6 -6
  125. package/dest/public/avm/opcodes/instruction.d.ts +14 -10
  126. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/instruction.js +23 -19
  128. package/dest/public/avm/opcodes/memory.d.ts +4 -4
  129. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/memory.js +37 -33
  131. package/dest/public/avm/opcodes/misc.d.ts +2 -1
  132. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/misc.js +41 -16
  134. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  135. package/dest/public/avm/opcodes/storage.js +7 -5
  136. package/dest/public/avm/revert_reason.d.ts +18 -0
  137. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  138. package/dest/public/avm/revert_reason.js +38 -0
  139. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
  140. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  141. package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
  142. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  143. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  144. package/dest/public/avm/serialization/instruction_serialization.d.ts +13 -4
  145. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  146. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  147. package/dest/public/avm/test_utils.d.ts +10 -13
  148. package/dest/public/avm/test_utils.d.ts.map +1 -1
  149. package/dest/public/avm/test_utils.js +16 -24
  150. package/dest/public/db_interfaces.d.ts +56 -0
  151. package/dest/public/db_interfaces.d.ts.map +1 -0
  152. package/dest/public/db_interfaces.js +3 -0
  153. package/dest/public/debug_fn_name.d.ts +5 -0
  154. package/dest/public/debug_fn_name.d.ts.map +1 -0
  155. package/dest/public/debug_fn_name.js +9 -0
  156. package/dest/public/executor_metrics.d.ts +10 -3
  157. package/dest/public/executor_metrics.d.ts.map +1 -1
  158. package/dest/public/executor_metrics.js +37 -6
  159. package/dest/public/executor_metrics_interface.d.ts +9 -0
  160. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  161. package/dest/public/executor_metrics_interface.js +1 -0
  162. package/dest/public/fixtures/amm_test.d.ts +10 -0
  163. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  164. package/dest/public/fixtures/amm_test.js +213 -0
  165. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  166. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  167. package/dest/public/fixtures/bulk_test.js +326 -0
  168. package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
  169. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  170. package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
  171. package/dest/public/fixtures/custom_bytecode_tests.d.ts +9 -0
  172. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  173. package/dest/public/fixtures/custom_bytecode_tests.js +109 -0
  174. package/dest/public/fixtures/index.d.ts +7 -0
  175. package/dest/public/fixtures/index.d.ts.map +1 -1
  176. package/dest/public/fixtures/index.js +7 -0
  177. package/dest/public/fixtures/minimal_public_tx.d.ts +10 -0
  178. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  179. package/dest/public/fixtures/minimal_public_tx.js +29 -0
  180. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +35 -13
  181. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  182. package/dest/public/fixtures/public_tx_simulation_tester.js +96 -71
  183. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
  184. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  185. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  186. package/dest/public/fixtures/token_test.d.ts +8 -0
  187. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  188. package/dest/public/fixtures/token_test.js +95 -0
  189. package/dest/public/fixtures/utils.d.ts +16 -3
  190. package/dest/public/fixtures/utils.d.ts.map +1 -1
  191. package/dest/public/fixtures/utils.js +100 -58
  192. package/dest/public/hinting_db_sources.d.ts +70 -0
  193. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  194. package/dest/public/hinting_db_sources.js +297 -0
  195. package/dest/public/index.d.ts +4 -8
  196. package/dest/public/index.d.ts.map +1 -1
  197. package/dest/public/index.js +4 -7
  198. package/dest/public/public_db_sources.d.ts +30 -39
  199. package/dest/public/public_db_sources.d.ts.map +1 -1
  200. package/dest/public/public_db_sources.js +151 -67
  201. package/dest/public/public_errors.d.ts +12 -0
  202. package/dest/public/public_errors.d.ts.map +1 -0
  203. package/dest/public/public_errors.js +13 -0
  204. package/dest/public/public_processor/guarded_merkle_tree.d.ts +49 -0
  205. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  206. package/dest/public/public_processor/guarded_merkle_tree.js +108 -0
  207. package/dest/public/public_processor/public_processor.d.ts +25 -30
  208. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  209. package/dest/public/public_processor/public_processor.js +141 -96
  210. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  211. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  212. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  213. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +41 -0
  214. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  215. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +89 -0
  216. package/dest/public/public_tx_simulator/index.d.ts +4 -0
  217. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  218. package/dest/public/public_tx_simulator/index.js +2 -0
  219. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +24 -0
  220. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  221. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  222. package/dest/public/public_tx_simulator/public_tx_context.d.ts +19 -29
  223. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  224. package/dest/public/public_tx_simulator/public_tx_context.js +63 -91
  225. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +45 -47
  226. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  227. package/dest/public/public_tx_simulator/public_tx_simulator.js +209 -184
  228. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -0
  229. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  230. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  231. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  232. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  233. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  234. package/dest/public/side_effect_errors.d.ts +41 -1
  235. package/dest/public/side_effect_errors.d.ts.map +1 -1
  236. package/dest/public/side_effect_errors.js +70 -1
  237. package/dest/public/side_effect_trace.d.ts +20 -65
  238. package/dest/public/side_effect_trace.d.ts.map +1 -1
  239. package/dest/public/side_effect_trace.js +71 -121
  240. package/dest/public/side_effect_trace_interface.d.ts +11 -22
  241. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  242. package/dest/public/state_manager/index.d.ts +2 -0
  243. package/dest/public/state_manager/index.d.ts.map +1 -0
  244. package/dest/public/state_manager/index.js +1 -0
  245. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +2 -5
  246. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  247. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  248. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +2 -2
  249. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  250. package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +42 -85
  251. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  252. package/dest/public/state_manager/state_manager.js +391 -0
  253. package/dest/public/test_executor_metrics.d.ts +54 -0
  254. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  255. package/dest/public/test_executor_metrics.js +306 -0
  256. package/dest/public/unique_class_ids.d.ts.map +1 -1
  257. package/dest/public/utils.d.ts +2 -4
  258. package/dest/public/utils.d.ts.map +1 -1
  259. package/dest/public/utils.js +4 -21
  260. package/dest/server.d.ts +6 -3
  261. package/dest/server.d.ts.map +1 -1
  262. package/dest/server.js +5 -2
  263. package/dest/testing.d.ts +2 -0
  264. package/dest/testing.d.ts.map +1 -0
  265. package/dest/testing.js +1 -0
  266. package/package.json +36 -31
  267. package/src/client.ts +5 -3
  268. package/src/common/errors.ts +79 -44
  269. package/src/common/index.ts +0 -1
  270. package/src/private/acvm/acvm.ts +17 -32
  271. package/src/private/acvm/acvm_types.ts +1 -1
  272. package/src/private/acvm/deserialize.ts +35 -29
  273. package/src/private/acvm/index.ts +0 -1
  274. package/src/private/acvm/serialize.ts +63 -0
  275. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
  276. package/src/private/acvm_wasm.ts +72 -0
  277. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  278. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  279. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  280. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  281. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  282. package/src/private/circuit_simulator.ts +90 -0
  283. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  284. package/src/public/avm/avm_context.ts +4 -4
  285. package/src/public/avm/avm_contract_call_result.ts +17 -5
  286. package/src/public/avm/avm_execution_environment.ts +10 -1
  287. package/src/public/avm/avm_gas.ts +23 -35
  288. package/src/public/avm/avm_machine_state.ts +5 -0
  289. package/src/public/avm/avm_memory_types.ts +19 -6
  290. package/src/public/avm/avm_simulator.ts +44 -54
  291. package/src/public/avm/avm_simulator_interface.ts +8 -0
  292. package/src/public/avm/errors.ts +8 -77
  293. package/src/public/avm/fixtures/avm_simulation_tester.ts +23 -20
  294. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
  295. package/src/public/avm/fixtures/initializers.ts +104 -0
  296. package/src/public/avm/fixtures/utils.ts +150 -0
  297. package/src/public/avm/index.ts +0 -2
  298. package/src/public/avm/opcodes/accrued_substate.ts +64 -29
  299. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  300. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  301. package/src/public/avm/opcodes/bitwise.ts +33 -29
  302. package/src/public/avm/opcodes/comparators.ts +6 -3
  303. package/src/public/avm/opcodes/contract.ts +10 -7
  304. package/src/public/avm/opcodes/control_flow.ts +19 -10
  305. package/src/public/avm/opcodes/conversion.ts +27 -3
  306. package/src/public/avm/opcodes/ec_add.ts +9 -6
  307. package/src/public/avm/opcodes/environment_getters.ts +27 -22
  308. package/src/public/avm/opcodes/external_calls.ts +61 -29
  309. package/src/public/avm/opcodes/hashing.ts +28 -8
  310. package/src/public/avm/opcodes/instruction.ts +31 -21
  311. package/src/public/avm/opcodes/memory.ts +71 -32
  312. package/src/public/avm/opcodes/misc.ts +60 -18
  313. package/src/public/avm/opcodes/storage.ts +22 -6
  314. package/src/public/avm/revert_reason.ts +55 -0
  315. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  316. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  317. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  318. package/src/public/avm/test_utils.ts +24 -41
  319. package/src/public/db_interfaces.ts +61 -0
  320. package/src/{common → public}/debug_fn_name.ts +7 -7
  321. package/src/public/executor_metrics.ts +55 -6
  322. package/src/public/executor_metrics_interface.ts +14 -0
  323. package/src/public/fixtures/amm_test.ts +331 -0
  324. package/src/public/fixtures/bulk_test.ts +169 -0
  325. package/src/public/fixtures/custom_bytecode_tester.ts +49 -0
  326. package/src/public/fixtures/custom_bytecode_tests.ts +135 -0
  327. package/src/public/fixtures/index.ts +7 -0
  328. package/src/public/fixtures/minimal_public_tx.ts +36 -0
  329. package/src/public/fixtures/public_tx_simulation_tester.ts +158 -113
  330. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  331. package/src/public/fixtures/token_test.ts +140 -0
  332. package/src/public/fixtures/utils.ts +141 -68
  333. package/src/public/hinting_db_sources.ts +505 -0
  334. package/src/public/index.ts +9 -8
  335. package/src/public/public_db_sources.ts +196 -97
  336. package/src/public/public_errors.ts +14 -0
  337. package/src/public/public_processor/guarded_merkle_tree.ts +153 -0
  338. package/src/public/public_processor/public_processor.ts +191 -153
  339. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  340. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +128 -0
  341. package/src/public/public_tx_simulator/index.ts +3 -0
  342. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +109 -0
  343. package/src/public/public_tx_simulator/public_tx_context.ts +160 -193
  344. package/src/public/public_tx_simulator/public_tx_simulator.ts +294 -220
  345. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +11 -0
  346. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  347. package/src/public/side_effect_errors.ts +91 -1
  348. package/src/public/side_effect_trace.ts +94 -320
  349. package/src/public/side_effect_trace_interface.ts +10 -58
  350. package/src/public/state_manager/index.ts +1 -0
  351. package/src/public/{avm/journal → state_manager}/nullifiers.ts +5 -11
  352. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  353. package/src/public/state_manager/state_manager.ts +560 -0
  354. package/src/public/test_executor_metrics.ts +395 -0
  355. package/src/public/utils.ts +5 -21
  356. package/src/server.ts +6 -3
  357. package/src/testing.ts +1 -0
  358. package/dest/common/db_interfaces.d.ts +0 -80
  359. package/dest/common/db_interfaces.d.ts.map +0 -1
  360. package/dest/common/db_interfaces.js +0 -1
  361. package/dest/common/debug_fn_name.d.ts +0 -5
  362. package/dest/common/debug_fn_name.d.ts.map +0 -1
  363. package/dest/common/debug_fn_name.js +0 -6
  364. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  365. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  366. package/dest/common/message_load_oracle_inputs.js +0 -15
  367. package/dest/private/acvm/oracle/index.d.ts +0 -14
  368. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  369. package/dest/private/acvm/oracle/index.js +0 -2
  370. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  371. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  372. package/dest/private/acvm/oracle/oracle.js +0 -263
  373. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  374. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  375. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  376. package/dest/private/execution_data_provider.d.ts +0 -261
  377. package/dest/private/execution_data_provider.d.ts.map +0 -1
  378. package/dest/private/execution_data_provider.js +0 -14
  379. package/dest/private/execution_note_cache.d.ts +0 -93
  380. package/dest/private/execution_note_cache.d.ts.map +0 -1
  381. package/dest/private/execution_note_cache.js +0 -180
  382. package/dest/private/hashed_values_cache.d.ts +0 -28
  383. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  384. package/dest/private/hashed_values_cache.js +0 -46
  385. package/dest/private/index.d.ts +0 -13
  386. package/dest/private/index.d.ts.map +0 -1
  387. package/dest/private/index.js +0 -12
  388. package/dest/private/pick_notes.d.ts +0 -85
  389. package/dest/private/pick_notes.d.ts.map +0 -1
  390. package/dest/private/pick_notes.js +0 -51
  391. package/dest/private/private_execution.d.ts +0 -25
  392. package/dest/private/private_execution.d.ts.map +0 -1
  393. package/dest/private/private_execution.js +0 -92
  394. package/dest/private/private_execution_oracle.d.ts +0 -215
  395. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  396. package/dest/private/private_execution_oracle.js +0 -382
  397. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  398. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  399. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  400. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  401. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  402. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  403. package/dest/private/providers/factory.d.ts +0 -12
  404. package/dest/private/providers/factory.d.ts.map +0 -1
  405. package/dest/private/providers/simulation_provider.d.ts +0 -19
  406. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  407. package/dest/private/providers/simulation_provider.js +0 -24
  408. package/dest/private/simulator.d.ts +0 -34
  409. package/dest/private/simulator.d.ts.map +0 -1
  410. package/dest/private/simulator.js +0 -76
  411. package/dest/private/unconstrained_execution.d.ts +0 -10
  412. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  413. package/dest/private/unconstrained_execution.js +0 -27
  414. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  415. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  416. package/dest/private/unconstrained_execution_oracle.js +0 -258
  417. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  418. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  419. package/dest/public/avm/bytecode_utils.js +0 -17
  420. package/dest/public/avm/fixtures/index.d.ts +0 -84
  421. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  422. package/dest/public/avm/fixtures/index.js +0 -175
  423. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  424. package/dest/public/avm/journal/index.d.ts +0 -2
  425. package/dest/public/avm/journal/index.d.ts.map +0 -1
  426. package/dest/public/avm/journal/index.js +0 -1
  427. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  428. package/dest/public/avm/journal/journal.js +0 -486
  429. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  430. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  431. package/dest/public/bytecode_errors.d.ts +0 -4
  432. package/dest/public/bytecode_errors.d.ts.map +0 -1
  433. package/dest/public/bytecode_errors.js +0 -6
  434. package/dest/public/execution.d.ts +0 -108
  435. package/dest/public/execution.d.ts.map +0 -1
  436. package/dest/public/execution.js +0 -9
  437. package/dest/test/utils.d.ts +0 -13
  438. package/dest/test/utils.d.ts.map +0 -1
  439. package/dest/test/utils.js +0 -22
  440. package/src/common/db_interfaces.ts +0 -94
  441. package/src/common/message_load_oracle_inputs.ts +0 -15
  442. package/src/private/acvm/oracle/index.ts +0 -16
  443. package/src/private/acvm/oracle/oracle.ts +0 -455
  444. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  445. package/src/private/execution_data_provider.ts +0 -323
  446. package/src/private/execution_note_cache.ts +0 -217
  447. package/src/private/hashed_values_cache.ts +0 -55
  448. package/src/private/index.ts +0 -16
  449. package/src/private/pick_notes.ts +0 -141
  450. package/src/private/private_execution.ts +0 -151
  451. package/src/private/private_execution_oracle.ts +0 -614
  452. package/src/private/providers/acvm_wasm.ts +0 -63
  453. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  454. package/src/private/providers/simulation_provider.ts +0 -45
  455. package/src/private/simulator.ts +0 -147
  456. package/src/private/unconstrained_execution.ts +0 -50
  457. package/src/private/unconstrained_execution_oracle.ts +0 -373
  458. package/src/public/avm/bytecode_utils.ts +0 -17
  459. package/src/public/avm/fixtures/index.ts +0 -296
  460. package/src/public/avm/journal/index.ts +0 -1
  461. package/src/public/avm/journal/journal.ts +0 -742
  462. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  463. package/src/public/bytecode_errors.ts +0 -6
  464. package/src/public/execution.ts +0 -140
  465. package/src/test/utils.ts +0 -36
  466. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -1,84 +1,129 @@
1
- import { CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS, DEFAULT_GAS_LIMIT, DEPLOYER_CONTRACT_ADDRESS, MAX_L2_GAS_PER_TX_PUBLIC_PORTION, PRIVATE_LOG_SIZE_IN_FIELDS, REGISTERER_CONTRACT_ADDRESS, REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE } from '@aztec/constants';
1
+ import { CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE, CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS, CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS, DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT, DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
2
+ import { padArrayEnd } from '@aztec/foundation/collection';
2
3
  import { Fr } from '@aztec/foundation/fields';
3
- import { assertLength } from '@aztec/foundation/serialize';
4
- import { DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_TAG } from '@aztec/protocol-contracts';
4
+ import { CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG } from '@aztec/protocol-contracts';
5
5
  import { bufferAsFields } from '@aztec/stdlib/abi';
6
6
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
7
7
  import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
8
8
  import { siloNullifier } from '@aztec/stdlib/hash';
9
- import { PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, RollupValidationRequests, ScopedLogHash, countAccumulatedItems } from '@aztec/stdlib/kernel';
10
- import { ContractClassLog, PrivateLog } from '@aztec/stdlib/logs';
11
- import { Tx } from '@aztec/stdlib/tx';
12
- import { BlockHeader, TxConstantData, TxContext } from '@aztec/stdlib/tx';
9
+ import { LogHash, PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, countAccumulatedItems } from '@aztec/stdlib/kernel';
10
+ import { ContractClassLogFields, PrivateLog } from '@aztec/stdlib/logs';
11
+ import { ChonkProof } from '@aztec/stdlib/proofs';
12
+ import { BlockHeader, GlobalVariables, HashedValues, Tx, TxConstantData, TxContext } from '@aztec/stdlib/tx';
13
13
  import { strict as assert } from 'assert';
14
14
  /**
15
15
  * Craft a carrier transaction for some public calls for simulation by PublicTxSimulator.
16
- */ export async function createTxForPublicCalls(firstNullifier, setupExecutionRequests, appExecutionRequests, teardownExecutionRequest, feePayer = AztecAddress.zero(), gasUsedByPrivate = Gas.empty()) {
17
- assert(setupExecutionRequests.length > 0 || appExecutionRequests.length > 0 || teardownExecutionRequest !== undefined, "Can't create public tx with no enqueued calls");
18
- const setupCallRequests = await Promise.all(setupExecutionRequests.map((er)=>er.toCallRequest()));
19
- const appCallRequests = await Promise.all(appExecutionRequests.map((er)=>er.toCallRequest()));
16
+ */ export async function createTxForPublicCalls(privateInsertions, setupCallRequests, appCallRequests, teardownCallRequest, feePayer = AztecAddress.zero(), gasUsedByPrivate = Gas.empty(), globals = GlobalVariables.empty()) {
17
+ assert(setupCallRequests.length > 0 || appCallRequests.length > 0 || teardownCallRequest !== undefined, "Can't create public tx with no enqueued calls");
20
18
  // use max limits
21
- const gasLimits = new Gas(DEFAULT_GAS_LIMIT, MAX_L2_GAS_PER_TX_PUBLIC_PORTION);
19
+ const gasLimits = new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
22
20
  const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
23
- // TODO(#9269): Remove this fake nullifier method as we move away from 1st nullifier as hash.
24
- forPublic.nonRevertibleAccumulatedData.nullifiers[0] = firstNullifier;
25
- // We reverse order because the simulator expects it to be like a "stack" of calls to pop from
26
- for(let i = setupCallRequests.length - 1; i >= 0; i--){
27
- forPublic.nonRevertibleAccumulatedData.publicCallRequests[i] = setupCallRequests[i];
21
+ // Non revertible private insertions
22
+ if (!privateInsertions.nonRevertible?.nullifiers?.length) {
23
+ throw new Error('At least one non-revertible nullifier is required');
28
24
  }
29
- for(let i = appCallRequests.length - 1; i >= 0; i--){
30
- forPublic.revertibleAccumulatedData.publicCallRequests[i] = appCallRequests[i];
25
+ for(let i = 0; i < privateInsertions.nonRevertible.nullifiers.length; i++){
26
+ assert(i < forPublic.nonRevertibleAccumulatedData.nullifiers.length, 'Nullifier index out of bounds');
27
+ forPublic.nonRevertibleAccumulatedData.nullifiers[i] = privateInsertions.nonRevertible.nullifiers[i];
31
28
  }
32
- if (teardownExecutionRequest) {
33
- forPublic.publicTeardownCallRequest = await teardownExecutionRequest.toCallRequest();
29
+ if (privateInsertions.nonRevertible.noteHashes) {
30
+ for(let i = 0; i < privateInsertions.nonRevertible.noteHashes.length; i++){
31
+ assert(i < forPublic.nonRevertibleAccumulatedData.noteHashes.length, 'Note hash index out of bounds');
32
+ forPublic.nonRevertibleAccumulatedData.noteHashes[i] = privateInsertions.nonRevertible.noteHashes[i];
33
+ }
34
+ }
35
+ if (privateInsertions.nonRevertible.l2ToL1Msgs) {
36
+ for(let i = 0; i < privateInsertions.nonRevertible.l2ToL1Msgs.length; i++){
37
+ assert(i < forPublic.nonRevertibleAccumulatedData.l2ToL1Msgs.length, 'L2 to L1 message index out of bounds');
38
+ forPublic.nonRevertibleAccumulatedData.l2ToL1Msgs[i] = privateInsertions.nonRevertible.l2ToL1Msgs[i];
39
+ }
40
+ }
41
+ // Revertible private insertions
42
+ if (privateInsertions.revertible) {
43
+ if (privateInsertions.revertible.noteHashes) {
44
+ for(let i = 0; i < privateInsertions.revertible.noteHashes.length; i++){
45
+ assert(i < forPublic.revertibleAccumulatedData.noteHashes.length, 'Note hash index out of bounds');
46
+ forPublic.revertibleAccumulatedData.noteHashes[i] = privateInsertions.revertible.noteHashes[i];
47
+ }
48
+ }
49
+ if (privateInsertions.revertible.nullifiers) {
50
+ for(let i = 0; i < privateInsertions.revertible.nullifiers.length; i++){
51
+ assert(i < forPublic.revertibleAccumulatedData.nullifiers.length, 'Nullifier index out of bounds');
52
+ forPublic.revertibleAccumulatedData.nullifiers[i] = privateInsertions.revertible.nullifiers[i];
53
+ }
54
+ }
55
+ if (privateInsertions.revertible.l2ToL1Msgs) {
56
+ for(let i = 0; i < privateInsertions.revertible.l2ToL1Msgs.length; i++){
57
+ assert(i < forPublic.revertibleAccumulatedData.l2ToL1Msgs.length, 'L2 to L1 message index out of bounds');
58
+ forPublic.revertibleAccumulatedData.l2ToL1Msgs[i] = privateInsertions.revertible.l2ToL1Msgs[i];
59
+ }
60
+ }
61
+ }
62
+ for(let i = 0; i < setupCallRequests.length; i++){
63
+ forPublic.nonRevertibleAccumulatedData.publicCallRequests[i] = setupCallRequests[i].request;
64
+ }
65
+ for(let i = 0; i < appCallRequests.length; i++){
66
+ forPublic.revertibleAccumulatedData.publicCallRequests[i] = appCallRequests[i].request;
67
+ }
68
+ if (teardownCallRequest) {
69
+ forPublic.publicTeardownCallRequest = teardownCallRequest.request;
34
70
  }
35
71
  const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
36
- const teardownGasLimits = teardownExecutionRequest ? gasLimits : Gas.empty();
72
+ const teardownGasLimits = teardownCallRequest ? new Gas(DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT) : Gas.empty();
37
73
  const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
38
74
  const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
39
- const constantData = new TxConstantData(BlockHeader.empty(), txContext, Fr.zero(), Fr.zero());
40
- const txData = new PrivateKernelTailCircuitPublicInputs(constantData, RollupValidationRequests.empty(), /*gasUsed=*/ gasUsedByPrivate, feePayer, forPublic);
41
- const tx = Tx.newWithTxData(txData, teardownExecutionRequest);
42
- // Reverse order because the simulator expects it to be like a "stack" of calls to pop from.
43
- // Also push app calls before setup calls for this reason.
44
- for(let i = appExecutionRequests.length - 1; i >= 0; i--){
45
- tx.enqueuedPublicFunctionCalls.push(appExecutionRequests[i]);
46
- }
47
- for(let i = setupExecutionRequests.length - 1; i >= 0; i--){
48
- tx.enqueuedPublicFunctionCalls.push(setupExecutionRequests[i]);
49
- }
50
- return tx;
75
+ const header = BlockHeader.empty();
76
+ header.globalVariables = globals;
77
+ const constantData = new TxConstantData(header, txContext, Fr.zero(), Fr.zero());
78
+ const includeByTimestamp = 0n; // Not used in the simulator.
79
+ const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer, includeByTimestamp, forPublic);
80
+ const calldata = [
81
+ ...setupCallRequests,
82
+ ...appCallRequests,
83
+ ...teardownCallRequest ? [
84
+ teardownCallRequest
85
+ ] : []
86
+ ].map((r)=>new HashedValues(r.calldata, r.request.calldataHash));
87
+ return await Tx.create({
88
+ data: txData,
89
+ chonkProof: ChonkProof.random(),
90
+ contractClassLogFields: [],
91
+ publicFunctionCalldata: calldata
92
+ });
51
93
  }
52
- export function createTxForPrivateOnly(feePayer = AztecAddress.zero(), gasUsedByPrivate = new Gas(10, 10)) {
94
+ export async function createTxForPrivateOnly(feePayer = AztecAddress.zero(), gasUsedByPrivate = new Gas(10, 10)) {
53
95
  // use max limits
54
- const gasLimits = new Gas(DEFAULT_GAS_LIMIT, MAX_L2_GAS_PER_TX_PUBLIC_PORTION);
96
+ const gasLimits = new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
55
97
  const forRollup = PartialPrivateTailPublicInputsForRollup.empty();
56
98
  const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
57
99
  const gasSettings = new GasSettings(gasLimits, Gas.empty(), maxFeesPerGas, GasFees.empty());
58
100
  const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
59
101
  const constantData = new TxConstantData(BlockHeader.empty(), txContext, Fr.zero(), Fr.zero());
60
- const txData = new PrivateKernelTailCircuitPublicInputs(constantData, RollupValidationRequests.empty(), /*gasUsed=*/ gasUsedByPrivate, feePayer, /*forPublic=*/ undefined, forRollup);
61
- return Tx.newWithTxData(txData);
102
+ const includeByTimestamp = 0n; // Not used in the simulator.
103
+ const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer, includeByTimestamp, /*forPublic=*/ undefined, forRollup);
104
+ return await Tx.create({
105
+ data: txData,
106
+ chonkProof: ChonkProof.empty(),
107
+ contractClassLogFields: [],
108
+ publicFunctionCalldata: []
109
+ });
62
110
  }
63
111
  export async function addNewContractClassToTx(tx, contractClass, skipNullifierInsertion = false) {
64
112
  const contractClassLogFields = [
65
- new Fr(REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE),
113
+ new Fr(CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE),
66
114
  contractClass.id,
67
115
  new Fr(contractClass.version),
68
116
  new Fr(contractClass.artifactHash),
69
117
  new Fr(contractClass.privateFunctionsRoot),
70
118
  ...bufferAsFields(contractClass.packedBytecode, Math.ceil(contractClass.packedBytecode.length / 31) + 1)
71
119
  ];
72
- const contractClassLog = ContractClassLog.fromFields([
73
- new Fr(REGISTERER_CONTRACT_ADDRESS),
74
- ...contractClassLogFields.concat(new Array(CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS - contractClassLogFields.length).fill(Fr.ZERO))
75
- ]);
76
- const contractClassLogHash = ScopedLogHash.fromFields([
77
- await contractClassLog.hash(),
78
- new Fr(7),
79
- new Fr(contractClassLog.getEmittedLength()),
80
- new Fr(REGISTERER_CONTRACT_ADDRESS)
81
- ]);
120
+ const contractAddress = new AztecAddress(new Fr(CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS));
121
+ const emittedLength = contractClassLogFields.length;
122
+ const logFields = ContractClassLogFields.fromEmittedFields(contractClassLogFields);
123
+ const contractClassLogHash = LogHash.from({
124
+ value: await logFields.hash(),
125
+ length: emittedLength
126
+ }).scope(contractAddress);
82
127
  const accumulatedData = tx.data.forPublic ? tx.data.forPublic.revertibleAccumulatedData : tx.data.forRollup.end;
83
128
  if (!skipNullifierInsertion) {
84
129
  const nextNullifierIndex = countAccumulatedItems(accumulatedData.nullifiers);
@@ -86,7 +131,7 @@ export async function addNewContractClassToTx(tx, contractClass, skipNullifierIn
86
131
  }
87
132
  const nextLogIndex = countAccumulatedItems(accumulatedData.contractClassLogsHashes);
88
133
  accumulatedData.contractClassLogsHashes[nextLogIndex] = contractClassLogHash;
89
- tx.contractClassLogs.push(contractClassLog);
134
+ tx.contractClassLogFields.push(logFields);
90
135
  }
91
136
  export async function addNewContractInstanceToTx(tx, contractInstance, skipNullifierInsertion = false) {
92
137
  // can't use publicKeys.toFields() because it includes isInfinite which
@@ -101,21 +146,18 @@ export async function addNewContractInstanceToTx(tx, contractInstance, skipNulli
101
146
  contractInstance.publicKeys.masterTaggingPublicKey.x,
102
147
  contractInstance.publicKeys.masterTaggingPublicKey.y
103
148
  ];
104
- const fields = [
105
- DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_TAG,
149
+ const logFields = [
150
+ CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG,
106
151
  contractInstance.address.toField(),
107
152
  new Fr(contractInstance.version),
108
153
  new Fr(contractInstance.salt),
109
154
  contractInstance.currentContractClassId,
110
155
  contractInstance.initializationHash,
111
156
  ...publicKeysAsFields,
112
- contractInstance.deployer.toField(),
113
- new Fr(0),
114
- new Fr(0),
115
- new Fr(0)
157
+ contractInstance.deployer.toField()
116
158
  ];
117
- const contractInstanceLog = new PrivateLog(assertLength(fields, PRIVATE_LOG_SIZE_IN_FIELDS));
118
- const contractAddressNullifier = await siloNullifier(AztecAddress.fromNumber(DEPLOYER_CONTRACT_ADDRESS), contractInstance.address.toField());
159
+ const contractInstanceLog = new PrivateLog(padArrayEnd(logFields, Fr.ZERO, PRIVATE_LOG_SIZE_IN_FIELDS), logFields.length);
160
+ const contractAddressNullifier = await siloNullifier(AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS), contractInstance.address.toField());
119
161
  const accumulatedData = tx.data.forPublic ? tx.data.forPublic.revertibleAccumulatedData : tx.data.forRollup.end;
120
162
  if (!skipNullifierInsertion) {
121
163
  const nextNullifierIndex = countAccumulatedItems(accumulatedData.nullifiers);
@@ -0,0 +1,70 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import type { IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
3
+ import type { FunctionSelector } from '@aztec/stdlib/abi';
4
+ import { type AvmExecutionHints } from '@aztec/stdlib/avm';
5
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
6
+ import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
7
+ import { type BatchInsertionResult, type IndexedTreeId, MerkleTreeId, type MerkleTreeLeafType, type MerkleTreeWriteOperations, type SequentialInsertionResult, type TreeHeights } from '@aztec/stdlib/trees';
8
+ import type { UInt64 } from '@aztec/stdlib/types';
9
+ import type { WorldStateRevision } from '@aztec/stdlib/world-state';
10
+ import type { PublicContractsDBInterface } from './db_interfaces.js';
11
+ /**
12
+ * A public contracts database that forwards requests and collects AVM hints.
13
+ */
14
+ export declare class HintingPublicContractsDB implements PublicContractsDBInterface {
15
+ private readonly db;
16
+ private hints;
17
+ private contractClassIds;
18
+ constructor(db: PublicContractsDBInterface, hints: AvmExecutionHints);
19
+ getContractInstance(address: AztecAddress, timestamp: UInt64): Promise<ContractInstanceWithAddress | undefined>;
20
+ getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined>;
21
+ getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined>;
22
+ getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
23
+ }
24
+ /**
25
+ * A low-level merkle DB that collects hints.
26
+ */
27
+ export declare class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
28
+ private db;
29
+ private hints;
30
+ private static readonly log;
31
+ private checkpointStack;
32
+ private nextCheckpointId;
33
+ private checkpointActionCounter;
34
+ static create(db: MerkleTreeWriteOperations, hints: AvmExecutionHints): Promise<HintingMerkleWriteOperations>;
35
+ private constructor();
36
+ getSiblingPath<ID extends MerkleTreeId>(treeId: ID, index: bigint): Promise<SiblingPath<TreeHeights[ID]>>;
37
+ getPreviousValueIndex<ID extends IndexedTreeId>(treeId: ID, value: bigint): Promise<{
38
+ index: bigint;
39
+ alreadyPresent: boolean;
40
+ } | undefined>;
41
+ getLeafPreimage<ID extends IndexedTreeId>(treeId: ID, index: bigint): Promise<IndexedTreeLeafPreimage | undefined>;
42
+ getLeafValue<ID extends MerkleTreeId>(treeId: ID, index: bigint): Promise<MerkleTreeLeafType<typeof treeId> | undefined>;
43
+ sequentialInsert<TreeHeight extends number, ID extends IndexedTreeId>(treeId: ID, leaves: Buffer[]): Promise<SequentialInsertionResult<TreeHeight>>;
44
+ appendLeaves<ID extends MerkleTreeId>(treeId: ID, leaves: MerkleTreeLeafType<ID>[]): Promise<void>;
45
+ createCheckpoint(): Promise<void>;
46
+ commitAllCheckpoints(): Promise<void>;
47
+ revertAllCheckpoints(): Promise<void>;
48
+ commitCheckpoint(): Promise<void>;
49
+ revertCheckpoint(): Promise<void>;
50
+ private getHintKey;
51
+ private getCurrentCheckpointId;
52
+ private getTreesStateHash;
53
+ private static logTreeChange;
54
+ private appendLeafInternal;
55
+ getTreeInfo(treeId: MerkleTreeId): Promise<import("@aztec/stdlib/trees").TreeInfo>;
56
+ getStateReference(): Promise<import("@aztec/stdlib/tx").StateReference>;
57
+ getInitialHeader(): import("@aztec/stdlib/tx").BlockHeader;
58
+ getRevision(): WorldStateRevision;
59
+ updateArchive(header: any): Promise<void>;
60
+ batchInsert<TreeHeight extends number, SubtreeSiblingPathHeight extends number, ID extends IndexedTreeId>(treeId: ID, leaves: Buffer[], subtreeHeight: number): Promise<BatchInsertionResult<TreeHeight, SubtreeSiblingPathHeight>>;
61
+ close(): Promise<void>;
62
+ findLeafIndices<ID extends MerkleTreeId>(treeId: ID, values: MerkleTreeLeafType<ID>[]): Promise<(bigint | undefined)[]>;
63
+ findSiblingPaths<ID extends MerkleTreeId>(treeId: ID, values: MerkleTreeLeafType<ID>[]): Promise<({
64
+ path: SiblingPath<TreeHeights[ID]>;
65
+ index: bigint;
66
+ } | undefined)[]>;
67
+ findLeafIndicesAfter<ID extends MerkleTreeId>(treeId: ID, values: MerkleTreeLeafType<ID>[], startIndex: bigint): Promise<(bigint | undefined)[]>;
68
+ getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(treeId: ID, leafIndices: bigint[]): Promise<(bigint | undefined)[]>;
69
+ }
70
+ //# sourceMappingURL=hinting_db_sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hinting_db_sources.d.ts","sourceRoot":"","sources":["../../src/public/hinting_db_sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,297 @@
1
+ import { sha256Trunc } from '@aztec/foundation/crypto';
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+ import { AvmAppendLeavesHint, AvmBytecodeCommitmentHint, AvmCommitCheckpointHint, AvmContractClassHint, AvmContractInstanceHint, AvmCreateCheckpointHint, AvmGetLeafPreimageHintNullifierTree, AvmGetLeafPreimageHintPublicDataTree, AvmGetLeafValueHint, AvmGetPreviousValueIndexHint, AvmGetSiblingPathHint, AvmRevertCheckpointHint, AvmSequentialInsertHintNullifierTree, AvmSequentialInsertHintPublicDataTree } from '@aztec/stdlib/avm';
5
+ import { AppendOnlyTreeSnapshot, MerkleTreeId, NullifierLeaf, PublicDataTreeLeaf, getTreeName, merkleTreeIds } from '@aztec/stdlib/trees';
6
+ import { TreeSnapshots } from '@aztec/stdlib/tx';
7
+ import { strict as assert } from 'assert';
8
+ /**
9
+ * A public contracts database that forwards requests and collects AVM hints.
10
+ */ export class HintingPublicContractsDB {
11
+ db;
12
+ hints;
13
+ // We deduplicate contract classes because they include the whole bytecode.
14
+ contractClassIds;
15
+ constructor(db, hints){
16
+ this.db = db;
17
+ this.hints = hints;
18
+ this.contractClassIds = new Set();
19
+ }
20
+ async getContractInstance(address, timestamp) {
21
+ const instance = await this.db.getContractInstance(address, timestamp);
22
+ if (instance) {
23
+ // We don't need to hint the block number because it doesn't change.
24
+ this.hints.contractInstances.push(new AvmContractInstanceHint(instance.address, instance.salt, instance.deployer, instance.currentContractClassId, instance.originalContractClassId, instance.initializationHash, instance.publicKeys));
25
+ }
26
+ return instance;
27
+ }
28
+ async getContractClass(contractClassId) {
29
+ const contractClass = await this.db.getContractClass(contractClassId);
30
+ if (contractClass && !this.contractClassIds.has(contractClassId.toBigInt())) {
31
+ this.contractClassIds.add(contractClassId.toBigInt());
32
+ this.hints.contractClasses.push(new AvmContractClassHint(contractClass.id, contractClass.artifactHash, contractClass.privateFunctionsRoot, contractClass.packedBytecode));
33
+ }
34
+ return contractClass;
35
+ }
36
+ async getBytecodeCommitment(contractClassId) {
37
+ const commitment = await this.db.getBytecodeCommitment(contractClassId);
38
+ if (commitment) {
39
+ this.hints.bytecodeCommitments.push(new AvmBytecodeCommitmentHint(contractClassId, commitment));
40
+ }
41
+ return commitment;
42
+ }
43
+ async getDebugFunctionName(contractAddress, selector) {
44
+ return await this.db.getDebugFunctionName(contractAddress, selector);
45
+ }
46
+ }
47
+ /**
48
+ * A low-level merkle DB that collects hints.
49
+ */ export class HintingMerkleWriteOperations {
50
+ db;
51
+ hints;
52
+ static log = createLogger('simulator:hinting-merkle-db');
53
+ // This stack is only for debugging purposes.
54
+ // The top of the stack is the current checkpoint id.
55
+ // We need the stack to be non-empty and use 0 as an arbitrary initial checkpoint id.
56
+ // This is not necessarily a checkpoint that happened, but whatever tree state we start with.
57
+ checkpointStack;
58
+ nextCheckpointId;
59
+ checkpointActionCounter;
60
+ static async create(db, hints) {
61
+ const hintingTreesDB = new HintingMerkleWriteOperations(db, hints);
62
+ const startStateReference = await db.getStateReference();
63
+ hints.startingTreeRoots = new TreeSnapshots(startStateReference.l1ToL2MessageTree, startStateReference.partial.noteHashTree, startStateReference.partial.nullifierTree, startStateReference.partial.publicDataTree);
64
+ return hintingTreesDB;
65
+ }
66
+ // Use create() to instantiate.
67
+ constructor(db, hints){
68
+ this.db = db;
69
+ this.hints = hints;
70
+ this.checkpointStack = [
71
+ 0
72
+ ];
73
+ this.nextCheckpointId = 1;
74
+ this.checkpointActionCounter = 0;
75
+ }
76
+ // Getters.
77
+ async getSiblingPath(treeId, index) {
78
+ const path = await this.db.getSiblingPath(treeId, index);
79
+ const key = await this.getHintKey(treeId);
80
+ this.hints.getSiblingPathHints.push(new AvmGetSiblingPathHint(key, treeId, index, path.toFields()));
81
+ return Promise.resolve(path);
82
+ }
83
+ async getPreviousValueIndex(treeId, value) {
84
+ const result = await this.db.getPreviousValueIndex(treeId, value);
85
+ if (result === undefined) {
86
+ throw new Error(`getPreviousValueIndex(${getTreeName(treeId)}, ${value}}) returned undefined. Possible wrong tree setup or corrupted state.`);
87
+ }
88
+ const key = await this.getHintKey(treeId);
89
+ this.hints.getPreviousValueIndexHints.push(new AvmGetPreviousValueIndexHint(key, treeId, new Fr(value), result.index, result.alreadyPresent));
90
+ return result;
91
+ }
92
+ async getLeafPreimage(treeId, index) {
93
+ const preimage = await this.db.getLeafPreimage(treeId, index);
94
+ if (preimage) {
95
+ const key = await this.getHintKey(treeId);
96
+ switch(treeId){
97
+ case MerkleTreeId.PUBLIC_DATA_TREE:
98
+ this.hints.getLeafPreimageHintsPublicDataTree.push(new AvmGetLeafPreimageHintPublicDataTree(key, index, preimage));
99
+ break;
100
+ case MerkleTreeId.NULLIFIER_TREE:
101
+ this.hints.getLeafPreimageHintsNullifierTree.push(new AvmGetLeafPreimageHintNullifierTree(key, index, preimage));
102
+ break;
103
+ default:
104
+ // Use getLeafValue for the other trees.
105
+ throw new Error('getLeafPreimage only supported for PublicDataTree and NullifierTree!');
106
+ break;
107
+ }
108
+ }
109
+ return preimage;
110
+ }
111
+ async getLeafValue(treeId, index) {
112
+ // Use getLeafPreimage for PublicDataTree and NullifierTree.
113
+ assert(treeId == MerkleTreeId.NOTE_HASH_TREE || treeId == MerkleTreeId.L1_TO_L2_MESSAGE_TREE);
114
+ const value = await this.db.getLeafValue(treeId, index);
115
+ if (value) {
116
+ const key = await this.getHintKey(treeId);
117
+ // We can cast to Fr because we know the type of the tree.
118
+ this.hints.getLeafValueHints.push(new AvmGetLeafValueHint(key, treeId, index, value));
119
+ }
120
+ return value;
121
+ }
122
+ // State modification.
123
+ // FIXME(fcarreiro): This is a horrible interface (in the merkle ops). It's receiving the leaves as buffers,
124
+ // from a leaf class that is NOT the one that will be used to write. Make this type safe.
125
+ async sequentialInsert(treeId, leaves) {
126
+ // Use appendLeaf for NoteHashTree and L1ToL2MessageTree.
127
+ assert(treeId == MerkleTreeId.PUBLIC_DATA_TREE || treeId == MerkleTreeId.NULLIFIER_TREE);
128
+ // We only support 1 leaf at a time for now. Can easily be extended.
129
+ assert(leaves.length === 1, 'sequentialInsert supports only one leaf at a time!');
130
+ const beforeState = await this.getHintKey(treeId);
131
+ const result = await this.db.sequentialInsert(treeId, leaves);
132
+ const afterState = await this.getHintKey(treeId);
133
+ HintingMerkleWriteOperations.logTreeChange('sequentialInsert', beforeState, afterState, treeId);
134
+ switch(treeId){
135
+ case MerkleTreeId.PUBLIC_DATA_TREE:
136
+ this.hints.sequentialInsertHintsPublicDataTree.push(new AvmSequentialInsertHintPublicDataTree(beforeState, afterState, treeId, PublicDataTreeLeaf.fromBuffer(leaves[0]), {
137
+ leaf: result.lowLeavesWitnessData[0].leafPreimage,
138
+ index: result.lowLeavesWitnessData[0].index,
139
+ path: result.lowLeavesWitnessData[0].siblingPath.toFields()
140
+ }, {
141
+ leaf: result.insertionWitnessData[0].leafPreimage,
142
+ index: result.insertionWitnessData[0].index,
143
+ path: result.insertionWitnessData[0].siblingPath.toFields()
144
+ }));
145
+ break;
146
+ case MerkleTreeId.NULLIFIER_TREE:
147
+ this.hints.sequentialInsertHintsNullifierTree.push(new AvmSequentialInsertHintNullifierTree(beforeState, afterState, treeId, NullifierLeaf.fromBuffer(leaves[0]), {
148
+ leaf: result.lowLeavesWitnessData[0].leafPreimage,
149
+ index: result.lowLeavesWitnessData[0].index,
150
+ path: result.lowLeavesWitnessData[0].siblingPath.toFields()
151
+ }, {
152
+ leaf: result.insertionWitnessData[0].leafPreimage,
153
+ index: result.insertionWitnessData[0].index,
154
+ path: result.insertionWitnessData[0].siblingPath.toFields()
155
+ }));
156
+ break;
157
+ default:
158
+ throw new Error('sequentialInsert only supported for PublicDataTree and NullifierTree!');
159
+ break;
160
+ }
161
+ return result;
162
+ }
163
+ async appendLeaves(treeId, leaves) {
164
+ // Use sequentialInsert for PublicDataTree and NullifierTree.
165
+ assert(treeId == MerkleTreeId.NOTE_HASH_TREE || treeId == MerkleTreeId.L1_TO_L2_MESSAGE_TREE);
166
+ // We need to process each leaf individually because we need the sibling path after insertion, to be able to constraint the insertion.
167
+ // TODO(https://github.com/AztecProtocol/aztec-packages/issues/13380): This can be changed if the world state appendLeaves returns the sibling paths.
168
+ if (leaves.length === 1) {
169
+ await this.appendLeafInternal(treeId, leaves[0]);
170
+ return;
171
+ } else {
172
+ // TODO(dbanks12): NON-HINTING! We skip hinting here for now because:
173
+ // 1. We only ever append multiple leaves (for now) when padding (all empty leaves).
174
+ // 2. We don't need hints per-item when padding.
175
+ // 3. In order to get per-item hints today, you need to append one-at-a-time (mentioned above), which is VERY slow.
176
+ await this.db.appendLeaves(treeId, leaves);
177
+ }
178
+ }
179
+ async createCheckpoint() {
180
+ const actionCounter = this.checkpointActionCounter++;
181
+ const oldCheckpointId = this.getCurrentCheckpointId();
182
+ const treesStateHash = await this.getTreesStateHash();
183
+ await this.db.createCheckpoint();
184
+ this.checkpointStack.push(this.nextCheckpointId++);
185
+ const newCheckpointId = this.getCurrentCheckpointId();
186
+ this.hints.createCheckpointHints.push(new AvmCreateCheckpointHint(actionCounter, oldCheckpointId, newCheckpointId));
187
+ HintingMerkleWriteOperations.log.trace(`[createCheckpoint:${actionCounter}] Checkpoint evolved ${oldCheckpointId} -> ${newCheckpointId} at trees state ${treesStateHash}.`);
188
+ }
189
+ commitAllCheckpoints() {
190
+ throw new Error('commitAllCheckpoints is not supported in HintingMerkleWriteOperations.');
191
+ }
192
+ revertAllCheckpoints() {
193
+ throw new Error('revertAllCheckpoints is not supported in HintingMerkleWriteOperations.');
194
+ }
195
+ async commitCheckpoint() {
196
+ const actionCounter = this.checkpointActionCounter++;
197
+ const oldCheckpointId = this.getCurrentCheckpointId();
198
+ const treesStateHash = await this.getTreesStateHash();
199
+ await this.db.commitCheckpoint();
200
+ this.checkpointStack.pop();
201
+ const newCheckpointId = this.getCurrentCheckpointId();
202
+ this.hints.commitCheckpointHints.push(new AvmCommitCheckpointHint(actionCounter, oldCheckpointId, newCheckpointId));
203
+ HintingMerkleWriteOperations.log.trace(`[commitCheckpoint:${actionCounter}] Checkpoint evolved ${oldCheckpointId} -> ${newCheckpointId} at trees state ${treesStateHash}.`);
204
+ }
205
+ async revertCheckpoint() {
206
+ const actionCounter = this.checkpointActionCounter++;
207
+ const oldCheckpointId = this.getCurrentCheckpointId();
208
+ const treesStateHash = await this.getTreesStateHash();
209
+ const beforeState = {
210
+ [MerkleTreeId.PUBLIC_DATA_TREE]: await this.getHintKey(MerkleTreeId.PUBLIC_DATA_TREE),
211
+ [MerkleTreeId.NULLIFIER_TREE]: await this.getHintKey(MerkleTreeId.NULLIFIER_TREE),
212
+ [MerkleTreeId.NOTE_HASH_TREE]: await this.getHintKey(MerkleTreeId.NOTE_HASH_TREE),
213
+ [MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: await this.getHintKey(MerkleTreeId.L1_TO_L2_MESSAGE_TREE),
214
+ [MerkleTreeId.ARCHIVE]: await this.getHintKey(MerkleTreeId.ARCHIVE)
215
+ };
216
+ await this.db.revertCheckpoint();
217
+ this.checkpointStack.pop();
218
+ const newCheckpointId = this.getCurrentCheckpointId();
219
+ const afterState = {
220
+ [MerkleTreeId.PUBLIC_DATA_TREE]: await this.getHintKey(MerkleTreeId.PUBLIC_DATA_TREE),
221
+ [MerkleTreeId.NULLIFIER_TREE]: await this.getHintKey(MerkleTreeId.NULLIFIER_TREE),
222
+ [MerkleTreeId.NOTE_HASH_TREE]: await this.getHintKey(MerkleTreeId.NOTE_HASH_TREE),
223
+ [MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: await this.getHintKey(MerkleTreeId.L1_TO_L2_MESSAGE_TREE),
224
+ [MerkleTreeId.ARCHIVE]: await this.getHintKey(MerkleTreeId.ARCHIVE)
225
+ };
226
+ this.hints.revertCheckpointHints.push(AvmRevertCheckpointHint.create(actionCounter, oldCheckpointId, newCheckpointId, beforeState, afterState));
227
+ HintingMerkleWriteOperations.log.trace(`[revertCheckpoint:${actionCounter}] Checkpoint evolved ${oldCheckpointId} -> ${newCheckpointId} at trees state ${treesStateHash}.`);
228
+ for (const treeId of merkleTreeIds()){
229
+ HintingMerkleWriteOperations.logTreeChange('revertCheckpoint', beforeState[treeId], afterState[treeId], treeId);
230
+ }
231
+ }
232
+ // Private methods.
233
+ async getHintKey(treeId) {
234
+ const treeInfo = await this.db.getTreeInfo(treeId);
235
+ return new AppendOnlyTreeSnapshot(Fr.fromBuffer(treeInfo.root), Number(treeInfo.size));
236
+ }
237
+ getCurrentCheckpointId() {
238
+ return this.checkpointStack[this.checkpointStack.length - 1];
239
+ }
240
+ // For logging/debugging purposes.
241
+ async getTreesStateHash() {
242
+ const stateReferenceFields = (await this.db.getStateReference()).toFields();
243
+ return Fr.fromBuffer(sha256Trunc(Buffer.concat(stateReferenceFields.map((field)=>field.toBuffer()))));
244
+ }
245
+ static logTreeChange(action, beforeState, afterState, treeId) {
246
+ const treeName = getTreeName(treeId);
247
+ HintingMerkleWriteOperations.log.trace(`[${action}] ${treeName} tree state: ${beforeState.root}, ${beforeState.nextAvailableLeafIndex} -> ${afterState.root}, ${afterState.nextAvailableLeafIndex}.`);
248
+ }
249
+ async appendLeafInternal(treeId, leaf) {
250
+ // Use sequentialInsert for PublicDataTree and NullifierTree.
251
+ assert(treeId == MerkleTreeId.NOTE_HASH_TREE || treeId == MerkleTreeId.L1_TO_L2_MESSAGE_TREE);
252
+ const beforeState = await this.getHintKey(treeId);
253
+ await this.db.appendLeaves(treeId, [
254
+ leaf
255
+ ]);
256
+ const afterState = await this.getHintKey(treeId);
257
+ HintingMerkleWriteOperations.logTreeChange('appendLeaves', beforeState, afterState, treeId);
258
+ this.hints.appendLeavesHints.push(new AvmAppendLeavesHint(beforeState, afterState, treeId, [
259
+ leaf
260
+ ]));
261
+ return await this.getSiblingPath(treeId, BigInt(beforeState.nextAvailableLeafIndex));
262
+ }
263
+ // Non-hinted required methods from MerkleTreeWriteOperations interface
264
+ async getTreeInfo(treeId) {
265
+ return await this.db.getTreeInfo(treeId);
266
+ }
267
+ async getStateReference() {
268
+ return await this.db.getStateReference();
269
+ }
270
+ getInitialHeader() {
271
+ return this.db.getInitialHeader();
272
+ }
273
+ getRevision() {
274
+ return this.db.getRevision();
275
+ }
276
+ async updateArchive(header) {
277
+ return await this.db.updateArchive(header);
278
+ }
279
+ async batchInsert(treeId, leaves, subtreeHeight) {
280
+ return await this.db.batchInsert(treeId, leaves, subtreeHeight);
281
+ }
282
+ async close() {
283
+ return await this.db.close();
284
+ }
285
+ async findLeafIndices(treeId, values) {
286
+ return await this.db.findLeafIndices(treeId, values);
287
+ }
288
+ findSiblingPaths(treeId, values) {
289
+ return this.db.findSiblingPaths(treeId, values);
290
+ }
291
+ async findLeafIndicesAfter(treeId, values, startIndex) {
292
+ return await this.db.findLeafIndicesAfter(treeId, values, startIndex);
293
+ }
294
+ async getBlockNumbersForLeafIndices(treeId, leafIndices) {
295
+ return await this.db.getBlockNumbersForLeafIndices(treeId, leafIndices);
296
+ }
297
+ }
@@ -1,10 +1,6 @@
1
- export * from '../common/db_interfaces.js';
2
- export * from './public_tx_simulator/public_tx_simulator.js';
3
- export { type EnqueuedPublicCallExecutionResult, type PublicFunctionCallResult } from './execution.js';
4
- export * from './public_db_sources.js';
1
+ export { PublicContractsDB } from './public_db_sources.js';
2
+ export { GuardedMerkleTreeOperations } from './public_processor/guarded_merkle_tree.js';
5
3
  export { PublicProcessor, PublicProcessorFactory } from './public_processor/public_processor.js';
6
- export { SideEffectTrace } from './side_effect_trace.js';
7
- export { getExecutionRequestsByPhase } from './utils.js';
8
- export { PublicTxSimulationTester } from './fixtures/index.js';
9
- export * from './avm/index.js';
4
+ export { PublicTxSimulator, type PublicTxSimulatorConfig, TelemetryPublicTxSimulator, type PublicTxResult, } from './public_tx_simulator/index.js';
5
+ export { getCallRequestsWithCalldataByPhase } from './utils.js';
10
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/public/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8CAA8C,CAAC;AAC7D,OAAO,EAAE,KAAK,iCAAiC,EAAE,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACvG,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/public/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACjG,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,EAC5B,0BAA0B,EAC1B,KAAK,cAAc,GACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,kCAAkC,EAAE,MAAM,YAAY,CAAC"}
@@ -1,8 +1,5 @@
1
- export * from '../common/db_interfaces.js';
2
- export * from './public_tx_simulator/public_tx_simulator.js';
3
- export * from './public_db_sources.js';
1
+ export { PublicContractsDB } from './public_db_sources.js';
2
+ export { GuardedMerkleTreeOperations } from './public_processor/guarded_merkle_tree.js';
4
3
  export { PublicProcessor, PublicProcessorFactory } from './public_processor/public_processor.js';
5
- export { SideEffectTrace } from './side_effect_trace.js';
6
- export { getExecutionRequestsByPhase } from './utils.js';
7
- export { PublicTxSimulationTester } from './fixtures/index.js';
8
- export * from './avm/index.js';
4
+ export { PublicTxSimulator, TelemetryPublicTxSimulator } from './public_tx_simulator/index.js';
5
+ export { getCallRequestsWithCalldataByPhase } from './utils.js';