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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +5 -3
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +4 -7
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +0 -1
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/private/acvm/acvm.d.ts +11 -5
  12. package/dest/private/acvm/acvm.d.ts.map +1 -1
  13. package/dest/private/acvm/acvm.js +10 -16
  14. package/dest/private/acvm/acvm_types.d.ts +1 -1
  15. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  16. package/dest/private/acvm/deserialize.d.ts +17 -18
  17. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.js +31 -23
  19. package/dest/private/acvm/index.d.ts +0 -1
  20. package/dest/private/acvm/index.d.ts.map +1 -1
  21. package/dest/private/acvm/index.js +0 -1
  22. package/dest/private/acvm/serialize.d.ts +19 -2
  23. package/dest/private/acvm/serialize.d.ts.map +1 -1
  24. package/dest/private/acvm/serialize.js +53 -0
  25. package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +10 -10
  26. package/dest/private/acvm_native.d.ts.map +1 -0
  27. package/dest/private/{providers/acvm_native.js → acvm_native.js} +11 -7
  28. package/dest/private/acvm_wasm.d.ts +15 -0
  29. package/dest/private/acvm_wasm.d.ts.map +1 -0
  30. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  31. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  32. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  33. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  34. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  35. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  36. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  37. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  38. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  40. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  41. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  43. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  44. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  46. package/dest/private/circuit_simulator.d.ts +35 -0
  47. package/dest/private/circuit_simulator.d.ts.map +1 -0
  48. package/dest/private/circuit_simulator.js +43 -0
  49. package/dest/private/factory.d.ts +12 -0
  50. package/dest/private/factory.d.ts.map +1 -0
  51. package/dest/private/{providers/factory.js → factory.js} +2 -2
  52. package/dest/public/avm/avm_context.d.ts +5 -5
  53. package/dest/public/avm/avm_context.d.ts.map +1 -1
  54. package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
  55. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.js +11 -7
  57. package/dest/public/avm/avm_execution_environment.d.ts +2 -1
  58. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  59. package/dest/public/avm/avm_execution_environment.js +4 -2
  60. package/dest/public/avm/avm_gas.d.ts +4 -20
  61. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  62. package/dest/public/avm/avm_gas.js +27 -35
  63. package/dest/public/avm/avm_machine_state.d.ts +2 -0
  64. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  65. package/dest/public/avm/avm_machine_state.js +2 -0
  66. package/dest/public/avm/avm_memory_types.d.ts +98 -87
  67. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  68. package/dest/public/avm/avm_memory_types.js +17 -6
  69. package/dest/public/avm/avm_simulator.d.ts +4 -5
  70. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  71. package/dest/public/avm/avm_simulator.js +13 -18
  72. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  73. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  74. package/dest/public/avm/avm_simulator_interface.js +3 -0
  75. package/dest/public/avm/errors.d.ts +1 -16
  76. package/dest/public/avm/errors.d.ts.map +1 -1
  77. package/dest/public/avm/errors.js +0 -37
  78. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +3 -3
  79. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  80. package/dest/public/avm/fixtures/avm_simulation_tester.js +10 -11
  81. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +4 -4
  82. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +16 -15
  84. package/dest/public/avm/fixtures/initializers.d.ts +43 -0
  85. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  86. package/dest/public/avm/fixtures/initializers.js +42 -0
  87. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  88. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  89. package/dest/public/avm/fixtures/utils.js +95 -0
  90. package/dest/public/avm/index.d.ts +0 -2
  91. package/dest/public/avm/index.d.ts.map +1 -1
  92. package/dest/public/avm/index.js +0 -2
  93. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  94. package/dest/public/avm/opcodes/accrued_substate.js +22 -19
  95. package/dest/public/avm/opcodes/addressing_mode.d.ts +11 -7
  96. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/addressing_mode.js +48 -27
  98. package/dest/public/avm/opcodes/arithmetic.d.ts +11 -1
  99. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  101. package/dest/public/avm/opcodes/bitwise.d.ts +5 -13
  102. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/bitwise.js +19 -26
  104. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  105. package/dest/public/avm/opcodes/comparators.js +3 -3
  106. package/dest/public/avm/opcodes/contract.d.ts +1 -2
  107. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  108. package/dest/public/avm/opcodes/contract.js +9 -10
  109. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  110. package/dest/public/avm/opcodes/control_flow.js +10 -8
  111. package/dest/public/avm/opcodes/conversion.d.ts +1 -0
  112. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  113. package/dest/public/avm/opcodes/conversion.js +264 -3
  114. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/ec_add.js +2 -2
  116. package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
  117. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/environment_getters.js +12 -12
  119. package/dest/public/avm/opcodes/external_calls.d.ts +8 -7
  120. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/external_calls.js +39 -33
  122. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  123. package/dest/public/avm/opcodes/hashing.js +6 -6
  124. package/dest/public/avm/opcodes/instruction.d.ts +14 -10
  125. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  126. package/dest/public/avm/opcodes/instruction.js +18 -13
  127. package/dest/public/avm/opcodes/memory.d.ts +4 -4
  128. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  129. package/dest/public/avm/opcodes/memory.js +37 -33
  130. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  131. package/dest/public/avm/opcodes/misc.js +17 -12
  132. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/storage.js +7 -5
  134. package/dest/public/avm/revert_reason.d.ts +18 -0
  135. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  136. package/dest/public/avm/revert_reason.js +38 -0
  137. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
  138. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  139. package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
  140. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  141. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  142. package/dest/public/avm/serialization/instruction_serialization.d.ts +5 -4
  143. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  144. package/dest/public/avm/serialization/instruction_serialization.js +60 -35
  145. package/dest/public/avm/test_utils.d.ts +10 -13
  146. package/dest/public/avm/test_utils.d.ts.map +1 -1
  147. package/dest/public/avm/test_utils.js +12 -17
  148. package/dest/public/db_interfaces.d.ts +56 -0
  149. package/dest/public/db_interfaces.d.ts.map +1 -0
  150. package/dest/public/db_interfaces.js +3 -0
  151. package/dest/public/debug_fn_name.d.ts +5 -0
  152. package/dest/public/debug_fn_name.d.ts.map +1 -0
  153. package/dest/public/debug_fn_name.js +9 -0
  154. package/dest/public/executor_metrics.d.ts +10 -3
  155. package/dest/public/executor_metrics.d.ts.map +1 -1
  156. package/dest/public/executor_metrics.js +37 -6
  157. package/dest/public/executor_metrics_interface.d.ts +9 -0
  158. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  159. package/dest/public/executor_metrics_interface.js +1 -0
  160. package/dest/public/fixtures/amm_test.d.ts +10 -0
  161. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  162. package/dest/public/fixtures/amm_test.js +213 -0
  163. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  164. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  165. package/dest/public/fixtures/bulk_test.js +393 -0
  166. package/dest/public/fixtures/index.d.ts +6 -0
  167. package/dest/public/fixtures/index.d.ts.map +1 -1
  168. package/dest/public/fixtures/index.js +6 -0
  169. package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
  170. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  171. package/dest/public/fixtures/minimal_public_tx.js +43 -0
  172. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +33 -13
  173. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  174. package/dest/public/fixtures/public_tx_simulation_tester.js +90 -70
  175. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
  176. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  177. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  178. package/dest/public/fixtures/token_test.d.ts +8 -0
  179. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  180. package/dest/public/fixtures/token_test.js +95 -0
  181. package/dest/public/fixtures/utils.d.ts +16 -3
  182. package/dest/public/fixtures/utils.d.ts.map +1 -1
  183. package/dest/public/fixtures/utils.js +100 -58
  184. package/dest/public/hinting_db_sources.d.ts +68 -0
  185. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  186. package/dest/public/hinting_db_sources.js +294 -0
  187. package/dest/public/index.d.ts +4 -8
  188. package/dest/public/index.d.ts.map +1 -1
  189. package/dest/public/index.js +4 -7
  190. package/dest/public/public_db_sources.d.ts +30 -39
  191. package/dest/public/public_db_sources.d.ts.map +1 -1
  192. package/dest/public/public_db_sources.js +141 -67
  193. package/dest/public/public_processor/guarded_merkle_tree.d.ts +47 -0
  194. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  195. package/dest/public/public_processor/guarded_merkle_tree.js +105 -0
  196. package/dest/public/public_processor/public_processor.d.ts +19 -29
  197. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  198. package/dest/public/public_processor/public_processor.js +133 -94
  199. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  200. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  201. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  202. package/dest/public/public_tx_simulator/index.d.ts +3 -0
  203. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  204. package/dest/public/public_tx_simulator/index.js +2 -0
  205. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +23 -0
  206. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  207. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +52 -0
  208. package/dest/public/public_tx_simulator/public_tx_context.d.ts +17 -29
  209. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  210. package/dest/public/public_tx_simulator/public_tx_context.js +59 -91
  211. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +27 -42
  212. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  213. package/dest/public/public_tx_simulator/public_tx_simulator.js +128 -171
  214. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +20 -0
  215. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  216. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  217. package/dest/public/side_effect_trace.d.ts +10 -62
  218. package/dest/public/side_effect_trace.d.ts.map +1 -1
  219. package/dest/public/side_effect_trace.js +43 -108
  220. package/dest/public/side_effect_trace_interface.d.ts +5 -22
  221. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  222. package/dest/public/state_manager/index.d.ts +2 -0
  223. package/dest/public/state_manager/index.d.ts.map +1 -0
  224. package/dest/public/state_manager/index.js +1 -0
  225. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +2 -2
  226. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  227. package/dest/public/{avm/journal → state_manager}/nullifiers.js +2 -2
  228. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +2 -2
  229. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  230. package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +37 -85
  231. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  232. package/dest/public/state_manager/state_manager.js +352 -0
  233. package/dest/public/test_executor_metrics.d.ts +54 -0
  234. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  235. package/dest/public/test_executor_metrics.js +306 -0
  236. package/dest/public/unique_class_ids.d.ts.map +1 -1
  237. package/dest/public/utils.d.ts +2 -4
  238. package/dest/public/utils.d.ts.map +1 -1
  239. package/dest/public/utils.js +4 -21
  240. package/dest/server.d.ts +6 -3
  241. package/dest/server.d.ts.map +1 -1
  242. package/dest/server.js +5 -2
  243. package/dest/testing.d.ts +2 -0
  244. package/dest/testing.d.ts.map +1 -0
  245. package/dest/testing.js +1 -0
  246. package/package.json +31 -30
  247. package/src/client.ts +5 -3
  248. package/src/common/errors.ts +79 -44
  249. package/src/common/index.ts +0 -1
  250. package/src/private/acvm/acvm.ts +17 -32
  251. package/src/private/acvm/acvm_types.ts +1 -1
  252. package/src/private/acvm/deserialize.ts +35 -29
  253. package/src/private/acvm/index.ts +0 -1
  254. package/src/private/acvm/serialize.ts +63 -0
  255. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +31 -15
  256. package/src/private/acvm_wasm.ts +72 -0
  257. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  258. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  259. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  260. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  261. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  262. package/src/private/circuit_simulator.ts +90 -0
  263. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  264. package/src/public/avm/avm_context.ts +4 -4
  265. package/src/public/avm/avm_contract_call_result.ts +17 -5
  266. package/src/public/avm/avm_execution_environment.ts +7 -1
  267. package/src/public/avm/avm_gas.ts +23 -35
  268. package/src/public/avm/avm_machine_state.ts +5 -0
  269. package/src/public/avm/avm_memory_types.ts +19 -6
  270. package/src/public/avm/avm_simulator.ts +30 -29
  271. package/src/public/avm/avm_simulator_interface.ts +8 -0
  272. package/src/public/avm/errors.ts +1 -53
  273. package/src/public/avm/fixtures/avm_simulation_tester.ts +19 -18
  274. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +15 -14
  275. package/src/public/avm/fixtures/initializers.ts +103 -0
  276. package/src/public/avm/fixtures/utils.ts +150 -0
  277. package/src/public/avm/index.ts +0 -2
  278. package/src/public/avm/opcodes/accrued_substate.ts +62 -27
  279. package/src/public/avm/opcodes/addressing_mode.ts +57 -33
  280. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  281. package/src/public/avm/opcodes/bitwise.ts +33 -29
  282. package/src/public/avm/opcodes/comparators.ts +6 -3
  283. package/src/public/avm/opcodes/contract.ts +10 -7
  284. package/src/public/avm/opcodes/control_flow.ts +19 -10
  285. package/src/public/avm/opcodes/conversion.ts +23 -3
  286. package/src/public/avm/opcodes/ec_add.ts +5 -2
  287. package/src/public/avm/opcodes/environment_getters.ts +22 -15
  288. package/src/public/avm/opcodes/external_calls.ts +61 -28
  289. package/src/public/avm/opcodes/hashing.ts +28 -8
  290. package/src/public/avm/opcodes/instruction.ts +23 -15
  291. package/src/public/avm/opcodes/memory.ts +71 -32
  292. package/src/public/avm/opcodes/misc.ts +24 -16
  293. package/src/public/avm/opcodes/storage.ts +22 -6
  294. package/src/public/avm/revert_reason.ts +55 -0
  295. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  296. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  297. package/src/public/avm/serialization/instruction_serialization.ts +63 -34
  298. package/src/public/avm/test_utils.ts +23 -32
  299. package/src/public/db_interfaces.ts +61 -0
  300. package/src/{common → public}/debug_fn_name.ts +7 -7
  301. package/src/public/executor_metrics.ts +55 -6
  302. package/src/public/executor_metrics_interface.ts +14 -0
  303. package/src/public/fixtures/amm_test.ts +331 -0
  304. package/src/public/fixtures/bulk_test.ts +151 -0
  305. package/src/public/fixtures/index.ts +6 -0
  306. package/src/public/fixtures/minimal_public_tx.ts +59 -0
  307. package/src/public/fixtures/public_tx_simulation_tester.ts +154 -113
  308. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  309. package/src/public/fixtures/token_test.ts +140 -0
  310. package/src/public/fixtures/utils.ts +141 -68
  311. package/src/public/hinting_db_sources.ts +500 -0
  312. package/src/public/index.ts +4 -8
  313. package/src/public/public_db_sources.ts +179 -96
  314. package/src/public/public_processor/guarded_merkle_tree.ts +149 -0
  315. package/src/public/public_processor/public_processor.ts +179 -139
  316. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  317. package/src/public/public_tx_simulator/index.ts +2 -0
  318. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +106 -0
  319. package/src/public/public_tx_simulator/public_tx_context.ts +153 -193
  320. package/src/public/public_tx_simulator/public_tx_simulator.ts +167 -211
  321. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +72 -0
  322. package/src/public/side_effect_trace.ts +52 -303
  323. package/src/public/side_effect_trace_interface.ts +4 -58
  324. package/src/public/state_manager/index.ts +1 -0
  325. package/src/public/{avm/journal → state_manager}/nullifiers.ts +4 -4
  326. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  327. package/src/public/state_manager/state_manager.ts +512 -0
  328. package/src/public/test_executor_metrics.ts +395 -0
  329. package/src/public/utils.ts +5 -21
  330. package/src/server.ts +6 -3
  331. package/src/testing.ts +1 -0
  332. package/dest/common/db_interfaces.d.ts +0 -80
  333. package/dest/common/db_interfaces.d.ts.map +0 -1
  334. package/dest/common/db_interfaces.js +0 -1
  335. package/dest/common/debug_fn_name.d.ts +0 -5
  336. package/dest/common/debug_fn_name.d.ts.map +0 -1
  337. package/dest/common/debug_fn_name.js +0 -6
  338. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  339. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  340. package/dest/common/message_load_oracle_inputs.js +0 -15
  341. package/dest/private/acvm/oracle/index.d.ts +0 -14
  342. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  343. package/dest/private/acvm/oracle/index.js +0 -2
  344. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  345. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  346. package/dest/private/acvm/oracle/oracle.js +0 -263
  347. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  348. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  349. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  350. package/dest/private/execution_data_provider.d.ts +0 -261
  351. package/dest/private/execution_data_provider.d.ts.map +0 -1
  352. package/dest/private/execution_data_provider.js +0 -14
  353. package/dest/private/execution_note_cache.d.ts +0 -93
  354. package/dest/private/execution_note_cache.d.ts.map +0 -1
  355. package/dest/private/execution_note_cache.js +0 -180
  356. package/dest/private/hashed_values_cache.d.ts +0 -28
  357. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  358. package/dest/private/hashed_values_cache.js +0 -46
  359. package/dest/private/index.d.ts +0 -13
  360. package/dest/private/index.d.ts.map +0 -1
  361. package/dest/private/index.js +0 -12
  362. package/dest/private/pick_notes.d.ts +0 -85
  363. package/dest/private/pick_notes.d.ts.map +0 -1
  364. package/dest/private/pick_notes.js +0 -51
  365. package/dest/private/private_execution.d.ts +0 -25
  366. package/dest/private/private_execution.d.ts.map +0 -1
  367. package/dest/private/private_execution.js +0 -92
  368. package/dest/private/private_execution_oracle.d.ts +0 -215
  369. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  370. package/dest/private/private_execution_oracle.js +0 -382
  371. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  372. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  373. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  374. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  375. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  376. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  377. package/dest/private/providers/factory.d.ts +0 -12
  378. package/dest/private/providers/factory.d.ts.map +0 -1
  379. package/dest/private/providers/simulation_provider.d.ts +0 -19
  380. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  381. package/dest/private/providers/simulation_provider.js +0 -24
  382. package/dest/private/simulator.d.ts +0 -34
  383. package/dest/private/simulator.d.ts.map +0 -1
  384. package/dest/private/simulator.js +0 -76
  385. package/dest/private/unconstrained_execution.d.ts +0 -10
  386. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  387. package/dest/private/unconstrained_execution.js +0 -27
  388. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  389. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  390. package/dest/private/unconstrained_execution_oracle.js +0 -258
  391. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  392. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  393. package/dest/public/avm/bytecode_utils.js +0 -17
  394. package/dest/public/avm/fixtures/index.d.ts +0 -84
  395. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  396. package/dest/public/avm/fixtures/index.js +0 -175
  397. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  398. package/dest/public/avm/journal/index.d.ts +0 -2
  399. package/dest/public/avm/journal/index.d.ts.map +0 -1
  400. package/dest/public/avm/journal/index.js +0 -1
  401. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  402. package/dest/public/avm/journal/journal.js +0 -486
  403. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  404. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  405. package/dest/public/execution.d.ts +0 -108
  406. package/dest/public/execution.d.ts.map +0 -1
  407. package/dest/public/execution.js +0 -9
  408. package/dest/test/utils.d.ts +0 -13
  409. package/dest/test/utils.d.ts.map +0 -1
  410. package/dest/test/utils.js +0 -22
  411. package/src/common/db_interfaces.ts +0 -94
  412. package/src/common/message_load_oracle_inputs.ts +0 -15
  413. package/src/private/acvm/oracle/index.ts +0 -16
  414. package/src/private/acvm/oracle/oracle.ts +0 -455
  415. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  416. package/src/private/execution_data_provider.ts +0 -323
  417. package/src/private/execution_note_cache.ts +0 -217
  418. package/src/private/hashed_values_cache.ts +0 -55
  419. package/src/private/index.ts +0 -16
  420. package/src/private/pick_notes.ts +0 -141
  421. package/src/private/private_execution.ts +0 -151
  422. package/src/private/private_execution_oracle.ts +0 -614
  423. package/src/private/providers/acvm_wasm.ts +0 -63
  424. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  425. package/src/private/providers/simulation_provider.ts +0 -45
  426. package/src/private/simulator.ts +0 -147
  427. package/src/private/unconstrained_execution.ts +0 -50
  428. package/src/private/unconstrained_execution_oracle.ts +0 -373
  429. package/src/public/avm/bytecode_utils.ts +0 -17
  430. package/src/public/avm/fixtures/index.ts +0 -296
  431. package/src/public/avm/journal/index.ts +0 -1
  432. package/src/public/avm/journal/journal.ts +0 -742
  433. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  434. package/src/public/execution.ts +0 -140
  435. package/src/test/utils.ts +0 -36
  436. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -1,8 +1,9 @@
1
+ import { NULLIFIER_SUBTREE_HEIGHT, PUBLIC_DATA_SUBTREE_HEIGHT } from '@aztec/constants';
1
2
  import { Fr } from '@aztec/foundation/fields';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { Timer } from '@aztec/foundation/timer';
4
- import { ContractClassRegisteredEvent } from '@aztec/protocol-contracts/class-registerer';
5
- import { ContractInstanceDeployedEvent } from '@aztec/protocol-contracts/instance-deployer';
5
+ import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
6
+ import { ContractInstancePublishedEvent } from '@aztec/protocol-contracts/instance-registry';
6
7
  import type { FunctionSelector } from '@aztec/stdlib/abi';
7
8
  import { PublicDataWrite } from '@aztec/stdlib/avm';
8
9
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
@@ -13,26 +14,29 @@ import {
13
14
  computePublicBytecodeCommitment,
14
15
  } from '@aztec/stdlib/contract';
15
16
  import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
16
- import type {
17
- MerkleTreeCheckpointOperations,
18
- MerkleTreeReadOperations,
19
- MerkleTreeWriteOperations,
20
- } from '@aztec/stdlib/interfaces/server';
17
+ import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
21
18
  import { ContractClassLog, PrivateLog } from '@aztec/stdlib/logs';
22
19
  import type { PublicDBAccessStats } from '@aztec/stdlib/stats';
23
- import { MerkleTreeId, type PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
24
- import type { Tx } from '@aztec/stdlib/tx';
25
-
26
- import type { PublicContractsDB, PublicStateDB } from '../common/db_interfaces.js';
20
+ import {
21
+ MerkleTreeId,
22
+ NullifierLeaf,
23
+ PublicDataTreeLeaf,
24
+ type PublicDataTreeLeafPreimage,
25
+ getTreeName,
26
+ } from '@aztec/stdlib/trees';
27
+ import { TreeSnapshots, type Tx } from '@aztec/stdlib/tx';
28
+ import type { UInt64 } from '@aztec/stdlib/types';
29
+
30
+ import type { PublicContractsDBInterface, PublicStateDBInterface } from './db_interfaces.js';
27
31
  import { TxContractCache } from './tx_contract_cache.js';
28
32
 
29
33
  /**
30
- * Implements the PublicContractsDB using a ContractDataSource.
34
+ * Implements the PublicContractsDBInterface using a ContractDataSource.
31
35
  * Progressively records contracts in transaction as they are processed in a block.
32
36
  * Separates block-level contract information (from processed/included txs) from the
33
37
  * current tx's contract information (which may be cleared on tx revert/death).
34
38
  */
35
- export class ContractsDataSourcePublicDB implements PublicContractsDB {
39
+ export class PublicContractsDB implements PublicContractsDBInterface {
36
40
  // Two caching layers for contract classes and instances.
37
41
  // Tx-level cache:
38
42
  // - The current tx's new contract information is cached
@@ -86,12 +90,8 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
86
90
  */
87
91
  private async addNonRevertibleContractClasses(tx: Tx) {
88
92
  const siloedContractClassLogs = tx.data.forPublic
89
- ? await tx.filterContractClassLogs(
90
- tx.data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes,
91
- /*siloed=*/ true,
92
- )
93
- : await tx.filterContractClassLogs(tx.data.forRollup!.end.contractClassLogsHashes, /*siloed=*/ true);
94
-
93
+ ? tx.getSplitContractClassLogs(false /* revertible */)
94
+ : tx.getContractClassLogs();
95
95
  await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxNonRevertibleCache, 'non-revertible');
96
96
  }
97
97
 
@@ -101,13 +101,7 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
101
101
  * @param tx - The transaction to add revertible contract classes from.
102
102
  */
103
103
  private async addRevertibleContractClasses(tx: Tx) {
104
- const siloedContractClassLogs = tx.data.forPublic
105
- ? await tx.filterContractClassLogs(
106
- tx.data.forPublic!.revertibleAccumulatedData.contractClassLogsHashes,
107
- /*siloed=*/ true,
108
- )
109
- : [];
110
-
104
+ const siloedContractClassLogs = tx.data.forPublic ? tx.getSplitContractClassLogs(true /* revertible */) : [];
111
105
  await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxRevertibleCache, 'revertible');
112
106
  }
113
107
 
@@ -149,12 +143,12 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
149
143
  cacheType: string,
150
144
  ) {
151
145
  const contractClassEvents = siloedContractClassLogs
152
- .filter((log: ContractClassLog) => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
153
- .map((log: ContractClassLog) => ContractClassRegisteredEvent.fromLog(log));
146
+ .filter((log: ContractClassLog) => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
147
+ .map((log: ContractClassLog) => ContractClassPublishedEvent.fromLog(log));
154
148
 
155
149
  // Cache contract classes
156
150
  await Promise.all(
157
- contractClassEvents.map(async (event: ContractClassRegisteredEvent) => {
151
+ contractClassEvents.map(async (event: ContractClassPublishedEvent) => {
158
152
  this.log.debug(`Adding class ${event.contractClassId.toString()} to contract's ${cacheType} tx cache`);
159
153
  const contractClass = await event.toContractClassPublic();
160
154
 
@@ -171,8 +165,8 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
171
165
  */
172
166
  private addContractInstancesFromLogs(contractInstanceLogs: PrivateLog[], cache: TxContractCache, cacheType: string) {
173
167
  const contractInstanceEvents = contractInstanceLogs
174
- .filter(log => ContractInstanceDeployedEvent.isContractInstanceDeployedEvent(log))
175
- .map(log => ContractInstanceDeployedEvent.fromLog(log));
168
+ .filter(log => ContractInstancePublishedEvent.isContractInstancePublishedEvent(log))
169
+ .map(log => ContractInstancePublishedEvent.fromLog(log));
176
170
 
177
171
  // Cache contract instances
178
172
  contractInstanceEvents.forEach(e => {
@@ -210,13 +204,25 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
210
204
  this.currentTxRevertibleCache.clear();
211
205
  }
212
206
 
213
- public async getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
207
+ // TODO(fcarreiro/alvaro): This method currently needs a blockNumber. Since this class
208
+ // is only ever used for a given block, it should be possible to construct it with the
209
+ // block number and then forget about it. However, since this class (and interface) is
210
+ // currently more externally exposed than we'd want to, Facundo preferred to not add it
211
+ // to the constructor right now. If we can make this class more private, we should
212
+ // reconsider this. A litmus test is in how many places we need to initialize with a
213
+ // dummy block number (tests or not) and pass block numbers to `super`.
214
+ // Note: Block number got changed to timestamp so this comment ^ is outdated. Keeping
215
+ // the comment as is as I am not part of the AVM cabal.
216
+ public async getContractInstance(
217
+ address: AztecAddress,
218
+ timestamp: UInt64,
219
+ ): Promise<ContractInstanceWithAddress | undefined> {
214
220
  // Check caches in order: tx revertible -> tx non-revertible -> block -> data source
215
221
  return (
216
222
  this.currentTxRevertibleCache.getInstance(address) ??
217
223
  this.currentTxNonRevertibleCache.getInstance(address) ??
218
224
  this.blockCache.getInstance(address) ??
219
- (await this.dataSource.getContract(address))
225
+ (await this.dataSource.getContract(address, timestamp))
220
226
  );
221
227
  }
222
228
 
@@ -256,72 +262,74 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
256
262
  }
257
263
 
258
264
  public async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
259
- return await this.dataSource.getContractFunctionName(address, selector);
265
+ return await this.dataSource.getDebugFunctionName(address, selector);
260
266
  }
261
267
  }
262
268
 
263
269
  /**
264
- * A public state DB that reads and writes to the world state.
270
+ * A high-level class that provides access to the merkle trees.
271
+ *
272
+ * This class is just a helper wrapper around a merkle db. Anything that you can do with it
273
+ * can also be done directly with the merkle db. This class should NOT be exposed or used
274
+ * outside of `simulator/src/public`.
275
+ *
276
+ * NOTE: This class is currently written in such a way that it would generate the
277
+ * necessary hints if used with a hinting merkle db. This is a bit of a leak of concepts.
278
+ * Eventually we can have everything depend on a config/factory at the TxSimulator level
279
+ * to decide whether to use hints or not (same with tracing, etc).
265
280
  */
266
- export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicStateDB, MerkleTreeCheckpointOperations {
267
- private logger = createLogger('simulator:world-state-db');
281
+ export class PublicTreesDB implements PublicStateDBInterface {
282
+ private logger = createLogger('simulator:public-trees-db');
268
283
 
269
- constructor(public db: MerkleTreeWriteOperations, dataSource: ContractDataSource) {
270
- super(dataSource);
271
- }
284
+ constructor(private readonly db: MerkleTreeWriteOperations) {}
272
285
 
273
- /**
274
- * Checkpoints the current fork state
275
- */
276
- public async createCheckpoint() {
277
- await this.db.createCheckpoint();
278
- }
286
+ public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
287
+ const timer = new Timer();
288
+ const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
279
289
 
280
- /**
281
- * Commits the current checkpoint
282
- */
283
- public async commitCheckpoint() {
284
- await this.db.commitCheckpoint();
285
- }
290
+ const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
291
+ if (!lowLeafResult) {
292
+ throw new Error('Low leaf not found');
293
+ }
286
294
 
287
- /**
288
- * Reverts the current checkpoint
289
- */
290
- public async revertCheckpoint() {
291
- await this.db.revertCheckpoint();
292
- }
295
+ // TODO: We need this for the hints. See class comment for more details.
296
+ await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
297
+ // Unconditionally fetching the preimage for the hints. Move it to the hinting layer?
298
+ const preimage = (await this.db.getLeafPreimage(
299
+ MerkleTreeId.PUBLIC_DATA_TREE,
300
+ lowLeafResult.index,
301
+ )) as PublicDataTreeLeafPreimage;
293
302
 
294
- public getMerkleInterface(): MerkleTreeWriteOperations {
295
- return this.db;
296
- }
303
+ const result = lowLeafResult.alreadyPresent ? preimage.leaf.value : Fr.ZERO;
304
+ this.logger.debug(`Storage read (contract=${contract}, slot=${slot}, value=${result})`, {
305
+ eventName: 'public-db-access',
306
+ duration: timer.ms(),
307
+ operation: 'storage-read',
308
+ } satisfies PublicDBAccessStats);
297
309
 
298
- /**
299
- * Reads a value from public storage, returning zero if none.
300
- * @param contract - Owner of the storage.
301
- * @param slot - Slot to read in the contract storage.
302
- * @returns The current value in the storage slot.
303
- */
304
- public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
305
- return await readPublicState(this.db, contract, slot);
310
+ return result;
306
311
  }
307
312
 
308
- /**
309
- * Records a write to public storage.
310
- * @param contract - Owner of the storage.
311
- * @param slot - Slot to read in the contract storage.
312
- * @param newValue - The new value to store.
313
- * @returns The slot of the written leaf in the public data tree.
314
- */
315
313
  public async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<void> {
314
+ const timer = new Timer();
316
315
  const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
317
316
  const publicDataWrite = new PublicDataWrite(leafSlot, newValue);
318
317
  await this.db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
318
+
319
+ this.logger.debug(`Storage write (contract=${contract}, slot=${slot}, value=${newValue})`, {
320
+ eventName: 'public-db-access',
321
+ duration: timer.ms(),
322
+ operation: 'storage-write',
323
+ } satisfies PublicDBAccessStats);
319
324
  }
320
325
 
321
326
  public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr | undefined> {
322
327
  const timer = new Timer();
323
328
  const leafValue = await this.db.getLeafValue(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, leafIndex);
324
- this.logger.debug(`[DB] Fetched L1 to L2 message leaf value`, {
329
+ // TODO: We need this for the hints. See class comment for more details.
330
+ await this.db.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, leafIndex);
331
+
332
+ this.logger.debug(`Fetched L1 to L2 message leaf value (leafIndex=${leafIndex}, value=${leafValue})`, {
325
333
  eventName: 'public-db-access',
326
334
  duration: timer.ms(),
327
335
  operation: 'get-l1-to-l2-message-leaf-value',
@@ -329,41 +337,116 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
329
337
  return leafValue;
330
338
  }
331
339
 
332
- public async getCommitmentValue(leafIndex: bigint): Promise<Fr | undefined> {
340
+ public async getNoteHash(leafIndex: bigint): Promise<Fr | undefined> {
333
341
  const timer = new Timer();
334
342
  const leafValue = await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
335
- this.logger.debug(`[DB] Fetched commitment leaf value`, {
343
+ // TODO: We need this for the hints. See class comment for more details.
344
+ await this.db.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
345
+
346
+ this.logger.debug(`Fetched note hash leaf value (leafIndex=${leafIndex}, value=${leafValue})`, {
336
347
  eventName: 'public-db-access',
337
348
  duration: timer.ms(),
338
- operation: 'get-commitment-leaf-value',
349
+ operation: 'get-note-hash',
339
350
  } satisfies PublicDBAccessStats);
340
351
  return leafValue;
341
352
  }
342
353
 
343
- public async getNullifierIndex(nullifier: Fr): Promise<bigint | undefined> {
354
+ public async writeNoteHash(noteHash: Fr): Promise<void> {
344
355
  const timer = new Timer();
345
- const index = (await this.db.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()]))[0];
346
- this.logger.debug(`[DB] Fetched nullifier index`, {
356
+ await this.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, [noteHash]);
357
+
358
+ this.logger.debug(`Wrote note hash (noteHash=${noteHash})`, {
347
359
  eventName: 'public-db-access',
348
360
  duration: timer.ms(),
349
- operation: 'get-nullifier-index',
361
+ operation: 'write-note-hash',
350
362
  } satisfies PublicDBAccessStats);
351
- return index;
352
363
  }
353
- }
354
364
 
355
- export async function readPublicState(db: MerkleTreeReadOperations, contract: AztecAddress, slot: Fr): Promise<Fr> {
356
- const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
365
+ public async checkNullifierExists(nullifier: Fr): Promise<boolean> {
366
+ const timer = new Timer();
367
+ const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
368
+ if (!lowLeafResult) {
369
+ throw new Error('Low leaf not found');
370
+ }
371
+ // TODO: We need this for the hints. See class comment for more details.
372
+ await this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, lowLeafResult.index);
373
+ // TODO: We need this for the hints. See class comment for more details.
374
+ await this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, lowLeafResult.index);
375
+ const exists = lowLeafResult.alreadyPresent;
376
+
377
+ this.logger.debug(`Checked nullifier exists (nullifier=${nullifier}, exists=${exists})`, {
378
+ eventName: 'public-db-access',
379
+ duration: timer.ms(),
380
+ operation: 'check-nullifier-exists',
381
+ } satisfies PublicDBAccessStats);
382
+ return exists;
383
+ }
384
+
385
+ public async writeNullifier(siloedNullifier: Fr): Promise<void> {
386
+ const timer = new Timer();
387
+ await this.db.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()]);
357
388
 
358
- const lowLeafResult = await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
359
- if (!lowLeafResult || !lowLeafResult.alreadyPresent) {
360
- return Fr.ZERO;
389
+ this.logger.debug(`Wrote nullifier (nullifier=${siloedNullifier})`, {
390
+ eventName: 'public-db-access',
391
+ duration: timer.ms(),
392
+ operation: 'write-nullifier',
393
+ } satisfies PublicDBAccessStats);
361
394
  }
362
395
 
363
- const preimage = (await db.getLeafPreimage(
364
- MerkleTreeId.PUBLIC_DATA_TREE,
365
- lowLeafResult.index,
366
- )) as PublicDataTreeLeafPreimage;
396
+ public async padTree(treeId: MerkleTreeId, leavesToInsert: number): Promise<void> {
397
+ const timer = new Timer();
367
398
 
368
- return preimage.value;
399
+ switch (treeId) {
400
+ // Indexed trees.
401
+ case MerkleTreeId.NULLIFIER_TREE:
402
+ await this.db.batchInsert(
403
+ treeId,
404
+ Array(leavesToInsert).fill(NullifierLeaf.empty().toBuffer()),
405
+ NULLIFIER_SUBTREE_HEIGHT,
406
+ );
407
+ break;
408
+ case MerkleTreeId.PUBLIC_DATA_TREE:
409
+ await this.db.batchInsert(
410
+ treeId,
411
+ Array(leavesToInsert).fill(PublicDataTreeLeaf.empty().toBuffer()),
412
+ PUBLIC_DATA_SUBTREE_HEIGHT,
413
+ );
414
+ break;
415
+ // Append-only trees.
416
+ case MerkleTreeId.L1_TO_L2_MESSAGE_TREE:
417
+ case MerkleTreeId.NOTE_HASH_TREE:
418
+ await this.db.appendLeaves(treeId, Array(leavesToInsert).fill(Fr.ZERO));
419
+ break;
420
+ default:
421
+ throw new Error(`Padding not supported for tree ${treeId}`);
422
+ }
423
+
424
+ this.logger.debug(`Padded tree (tree=${getTreeName(treeId)}, leavesToInsert=${leavesToInsert})`, {
425
+ eventName: 'public-db-access',
426
+ duration: timer.ms(),
427
+ operation: 'pad-tree',
428
+ } satisfies PublicDBAccessStats);
429
+ }
430
+
431
+ public async createCheckpoint(): Promise<void> {
432
+ await this.db.createCheckpoint();
433
+ }
434
+
435
+ public async commitCheckpoint(): Promise<void> {
436
+ await this.db.commitCheckpoint();
437
+ }
438
+
439
+ public async revertCheckpoint(): Promise<void> {
440
+ await this.db.revertCheckpoint();
441
+ }
442
+
443
+ public async getTreeSnapshots(): Promise<TreeSnapshots> {
444
+ const stateReference = await this.db.getStateReference();
445
+ return new TreeSnapshots(
446
+ stateReference.l1ToL2MessageTree,
447
+ stateReference.partial.noteHashTree,
448
+ stateReference.partial.nullifierTree,
449
+ stateReference.partial.publicDataTree,
450
+ );
451
+ }
369
452
  }
@@ -0,0 +1,149 @@
1
+ import { SerialQueue } from '@aztec/foundation/queue';
2
+ import type { IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
3
+ import type {
4
+ BatchInsertionResult,
5
+ IndexedTreeId,
6
+ MerkleTreeId,
7
+ MerkleTreeLeafType,
8
+ MerkleTreeWriteOperations,
9
+ SequentialInsertionResult,
10
+ TreeHeights,
11
+ TreeInfo,
12
+ } from '@aztec/stdlib/trees';
13
+ import type { BlockHeader, StateReference } from '@aztec/stdlib/tx';
14
+
15
+ /**
16
+ * Wraps an instance of `MerkleTreeWriteOperations` to allow the sequencer to gate access.
17
+ * If transactions execution goes past the deadline, the simulator will continue to execute and update the world state
18
+ * The public processor however requires that the world state remain constant after the deadline in order to finalize the block
19
+ * The public processor provides this implementation of MerkleTreeWriteOperations to the simulator
20
+ */
21
+
22
+ export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
23
+ private isStopped = false;
24
+ private serialQueue = new SerialQueue();
25
+
26
+ constructor(private target: MerkleTreeWriteOperations) {
27
+ this.serialQueue.start();
28
+ }
29
+
30
+ private guard() {
31
+ if (this.isStopped) {
32
+ throw new Error('Merkle tree access has been stopped');
33
+ }
34
+ }
35
+
36
+ // Executes the provided function only if the guard is not stopped.
37
+ private guardAndPush<T>(fn: () => Promise<T>): Promise<T> {
38
+ this.guard();
39
+ return this.serialQueue.put(() => {
40
+ this.guard();
41
+ return fn();
42
+ });
43
+ }
44
+
45
+ public getUnderlyingFork(): MerkleTreeWriteOperations {
46
+ return this.target;
47
+ }
48
+
49
+ // Stops all further access to the merkle trees via this object
50
+ async stop(): Promise<void> {
51
+ await this.serialQueue.put(() => {
52
+ this.isStopped = true;
53
+ return Promise.resolve();
54
+ });
55
+ return this.serialQueue.end();
56
+ }
57
+
58
+ // Proxy all methods to the target
59
+ appendLeaves<ID extends MerkleTreeId>(treeId: ID, leaves: MerkleTreeLeafType<ID>[]): Promise<void> {
60
+ return this.guardAndPush(() => this.target.appendLeaves(treeId, leaves));
61
+ }
62
+
63
+ updateArchive(header: BlockHeader): Promise<void> {
64
+ return this.guardAndPush(() => this.target.updateArchive(header));
65
+ }
66
+ batchInsert<TreeHeight extends number, SubtreeSiblingPathHeight extends number, ID extends IndexedTreeId>(
67
+ treeId: ID,
68
+ leaves: Buffer[],
69
+ subtreeHeight: number,
70
+ ): Promise<BatchInsertionResult<TreeHeight, SubtreeSiblingPathHeight>> {
71
+ return this.guardAndPush(() => this.target.batchInsert(treeId, leaves, subtreeHeight));
72
+ }
73
+ sequentialInsert<TreeHeight extends number, ID extends IndexedTreeId>(
74
+ treeId: ID,
75
+ leaves: Buffer[],
76
+ ): Promise<SequentialInsertionResult<TreeHeight>> {
77
+ return this.guardAndPush(() => this.target.sequentialInsert(treeId, leaves));
78
+ }
79
+ close(): Promise<void> {
80
+ return this.guardAndPush(() => this.target.close());
81
+ }
82
+ getTreeInfo(treeId: MerkleTreeId): Promise<TreeInfo> {
83
+ return this.guardAndPush(() => this.target.getTreeInfo(treeId));
84
+ }
85
+ getStateReference(): Promise<StateReference> {
86
+ return this.guardAndPush(() => this.target.getStateReference());
87
+ }
88
+ getInitialHeader(): BlockHeader {
89
+ return this.target.getInitialHeader();
90
+ }
91
+ getSiblingPath<ID extends MerkleTreeId>(treeId: ID, index: bigint): Promise<SiblingPath<TreeHeights[ID]>> {
92
+ return this.guardAndPush(() => this.target.getSiblingPath(treeId, index));
93
+ }
94
+ getPreviousValueIndex<ID extends IndexedTreeId>(
95
+ treeId: ID,
96
+ value: bigint,
97
+ ): Promise<{ index: bigint; alreadyPresent: boolean } | undefined> {
98
+ return this.guardAndPush(() => this.target.getPreviousValueIndex(treeId, value));
99
+ }
100
+ getLeafPreimage<ID extends IndexedTreeId>(treeId: ID, index: bigint): Promise<IndexedTreeLeafPreimage | undefined> {
101
+ return this.guardAndPush(() => this.target.getLeafPreimage(treeId, index));
102
+ }
103
+ findLeafIndices<ID extends MerkleTreeId>(
104
+ treeId: ID,
105
+ values: MerkleTreeLeafType<ID>[],
106
+ ): Promise<(bigint | undefined)[]> {
107
+ return this.guardAndPush(() => this.target.findLeafIndices(treeId, values));
108
+ }
109
+ findLeafIndicesAfter<ID extends MerkleTreeId>(
110
+ treeId: ID,
111
+ values: MerkleTreeLeafType<ID>[],
112
+ startIndex: bigint,
113
+ ): Promise<(bigint | undefined)[]> {
114
+ return this.guardAndPush(() => this.target.findLeafIndicesAfter(treeId, values, startIndex));
115
+ }
116
+ getLeafValue<ID extends MerkleTreeId>(
117
+ treeId: ID,
118
+ index: bigint,
119
+ ): Promise<MerkleTreeLeafType<typeof treeId> | undefined> {
120
+ return this.guardAndPush(() => this.target.getLeafValue(treeId, index));
121
+ }
122
+ getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(
123
+ treeId: ID,
124
+ leafIndices: bigint[],
125
+ ): Promise<(bigint | undefined)[]> {
126
+ return this.guardAndPush(() => this.target.getBlockNumbersForLeafIndices(treeId, leafIndices));
127
+ }
128
+ createCheckpoint(): Promise<void> {
129
+ return this.guardAndPush(() => this.target.createCheckpoint());
130
+ }
131
+ commitCheckpoint(): Promise<void> {
132
+ return this.guardAndPush(() => this.target.commitCheckpoint());
133
+ }
134
+ revertCheckpoint(): Promise<void> {
135
+ return this.guardAndPush(() => this.target.revertCheckpoint());
136
+ }
137
+ commitAllCheckpoints(): Promise<void> {
138
+ return this.guardAndPush(() => this.target.commitAllCheckpoints());
139
+ }
140
+ revertAllCheckpoints(): Promise<void> {
141
+ return this.guardAndPush(() => this.target.revertAllCheckpoints());
142
+ }
143
+ findSiblingPaths<ID extends MerkleTreeId>(
144
+ treeId: ID,
145
+ values: MerkleTreeLeafType<ID>[],
146
+ ): Promise<({ path: SiblingPath<TreeHeights[ID]>; index: bigint } | undefined)[]> {
147
+ return this.guardAndPush(() => this.target.findSiblingPaths(treeId, values));
148
+ }
149
+ }