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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/README.md +12 -4
  2. package/dest/client.d.ts +6 -4
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +6 -9
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +1 -2
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/common/stats/index.d.ts +1 -1
  12. package/dest/common/stats/stats.d.ts +1 -1
  13. package/dest/private/acvm/acvm.d.ts +15 -7
  14. package/dest/private/acvm/acvm.d.ts.map +1 -1
  15. package/dest/private/acvm/acvm.js +14 -19
  16. package/dest/private/acvm/acvm_types.d.ts +2 -2
  17. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.d.ts +19 -20
  19. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  20. package/dest/private/acvm/deserialize.js +32 -24
  21. package/dest/private/acvm/index.d.ts +1 -2
  22. package/dest/private/acvm/index.d.ts.map +1 -1
  23. package/dest/private/acvm/index.js +0 -1
  24. package/dest/private/acvm/serialize.d.ts +21 -4
  25. package/dest/private/acvm/serialize.d.ts.map +1 -1
  26. package/dest/private/acvm/serialize.js +54 -1
  27. package/dest/private/acvm_native.d.ts +41 -0
  28. package/dest/private/acvm_native.d.ts.map +1 -0
  29. package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
  30. package/dest/private/acvm_wasm.d.ts +16 -0
  31. package/dest/private/acvm_wasm.d.ts.map +1 -0
  32. package/dest/private/acvm_wasm.js +67 -0
  33. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  34. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  35. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  36. package/dest/private/circuit_recording/circuit_recorder.d.ts +109 -0
  37. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  38. package/dest/private/circuit_recording/circuit_recorder.js +212 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -0
  40. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  41. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +10 -0
  43. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  44. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  46. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  47. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  48. package/dest/private/circuit_simulator.d.ts +35 -0
  49. package/dest/private/circuit_simulator.d.ts.map +1 -0
  50. package/dest/private/circuit_simulator.js +43 -0
  51. package/dest/private/factory.d.ts +12 -0
  52. package/dest/private/factory.d.ts.map +1 -0
  53. package/dest/private/{providers/factory.js → factory.js} +8 -5
  54. package/dest/public/avm/avm_context.d.ts +8 -8
  55. package/dest/public/avm/avm_context.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
  57. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  58. package/dest/public/avm/avm_contract_call_result.js +12 -8
  59. package/dest/public/avm/avm_execution_environment.d.ts +9 -6
  60. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  61. package/dest/public/avm/avm_execution_environment.js +5 -3
  62. package/dest/public/avm/avm_gas.d.ts +5 -21
  63. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  64. package/dest/public/avm/avm_gas.js +29 -37
  65. package/dest/public/avm/avm_machine_state.d.ts +9 -6
  66. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  67. package/dest/public/avm/avm_machine_state.js +5 -2
  68. package/dest/public/avm/avm_memory_types.d.ts +100 -89
  69. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  70. package/dest/public/avm/avm_memory_types.js +21 -7
  71. package/dest/public/avm/avm_simulator.d.ts +8 -7
  72. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  73. package/dest/public/avm/avm_simulator.js +33 -43
  74. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  75. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  76. package/dest/public/avm/avm_simulator_interface.js +3 -0
  77. package/dest/public/avm/calldata.d.ts +51 -0
  78. package/dest/public/avm/calldata.d.ts.map +1 -0
  79. package/dest/public/avm/calldata.js +64 -0
  80. package/dest/public/avm/errors.d.ts +11 -29
  81. package/dest/public/avm/errors.d.ts.map +1 -1
  82. package/dest/public/avm/errors.js +19 -57
  83. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +2 -0
  84. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
  85. package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
  86. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  87. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  88. package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
  89. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +9 -6
  90. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  91. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +53 -15
  92. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  93. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  94. package/dest/public/avm/fixtures/initializers.js +45 -0
  95. package/dest/public/avm/fixtures/utils.d.ts +39 -0
  96. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  97. package/dest/public/avm/fixtures/utils.js +99 -0
  98. package/dest/public/avm/index.d.ts +1 -3
  99. package/dest/public/avm/index.d.ts.map +1 -1
  100. package/dest/public/avm/index.js +0 -2
  101. package/dest/public/avm/opcodes/accrued_substate.d.ts +18 -19
  102. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/accrued_substate.js +61 -59
  104. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  105. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  107. package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
  108. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/arithmetic.js +27 -3
  110. package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
  111. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/bitwise.js +22 -29
  113. package/dest/public/avm/opcodes/comparators.d.ts +1 -1
  114. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/comparators.js +3 -3
  116. package/dest/public/avm/opcodes/contract.d.ts +5 -5
  117. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/contract.js +16 -13
  119. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  120. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/control_flow.js +13 -11
  122. package/dest/public/avm/opcodes/conversion.d.ts +4 -3
  123. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/conversion.js +270 -6
  125. package/dest/public/avm/opcodes/ec_add.d.ts +3 -5
  126. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/ec_add.js +28 -33
  128. package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
  129. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/environment_getters.js +20 -22
  131. package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
  132. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  133. package/dest/public/avm/opcodes/external_calls.js +52 -46
  134. package/dest/public/avm/opcodes/hashing.d.ts +7 -7
  135. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  136. package/dest/public/avm/opcodes/hashing.js +24 -19
  137. package/dest/public/avm/opcodes/index.d.ts +1 -1
  138. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  139. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  140. package/dest/public/avm/opcodes/instruction.js +23 -19
  141. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  142. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  143. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  144. package/dest/public/avm/opcodes/memory.d.ts +15 -15
  145. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  146. package/dest/public/avm/opcodes/memory.js +52 -48
  147. package/dest/public/avm/opcodes/misc.d.ts +4 -3
  148. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  149. package/dest/public/avm/opcodes/misc.js +42 -17
  150. package/dest/public/avm/opcodes/storage.d.ts +14 -13
  151. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  152. package/dest/public/avm/opcodes/storage.js +39 -27
  153. package/dest/public/avm/revert_reason.d.ts +18 -0
  154. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  155. package/dest/public/avm/revert_reason.js +39 -0
  156. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  157. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  158. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  159. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  160. package/dest/public/avm/serialization/bytecode_serialization.js +81 -77
  161. package/dest/public/avm/serialization/instruction_serialization.d.ts +15 -6
  162. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  163. package/dest/public/avm/serialization/instruction_serialization.js +71 -36
  164. package/dest/public/avm/test_utils.d.ts +12 -15
  165. package/dest/public/avm/test_utils.d.ts.map +1 -1
  166. package/dest/public/avm/test_utils.js +17 -25
  167. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  168. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  169. package/dest/public/contracts_db_checkpoint.js +30 -0
  170. package/dest/public/db_interfaces.d.ts +68 -0
  171. package/dest/public/db_interfaces.d.ts.map +1 -0
  172. package/dest/public/db_interfaces.js +3 -0
  173. package/dest/public/debug_fn_name.d.ts +18 -0
  174. package/dest/public/debug_fn_name.d.ts.map +1 -0
  175. package/dest/public/debug_fn_name.js +37 -0
  176. package/dest/public/executor_metrics.d.ts +12 -4
  177. package/dest/public/executor_metrics.d.ts.map +1 -1
  178. package/dest/public/executor_metrics.js +33 -23
  179. package/dest/public/executor_metrics_interface.d.ts +10 -0
  180. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  181. package/dest/public/executor_metrics_interface.js +1 -0
  182. package/dest/public/fixtures/amm_test.d.ts +10 -0
  183. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  184. package/dest/public/fixtures/amm_test.js +213 -0
  185. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  186. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  187. package/dest/public/fixtures/bulk_test.js +289 -0
  188. package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
  189. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  190. package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
  191. package/dest/public/fixtures/custom_bytecode_tests.d.ts +14 -0
  192. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  193. package/dest/public/fixtures/custom_bytecode_tests.js +234 -0
  194. package/dest/public/fixtures/index.d.ts +10 -1
  195. package/dest/public/fixtures/index.d.ts.map +1 -1
  196. package/dest/public/fixtures/index.js +9 -0
  197. package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
  198. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  199. package/dest/public/fixtures/minimal_public_tx.js +19 -0
  200. package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
  201. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  202. package/dest/public/fixtures/opcode_spammer.js +1645 -0
  203. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +56 -15
  204. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  205. package/dest/public/fixtures/public_tx_simulation_tester.js +164 -71
  206. package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
  207. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  208. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  209. package/dest/public/fixtures/token_test.d.ts +12 -0
  210. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  211. package/dest/public/fixtures/token_test.js +96 -0
  212. package/dest/public/fixtures/utils.d.ts +18 -5
  213. package/dest/public/fixtures/utils.d.ts.map +1 -1
  214. package/dest/public/fixtures/utils.js +112 -70
  215. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
  216. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  217. package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
  218. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  219. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  220. package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
  221. package/dest/public/hinting_db_sources.d.ts +81 -0
  222. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  223. package/dest/public/hinting_db_sources.js +359 -0
  224. package/dest/public/index.d.ts +6 -9
  225. package/dest/public/index.d.ts.map +1 -1
  226. package/dest/public/index.js +4 -7
  227. package/dest/public/public_db_sources.d.ts +58 -104
  228. package/dest/public/public_db_sources.d.ts.map +1 -1
  229. package/dest/public/public_db_sources.js +227 -194
  230. package/dest/public/public_errors.d.ts +12 -0
  231. package/dest/public/public_errors.d.ts.map +1 -0
  232. package/dest/public/public_errors.js +13 -0
  233. package/dest/public/public_processor/guarded_merkle_tree.d.ts +52 -0
  234. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  235. package/dest/public/public_processor/guarded_merkle_tree.js +116 -0
  236. package/dest/public/public_processor/public_processor.d.ts +32 -39
  237. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  238. package/dest/public/public_processor/public_processor.js +642 -167
  239. package/dest/public/public_processor/public_processor_metrics.d.ts +7 -4
  240. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  241. package/dest/public/public_processor/public_processor_metrics.js +37 -46
  242. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
  243. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  244. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +99 -0
  245. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
  246. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  247. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +126 -0
  248. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  249. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  250. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  251. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  252. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  253. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +167 -0
  254. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
  255. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  256. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  257. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  258. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  259. package/dest/public/public_tx_simulator/factories.js +28 -0
  260. package/dest/public/public_tx_simulator/index.d.ts +8 -0
  261. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  262. package/dest/public/public_tx_simulator/index.js +5 -0
  263. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  264. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  265. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  266. package/dest/public/public_tx_simulator/public_tx_context.d.ts +31 -33
  267. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  268. package/dest/public/public_tx_simulator/public_tx_context.js +83 -105
  269. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -58
  270. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  271. package/dest/public/public_tx_simulator/public_tx_simulator.js +225 -207
  272. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
  273. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  274. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  275. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  276. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  277. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +415 -0
  278. package/dest/public/side_effect_errors.d.ts +42 -2
  279. package/dest/public/side_effect_errors.d.ts.map +1 -1
  280. package/dest/public/side_effect_errors.js +70 -1
  281. package/dest/public/side_effect_trace.d.ts +24 -69
  282. package/dest/public/side_effect_trace.d.ts.map +1 -1
  283. package/dest/public/side_effect_trace.js +74 -124
  284. package/dest/public/side_effect_trace_interface.d.ts +13 -25
  285. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  286. package/dest/public/state_manager/index.d.ts +2 -0
  287. package/dest/public/state_manager/index.d.ts.map +1 -0
  288. package/dest/public/state_manager/index.js +1 -0
  289. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
  290. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  291. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  292. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
  293. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  294. package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
  295. package/dest/public/state_manager/state_manager.d.ts +170 -0
  296. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  297. package/dest/public/state_manager/state_manager.js +402 -0
  298. package/dest/public/test_executor_metrics.d.ts +61 -0
  299. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  300. package/dest/public/test_executor_metrics.js +329 -0
  301. package/dest/public/unique_class_ids.d.ts +1 -1
  302. package/dest/public/unique_class_ids.d.ts.map +1 -1
  303. package/dest/public/utils.d.ts +3 -5
  304. package/dest/public/utils.d.ts.map +1 -1
  305. package/dest/public/utils.js +4 -21
  306. package/dest/server.d.ts +7 -4
  307. package/dest/server.d.ts.map +1 -1
  308. package/dest/server.js +5 -2
  309. package/dest/testing.d.ts +2 -0
  310. package/dest/testing.d.ts.map +1 -0
  311. package/dest/testing.js +1 -0
  312. package/package.json +39 -33
  313. package/src/client.ts +5 -3
  314. package/src/common/errors.ts +80 -45
  315. package/src/common/index.ts +0 -1
  316. package/src/private/acvm/acvm.ts +21 -35
  317. package/src/private/acvm/acvm_types.ts +1 -1
  318. package/src/private/acvm/deserialize.ts +36 -30
  319. package/src/private/acvm/index.ts +0 -1
  320. package/src/private/acvm/serialize.ts +64 -1
  321. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +57 -28
  322. package/src/private/acvm_wasm.ts +79 -0
  323. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  324. package/src/private/circuit_recording/circuit_recorder.ts +263 -0
  325. package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
  326. package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -0
  327. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  328. package/src/private/circuit_simulator.ts +90 -0
  329. package/src/private/{providers/factory.ts → factory.ts} +13 -10
  330. package/src/public/avm/avm_context.ts +6 -6
  331. package/src/public/avm/avm_contract_call_result.ts +23 -9
  332. package/src/public/avm/avm_execution_environment.ts +17 -5
  333. package/src/public/avm/avm_gas.ts +27 -39
  334. package/src/public/avm/avm_machine_state.ts +12 -6
  335. package/src/public/avm/avm_memory_types.ts +24 -7
  336. package/src/public/avm/avm_simulator.ts +58 -63
  337. package/src/public/avm/avm_simulator_interface.ts +8 -0
  338. package/src/public/avm/calldata.ts +101 -0
  339. package/src/public/avm/errors.ts +20 -75
  340. package/src/public/avm/fixtures/account_proof.json +553 -0
  341. package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
  342. package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
  343. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +66 -13
  344. package/src/public/avm/fixtures/initializers.ts +103 -0
  345. package/src/public/avm/fixtures/utils.ts +154 -0
  346. package/src/public/avm/index.ts +0 -2
  347. package/src/public/avm/opcodes/accrued_substate.ts +84 -52
  348. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  349. package/src/public/avm/opcodes/arithmetic.ts +37 -3
  350. package/src/public/avm/opcodes/bitwise.ts +33 -29
  351. package/src/public/avm/opcodes/comparators.ts +6 -3
  352. package/src/public/avm/opcodes/contract.ts +15 -11
  353. package/src/public/avm/opcodes/control_flow.ts +19 -10
  354. package/src/public/avm/opcodes/conversion.ts +29 -5
  355. package/src/public/avm/opcodes/ec_add.ts +30 -37
  356. package/src/public/avm/opcodes/environment_getters.ts +28 -23
  357. package/src/public/avm/opcodes/external_calls.ts +70 -36
  358. package/src/public/avm/opcodes/hashing.ts +39 -13
  359. package/src/public/avm/opcodes/instruction.ts +31 -21
  360. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  361. package/src/public/avm/opcodes/memory.ts +81 -42
  362. package/src/public/avm/opcodes/misc.ts +61 -19
  363. package/src/public/avm/opcodes/storage.ts +47 -23
  364. package/src/public/avm/revert_reason.ts +58 -0
  365. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  366. package/src/public/avm/serialization/bytecode_serialization.ts +90 -81
  367. package/src/public/avm/serialization/instruction_serialization.ts +76 -35
  368. package/src/public/avm/test_utils.ts +25 -42
  369. package/src/public/contracts_db_checkpoint.ts +41 -0
  370. package/src/public/db_interfaces.ts +76 -0
  371. package/src/public/debug_fn_name.ts +52 -0
  372. package/src/public/executor_metrics.ts +49 -23
  373. package/src/public/executor_metrics_interface.ts +15 -0
  374. package/src/public/fixtures/amm_test.ts +331 -0
  375. package/src/public/fixtures/bulk_test.ts +194 -0
  376. package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
  377. package/src/public/fixtures/custom_bytecode_tests.ts +366 -0
  378. package/src/public/fixtures/index.ts +13 -0
  379. package/src/public/fixtures/minimal_public_tx.ts +26 -0
  380. package/src/public/fixtures/opcode_spammer.ts +1713 -0
  381. package/src/public/fixtures/public_tx_simulation_tester.ts +264 -114
  382. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
  383. package/src/public/fixtures/token_test.ts +148 -0
  384. package/src/public/fixtures/utils.ts +156 -80
  385. package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
  386. package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
  387. package/src/public/hinting_db_sources.ts +614 -0
  388. package/src/public/index.ts +11 -8
  389. package/src/public/public_db_sources.ts +295 -258
  390. package/src/public/public_errors.ts +14 -0
  391. package/src/public/public_processor/guarded_merkle_tree.ts +161 -0
  392. package/src/public/public_processor/public_processor.ts +354 -227
  393. package/src/public/public_processor/public_processor_metrics.ts +30 -46
  394. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +125 -0
  395. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +201 -0
  396. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
  397. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +232 -0
  398. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
  399. package/src/public/public_tx_simulator/factories.ts +44 -0
  400. package/src/public/public_tx_simulator/index.ts +7 -0
  401. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  402. package/src/public/public_tx_simulator/public_tx_context.ts +187 -209
  403. package/src/public/public_tx_simulator/public_tx_simulator.ts +320 -263
  404. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
  405. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  406. package/src/public/side_effect_errors.ts +91 -1
  407. package/src/public/side_effect_trace.ts +99 -322
  408. package/src/public/side_effect_trace_interface.ts +11 -59
  409. package/src/public/state_manager/index.ts +1 -0
  410. package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
  411. package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
  412. package/src/public/state_manager/state_manager.ts +569 -0
  413. package/src/public/test_executor_metrics.ts +421 -0
  414. package/src/public/utils.ts +5 -21
  415. package/src/server.ts +6 -3
  416. package/src/testing.ts +1 -0
  417. package/dest/common/db_interfaces.d.ts +0 -80
  418. package/dest/common/db_interfaces.d.ts.map +0 -1
  419. package/dest/common/db_interfaces.js +0 -1
  420. package/dest/common/debug_fn_name.d.ts +0 -5
  421. package/dest/common/debug_fn_name.d.ts.map +0 -1
  422. package/dest/common/debug_fn_name.js +0 -6
  423. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  424. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  425. package/dest/common/message_load_oracle_inputs.js +0 -15
  426. package/dest/private/acvm/oracle/index.d.ts +0 -14
  427. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  428. package/dest/private/acvm/oracle/index.js +0 -2
  429. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  430. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  431. package/dest/private/acvm/oracle/oracle.js +0 -263
  432. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  433. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  434. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  435. package/dest/private/execution_data_provider.d.ts +0 -261
  436. package/dest/private/execution_data_provider.d.ts.map +0 -1
  437. package/dest/private/execution_data_provider.js +0 -14
  438. package/dest/private/execution_note_cache.d.ts +0 -93
  439. package/dest/private/execution_note_cache.d.ts.map +0 -1
  440. package/dest/private/execution_note_cache.js +0 -180
  441. package/dest/private/hashed_values_cache.d.ts +0 -28
  442. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  443. package/dest/private/hashed_values_cache.js +0 -46
  444. package/dest/private/index.d.ts +0 -13
  445. package/dest/private/index.d.ts.map +0 -1
  446. package/dest/private/index.js +0 -12
  447. package/dest/private/pick_notes.d.ts +0 -85
  448. package/dest/private/pick_notes.d.ts.map +0 -1
  449. package/dest/private/pick_notes.js +0 -51
  450. package/dest/private/private_execution.d.ts +0 -25
  451. package/dest/private/private_execution.d.ts.map +0 -1
  452. package/dest/private/private_execution.js +0 -92
  453. package/dest/private/private_execution_oracle.d.ts +0 -215
  454. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  455. package/dest/private/private_execution_oracle.js +0 -382
  456. package/dest/private/providers/acvm_native.d.ts +0 -40
  457. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  458. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  459. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  460. package/dest/private/providers/acvm_wasm.js +0 -62
  461. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  462. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  463. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  464. package/dest/private/providers/factory.d.ts +0 -12
  465. package/dest/private/providers/factory.d.ts.map +0 -1
  466. package/dest/private/providers/simulation_provider.d.ts +0 -19
  467. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  468. package/dest/private/providers/simulation_provider.js +0 -24
  469. package/dest/private/simulator.d.ts +0 -34
  470. package/dest/private/simulator.d.ts.map +0 -1
  471. package/dest/private/simulator.js +0 -76
  472. package/dest/private/unconstrained_execution.d.ts +0 -10
  473. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  474. package/dest/private/unconstrained_execution.js +0 -27
  475. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  476. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  477. package/dest/private/unconstrained_execution_oracle.js +0 -258
  478. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  479. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  480. package/dest/public/avm/bytecode_utils.js +0 -17
  481. package/dest/public/avm/fixtures/index.d.ts +0 -84
  482. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  483. package/dest/public/avm/fixtures/index.js +0 -175
  484. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  485. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  486. package/dest/public/avm/journal/index.d.ts +0 -2
  487. package/dest/public/avm/journal/index.d.ts.map +0 -1
  488. package/dest/public/avm/journal/index.js +0 -1
  489. package/dest/public/avm/journal/journal.d.ts +0 -209
  490. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  491. package/dest/public/avm/journal/journal.js +0 -486
  492. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  493. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  494. package/dest/public/bytecode_errors.d.ts +0 -4
  495. package/dest/public/bytecode_errors.d.ts.map +0 -1
  496. package/dest/public/bytecode_errors.js +0 -6
  497. package/dest/public/execution.d.ts +0 -108
  498. package/dest/public/execution.d.ts.map +0 -1
  499. package/dest/public/execution.js +0 -9
  500. package/dest/public/tx_contract_cache.d.ts +0 -41
  501. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  502. package/dest/public/tx_contract_cache.js +0 -49
  503. package/dest/test/utils.d.ts +0 -13
  504. package/dest/test/utils.d.ts.map +0 -1
  505. package/dest/test/utils.js +0 -22
  506. package/src/common/db_interfaces.ts +0 -94
  507. package/src/common/debug_fn_name.ts +0 -18
  508. package/src/common/message_load_oracle_inputs.ts +0 -15
  509. package/src/private/acvm/oracle/index.ts +0 -16
  510. package/src/private/acvm/oracle/oracle.ts +0 -455
  511. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  512. package/src/private/execution_data_provider.ts +0 -323
  513. package/src/private/execution_note_cache.ts +0 -217
  514. package/src/private/hashed_values_cache.ts +0 -55
  515. package/src/private/index.ts +0 -16
  516. package/src/private/pick_notes.ts +0 -141
  517. package/src/private/private_execution.ts +0 -151
  518. package/src/private/private_execution_oracle.ts +0 -614
  519. package/src/private/providers/acvm_wasm.ts +0 -63
  520. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  521. package/src/private/providers/simulation_provider.ts +0 -45
  522. package/src/private/simulator.ts +0 -147
  523. package/src/private/unconstrained_execution.ts +0 -50
  524. package/src/private/unconstrained_execution_oracle.ts +0 -373
  525. package/src/public/avm/bytecode_utils.ts +0 -17
  526. package/src/public/avm/fixtures/index.ts +0 -296
  527. package/src/public/avm/journal/index.ts +0 -1
  528. package/src/public/avm/journal/journal.ts +0 -742
  529. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  530. package/src/public/bytecode_errors.ts +0 -6
  531. package/src/public/execution.ts +0 -140
  532. package/src/public/tx_contract_cache.ts +0 -69
  533. package/src/test/utils.ts +0 -36
@@ -1,327 +1,285 @@
1
- import { Fr } from '@aztec/foundation/fields';
2
- import { createLogger } from '@aztec/foundation/log';
1
+ import {
2
+ L1_TO_L2_MSG_TREE_LEAF_COUNT,
3
+ NOTE_HASH_TREE_LEAF_COUNT,
4
+ NULLIFIER_SUBTREE_HEIGHT,
5
+ PUBLIC_DATA_SUBTREE_HEIGHT,
6
+ } from '@aztec/constants';
7
+ import { Fr } from '@aztec/foundation/curves/bn254';
8
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
9
  import { Timer } from '@aztec/foundation/timer';
4
- import { ContractClassRegisteredEvent } from '@aztec/protocol-contracts/class-registerer';
5
- import { ContractInstanceDeployedEvent } from '@aztec/protocol-contracts/instance-deployer';
10
+ import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
11
+ import { ContractInstancePublishedEvent } from '@aztec/protocol-contracts/instance-registry';
6
12
  import type { FunctionSelector } from '@aztec/stdlib/abi';
7
13
  import { PublicDataWrite } from '@aztec/stdlib/avm';
8
14
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
9
15
  import {
16
+ AllContractDeploymentData,
10
17
  type ContractClassPublic,
11
18
  type ContractDataSource,
19
+ type ContractDeploymentData,
12
20
  type ContractInstanceWithAddress,
13
21
  computePublicBytecodeCommitment,
14
22
  } from '@aztec/stdlib/contract';
15
23
  import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
16
- import type {
17
- MerkleTreeCheckpointOperations,
18
- MerkleTreeReadOperations,
19
- MerkleTreeWriteOperations,
20
- } from '@aztec/stdlib/interfaces/server';
21
- import { ContractClassLog, PrivateLog } from '@aztec/stdlib/logs';
24
+ import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
22
25
  import type { PublicDBAccessStats } from '@aztec/stdlib/stats';
23
- import { MerkleTreeId, type PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
24
- import type { Tx } from '@aztec/stdlib/tx';
26
+ import {
27
+ MerkleTreeId,
28
+ NullifierLeaf,
29
+ PublicDataTreeLeaf,
30
+ type PublicDataTreeLeafPreimage,
31
+ getTreeName,
32
+ } from '@aztec/stdlib/trees';
33
+ import { TreeSnapshots, type Tx } from '@aztec/stdlib/tx';
34
+ import type { UInt64 } from '@aztec/stdlib/types';
25
35
 
26
- import type { PublicContractsDB, PublicStateDB } from '../common/db_interfaces.js';
27
- import { TxContractCache } from './tx_contract_cache.js';
36
+ import { strict as assert } from 'assert';
37
+
38
+ import { ContractsDbCheckpoint } from './contracts_db_checkpoint.js';
39
+ import type { PublicContractsDBInterface, PublicStateDBInterface } from './db_interfaces.js';
40
+ import { L1ToL2MessageIndexOutOfRangeError, NoteHashIndexOutOfRangeError } from './side_effect_errors.js';
28
41
 
29
42
  /**
30
- * Implements the PublicContractsDB using a ContractDataSource.
31
- * Progressively records contracts in transaction as they are processed in a block.
32
- * Separates block-level contract information (from processed/included txs) from the
33
- * current tx's contract information (which may be cleared on tx revert/death).
43
+ * Implements the PublicContractsDBInterface using a ContractDataSource.
44
+ * Uses a stack-based checkpoint model for managing contract state.
34
45
  */
35
- export class ContractsDataSourcePublicDB implements PublicContractsDB {
36
- // Two caching layers for contract classes and instances.
37
- // Tx-level cache:
38
- // - The current tx's new contract information is cached
39
- // in currentTxNonRevertibleCache and currentTxRevertibleCache.
40
- // Block-level cache:
41
- // - Contract information from earlier in the block, usable by later txs.
42
- // When a tx succeeds, that tx's caches are merged into the block cache and cleared.
43
- private currentTxNonRevertibleCache = new TxContractCache();
44
- private currentTxRevertibleCache = new TxContractCache();
45
- private blockCache = new TxContractCache();
46
- // Separate flat cache for bytecode commitments.
47
- private bytecodeCommitmentCache = new Map<string, Fr>();
48
-
49
- private log = createLogger('simulator:contracts-data-source');
50
-
51
- constructor(private dataSource: ContractDataSource) {}
46
+ export class PublicContractsDB implements PublicContractsDBInterface {
47
+ private contractStateStack: ContractsDbCheckpoint[] = [new ContractsDbCheckpoint()];
52
48
 
53
- /**
54
- * Add new contracts from a transaction
55
- * @param tx - The transaction to add contracts from.
56
- */
57
- public async addNewContracts(tx: Tx): Promise<void> {
58
- await this.addNonRevertibleContractClasses(tx);
59
- await this.addRevertibleContractClasses(tx);
60
- this.addNonRevertibleContractInstances(tx);
61
- this.addRevertibleContractInstances(tx);
62
- }
49
+ private log: Logger;
63
50
 
64
- /**
65
- * Add non revertible contracts from a transaction
66
- * @param tx - The transaction to add non revertible contracts from.
67
- */
68
- public async addNewNonRevertibleContracts(tx: Tx) {
69
- await this.addNonRevertibleContractClasses(tx);
70
- this.addNonRevertibleContractInstances(tx);
51
+ constructor(
52
+ private dataSource: ContractDataSource,
53
+ bindings?: LoggerBindings,
54
+ ) {
55
+ this.log = createLogger('simulator:contracts-data-source', bindings);
71
56
  }
72
57
 
73
- /**
74
- * Add revertible contracts from a transaction
75
- * @param tx - The transaction to add revertible contracts from.
76
- */
77
- public async addNewRevertibleContracts(tx: Tx) {
78
- await this.addRevertibleContractClasses(tx);
79
- this.addRevertibleContractInstances(tx);
80
- }
58
+ /** Parses raw log data from the C++/NAPI bridge and inserts the resulting contracts into the current checkpoint. */
59
+ public addContractsFromLogs(contractDeploymentData: ContractDeploymentData): void {
60
+ const currentState = this.getCurrentState();
81
61
 
82
- /**
83
- * Add non-revertible contract classes from a transaction
84
- * For private-only txs, this will be all contract classes (found in tx.data.forPublic)
85
- * @param tx - The transaction to add non-revertible contract classes from.
86
- */
87
- private async addNonRevertibleContractClasses(tx: Tx) {
88
- 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
-
95
- await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxNonRevertibleCache, 'non-revertible');
96
- }
62
+ this.addContractClassesFromEvents(
63
+ ContractClassPublishedEvent.extractContractClassEvents(contractDeploymentData.getContractClassLogs()),
64
+ currentState,
65
+ );
97
66
 
98
- /**
99
- * Add revertible contract classes from a transaction
100
- * None for private-only txs.
101
- * @param tx - The transaction to add revertible contract classes from.
102
- */
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
-
111
- await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxRevertibleCache, 'revertible');
67
+ this.addContractInstancesFromEvents(
68
+ ContractInstancePublishedEvent.extractContractInstanceEvents(contractDeploymentData.getPrivateLogs()),
69
+ currentState,
70
+ );
112
71
  }
113
72
 
114
- /**
115
- * Add non-revertible contract instances from a transaction
116
- * For private-only txs, this will be all contract instances (found in tx.data.forRollup)
117
- * @param tx - The transaction to add non-revertible contract instances from.
118
- */
119
- private addNonRevertibleContractInstances(tx: Tx) {
120
- const contractInstanceLogs = tx.data.forPublic
121
- ? tx.data.forPublic!.nonRevertibleAccumulatedData.privateLogs.filter(l => !l.isEmpty())
122
- : tx.data.forRollup!.end.privateLogs.filter(l => !l.isEmpty());
123
-
124
- this.addContractInstancesFromLogs(contractInstanceLogs, this.currentTxNonRevertibleCache, 'non-revertible');
73
+ public addNewContracts(tx: Tx): void {
74
+ const contractDeploymentData = AllContractDeploymentData.fromTx(tx);
75
+ this.addContractsFromLogs(contractDeploymentData.getNonRevertibleContractDeploymentData());
76
+ this.addContractsFromLogs(contractDeploymentData.getRevertibleContractDeploymentData());
125
77
  }
126
78
 
127
- /**
128
- * Add revertible contract instances from a transaction
129
- * None for private-only txs.
130
- * @param tx - The transaction to add revertible contract instances from.
131
- */
132
- private addRevertibleContractInstances(tx: Tx) {
133
- const contractInstanceLogs = tx.data.forPublic
134
- ? tx.data.forPublic!.revertibleAccumulatedData.privateLogs.filter(l => !l.isEmpty())
135
- : [];
136
-
137
- this.addContractInstancesFromLogs(contractInstanceLogs, this.currentTxRevertibleCache, 'revertible');
79
+ /** Inserts typed contract instances directly into the current checkpoint. */
80
+ public addContracts(contractInstances?: ContractInstanceWithAddress[]): void {
81
+ const currentState = this.getCurrentState();
82
+ for (const instance of contractInstances ?? []) {
83
+ currentState.addInstance(instance.address, instance);
84
+ }
138
85
  }
139
86
 
140
87
  /**
141
- * Given a tx's siloed contract class logs, add the contract classes to the cache
142
- * @param siloedContractClassLogs - Contract class logs to process
143
- * @param cache - The cache to store the contract classes in
144
- * @param cacheType - Type of cache (for logging)
88
+ * Creates a new checkpoint, copying the current state for upcoming modifications,
89
+ * and enabling rollbacks to current state in case of a revert.
145
90
  */
146
- private async addContractClassesFromLogs(
147
- siloedContractClassLogs: ContractClassLog[],
148
- cache: TxContractCache,
149
- cacheType: string,
150
- ) {
151
- const contractClassEvents = siloedContractClassLogs
152
- .filter((log: ContractClassLog) => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
153
- .map((log: ContractClassLog) => ContractClassRegisteredEvent.fromLog(log));
154
-
155
- // Cache contract classes
156
- await Promise.all(
157
- contractClassEvents.map(async (event: ContractClassRegisteredEvent) => {
158
- this.log.debug(`Adding class ${event.contractClassId.toString()} to contract's ${cacheType} tx cache`);
159
- const contractClass = await event.toContractClassPublic();
160
-
161
- cache.addClass(event.contractClassId, contractClass);
162
- }),
163
- );
91
+ public createCheckpoint(): void {
92
+ const currentState = this.getCurrentState();
93
+ const newState = currentState.fork();
94
+ this.contractStateStack.push(newState);
164
95
  }
165
96
 
166
97
  /**
167
- * Given a tx's contract instance logs, add the contract instances to the cache
168
- * @param contractInstanceLogs - Contract instance logs to process
169
- * @param cache - The cache to store the contract instances in
170
- * @param cacheType - Type of cache (for logging)
98
+ * Commits the current checkpoint, accepting its state latest.
171
99
  */
172
- private addContractInstancesFromLogs(contractInstanceLogs: PrivateLog[], cache: TxContractCache, cacheType: string) {
173
- const contractInstanceEvents = contractInstanceLogs
174
- .filter(log => ContractInstanceDeployedEvent.isContractInstanceDeployedEvent(log))
175
- .map(log => ContractInstanceDeployedEvent.fromLog(log));
176
-
177
- // Cache contract instances
178
- contractInstanceEvents.forEach(e => {
179
- this.log.debug(
180
- `Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to ${cacheType} tx contract cache`,
181
- );
182
- cache.addInstance(e.address, e.toContractInstance());
183
- });
100
+ public commitCheckpoint(): void {
101
+ if (this.contractStateStack.length <= 1) {
102
+ throw new Error('No checkpoint to commit');
103
+ }
104
+ const topState = this.contractStateStack.pop()!;
105
+ this.contractStateStack[this.contractStateStack.length - 1] = topState;
184
106
  }
185
107
 
186
108
  /**
187
- * Clear new contracts from the current tx's cache
109
+ * Commits the current checkpoint, not erroring if there is no checkpoint
110
+ * to commit. This is useful to do a sanity commit at the end of tx execution,
111
+ * doing nothing if the checkpoint was already reverted, but truly committing
112
+ * otherwise.
188
113
  */
189
- public clearContractsForTx() {
190
- this.currentTxRevertibleCache.clear();
191
- this.currentTxRevertibleCache.clear();
192
- this.currentTxNonRevertibleCache.clear();
114
+ public commitCheckpointOkIfNone(): void {
115
+ if (this.contractStateStack.length <= 1) {
116
+ return;
117
+ }
118
+ const topState = this.contractStateStack.pop()!;
119
+ this.contractStateStack[this.contractStateStack.length - 1] = topState;
193
120
  }
194
121
 
195
122
  /**
196
- * Commits the current transaction's cached contracts to the block-level cache.
197
- * Then, clears the tx cache.
123
+ * Reverts the current checkpoint, discarding its state and rolling back
124
+ * to the state as of the latest checkpoint.
198
125
  */
199
- public commitContractsForTx(onlyNonRevertibles: boolean = false) {
200
- // Merge non-revertible tx cache into block cache
201
- this.blockCache.mergeFrom(this.currentTxNonRevertibleCache);
202
-
203
- if (!onlyNonRevertibles) {
204
- // Merge revertible tx cache into block cache
205
- this.blockCache.mergeFrom(this.currentTxRevertibleCache);
126
+ public revertCheckpoint(): void {
127
+ if (this.contractStateStack.length <= 1) {
128
+ throw new Error('No checkpoint to revert');
206
129
  }
130
+ this.contractStateStack.pop();
131
+ }
207
132
 
208
- // Clear the tx's caches
209
- this.currentTxNonRevertibleCache.clear();
210
- this.currentTxRevertibleCache.clear();
133
+ private getCurrentState(): ContractsDbCheckpoint {
134
+ return this.contractStateStack[this.contractStateStack.length - 1];
211
135
  }
212
136
 
213
- public async getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
214
- // Check caches in order: tx revertible -> tx non-revertible -> block -> data source
215
- return (
216
- this.currentTxRevertibleCache.getInstance(address) ??
217
- this.currentTxNonRevertibleCache.getInstance(address) ??
218
- this.blockCache.getInstance(address) ??
219
- (await this.dataSource.getContract(address))
220
- );
137
+ // TODO(fcarreiro/alvaro): This method currently needs a blockNumber. Since this class
138
+ // is only ever used for a given block, it should be possible to construct it with the
139
+ // block number and then forget about it. However, since this class (and interface) is
140
+ // currently more externally exposed than we'd want to, Facundo preferred to not add it
141
+ // to the constructor right now. If we can make this class more private, we should
142
+ // reconsider this. A litmus test is in how many places we need to initialize with a
143
+ // dummy block number (tests or not) and pass block numbers to `super`.
144
+ // Note: Block number got changed to timestamp so this comment ^ is outdated. Keeping
145
+ // the comment as is as I am not part of the AVM cabal.
146
+ public async getContractInstance(
147
+ address: AztecAddress,
148
+ timestamp: UInt64,
149
+ ): Promise<ContractInstanceWithAddress | undefined> {
150
+ const currentState = this.getCurrentState();
151
+ return currentState.getInstance(address) ?? (await this.dataSource.getContract(address, timestamp));
221
152
  }
222
153
 
223
154
  public async getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined> {
224
- // Check caches in order: tx revertible -> tx non-revertible -> block -> data source
225
- return (
226
- this.currentTxRevertibleCache.getClass(contractClassId) ??
227
- this.currentTxNonRevertibleCache.getClass(contractClassId) ??
228
- this.blockCache.getClass(contractClassId) ??
229
- (await this.dataSource.getContractClass(contractClassId))
230
- );
155
+ const currentState = this.getCurrentState();
156
+ return currentState.getClass(contractClassId) ?? (await this.dataSource.getContractClass(contractClassId));
231
157
  }
232
158
 
233
159
  public async getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined> {
234
- // Try and retrieve from cache
235
- const key = contractClassId.toString();
236
- const result = this.bytecodeCommitmentCache.get(key);
237
- if (result !== undefined) {
238
- return result;
239
- }
240
- // Now try from the store
241
- const fromStore = await this.dataSource.getBytecodeCommitment(contractClassId);
242
- if (fromStore !== undefined) {
243
- this.bytecodeCommitmentCache.set(key, fromStore);
244
- return fromStore;
160
+ const currentState = this.getCurrentState();
161
+ const commitment =
162
+ currentState.getBytecodeCommitment(contractClassId) ??
163
+ (await this.dataSource.getBytecodeCommitment(contractClassId));
164
+ if (commitment !== undefined) {
165
+ return commitment;
245
166
  }
246
-
247
- // Not in either the store or the cache, build it here and cache
167
+ // Not in the current state or the store, compute it here
168
+ // Get the contract class
248
169
  const contractClass = await this.getContractClass(contractClassId);
170
+
249
171
  if (contractClass === undefined) {
172
+ // cannot compute bytecode commitment if contract class is not found
250
173
  return undefined;
251
174
  }
252
175
 
253
176
  const value = await computePublicBytecodeCommitment(contractClass.packedBytecode);
254
- this.bytecodeCommitmentCache.set(key, value);
177
+ // Add to cache (current checkpoint state) so we don't compute again
178
+ currentState.addBytecodeCommitment(contractClassId, value);
255
179
  return value;
256
180
  }
257
181
 
258
182
  public async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
259
- return await this.dataSource.getContractFunctionName(address, selector);
183
+ return await this.dataSource.getDebugFunctionName(address, selector);
184
+ }
185
+
186
+ private addContractClassesFromEvents(
187
+ contractClassEvents: ContractClassPublishedEvent[],
188
+ state: ContractsDbCheckpoint,
189
+ ) {
190
+ for (const event of contractClassEvents) {
191
+ this.log.debug(`Adding class ${event.contractClassId.toString()} to contract state`);
192
+ const contractClass = event.toContractClassPublic();
193
+ state.addClass(event.contractClassId, contractClass);
194
+ }
195
+ }
196
+
197
+ private addContractInstancesFromEvents(
198
+ contractInstanceEvents: ContractInstancePublishedEvent[],
199
+ state: ContractsDbCheckpoint,
200
+ ) {
201
+ contractInstanceEvents.forEach(e => {
202
+ this.log.debug(
203
+ `Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to contract state`,
204
+ );
205
+ state.addInstance(e.address, e.toContractInstance());
206
+ });
260
207
  }
261
208
  }
262
209
 
263
210
  /**
264
- * A public state DB that reads and writes to the world state.
211
+ * A high-level class that provides access to the merkle trees.
212
+ *
213
+ * This class is just a helper wrapper around a merkle db. Anything that you can do with it
214
+ * can also be done directly with the merkle db. This class should NOT be exposed or used
215
+ * outside of `simulator/src/public`.
216
+ *
217
+ * NOTE: This class is currently written in such a way that it would generate the
218
+ * necessary hints if used with a hinting merkle db. This is a bit of a leak of concepts.
219
+ * Eventually we can have everything depend on a config/factory at the TxSimulator level
220
+ * to decide whether to use hints or not (same with tracing, etc).
265
221
  */
266
- export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicStateDB, MerkleTreeCheckpointOperations {
267
- private logger = createLogger('simulator:world-state-db');
222
+ export class PublicTreesDB implements PublicStateDBInterface {
223
+ private logger: Logger;
268
224
 
269
- constructor(public db: MerkleTreeWriteOperations, dataSource: ContractDataSource) {
270
- super(dataSource);
225
+ constructor(
226
+ private readonly db: MerkleTreeWriteOperations,
227
+ bindings?: LoggerBindings,
228
+ ) {
229
+ this.logger = createLogger('simulator:public-trees-db', bindings);
271
230
  }
272
231
 
273
- /**
274
- * Checkpoints the current fork state
275
- */
276
- public async createCheckpoint() {
277
- await this.db.createCheckpoint();
278
- }
232
+ public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
233
+ const timer = new Timer();
234
+ const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
279
235
 
280
- /**
281
- * Commits the current checkpoint
282
- */
283
- public async commitCheckpoint() {
284
- await this.db.commitCheckpoint();
285
- }
236
+ const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
237
+ if (!lowLeafResult) {
238
+ throw new Error('Low leaf not found');
239
+ }
286
240
 
287
- /**
288
- * Reverts the current checkpoint
289
- */
290
- public async revertCheckpoint() {
291
- await this.db.revertCheckpoint();
292
- }
241
+ // TODO: We need this for the hints. See class comment for more details.
242
+ await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
243
+ // Unconditionally fetching the preimage for the hints. Move it to the hinting layer?
244
+ const preimage = (await this.db.getLeafPreimage(
245
+ MerkleTreeId.PUBLIC_DATA_TREE,
246
+ lowLeafResult.index,
247
+ )) as PublicDataTreeLeafPreimage;
293
248
 
294
- public getMerkleInterface(): MerkleTreeWriteOperations {
295
- return this.db;
296
- }
249
+ const result = lowLeafResult.alreadyPresent ? preimage.leaf.value : Fr.ZERO;
250
+ this.logger.debug(`Storage read (contract=${contract}, slot=${slot}, value=${result})`, {
251
+ eventName: 'public-db-access',
252
+ duration: timer.ms(),
253
+ operation: 'storage-read',
254
+ } satisfies PublicDBAccessStats);
297
255
 
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);
256
+ return result;
306
257
  }
307
258
 
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
259
  public async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<void> {
260
+ const timer = new Timer();
316
261
  const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
317
262
  const publicDataWrite = new PublicDataWrite(leafSlot, newValue);
318
263
  await this.db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
264
+
265
+ this.logger.debug(`Storage write (contract=${contract}, slot=${slot}, value=${newValue})`, {
266
+ eventName: 'public-db-access',
267
+ duration: timer.ms(),
268
+ operation: 'storage-write',
269
+ } satisfies PublicDBAccessStats);
319
270
  }
320
271
 
321
- public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr | undefined> {
272
+ public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr> {
322
273
  const timer = new Timer();
274
+ if (leafIndex > L1_TO_L2_MSG_TREE_LEAF_COUNT) {
275
+ throw new L1ToL2MessageIndexOutOfRangeError(Number(leafIndex));
276
+ }
323
277
  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`, {
278
+ assert(leafValue !== undefined, 'Unexpected null response from l1 to l2 message tree');
279
+ // TODO: We need this for the hints. See class comment for more details.
280
+ await this.db.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, leafIndex);
281
+
282
+ this.logger.debug(`Fetched L1 to L2 message leaf value (leafIndex=${leafIndex}, value=${leafValue})`, {
325
283
  eventName: 'public-db-access',
326
284
  duration: timer.ms(),
327
285
  operation: 'get-l1-to-l2-message-leaf-value',
@@ -329,41 +287,120 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
329
287
  return leafValue;
330
288
  }
331
289
 
332
- public async getCommitmentValue(leafIndex: bigint): Promise<Fr | undefined> {
290
+ public async getNoteHash(leafIndex: bigint): Promise<Fr> {
333
291
  const timer = new Timer();
292
+ if (leafIndex > NOTE_HASH_TREE_LEAF_COUNT) {
293
+ throw new NoteHashIndexOutOfRangeError(Number(leafIndex));
294
+ }
334
295
  const leafValue = await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
335
- this.logger.debug(`[DB] Fetched commitment leaf value`, {
296
+ assert(leafValue !== undefined, 'Unexpected null response from note hash tree');
297
+ // TODO: We need this for the hints. See class comment for more details.
298
+ await this.db.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
299
+
300
+ this.logger.debug(`Fetched note hash leaf value (leafIndex=${leafIndex}, value=${leafValue})`, {
336
301
  eventName: 'public-db-access',
337
302
  duration: timer.ms(),
338
- operation: 'get-commitment-leaf-value',
303
+ operation: 'get-note-hash',
339
304
  } satisfies PublicDBAccessStats);
340
305
  return leafValue;
341
306
  }
342
307
 
343
- public async getNullifierIndex(nullifier: Fr): Promise<bigint | undefined> {
308
+ public async writeNoteHash(noteHash: Fr): Promise<void> {
344
309
  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`, {
310
+ await this.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, [noteHash]);
311
+
312
+ this.logger.debug(`Wrote note hash (noteHash=${noteHash})`, {
347
313
  eventName: 'public-db-access',
348
314
  duration: timer.ms(),
349
- operation: 'get-nullifier-index',
315
+ operation: 'write-note-hash',
350
316
  } satisfies PublicDBAccessStats);
351
- return index;
352
317
  }
353
- }
354
318
 
355
- export async function readPublicState(db: MerkleTreeReadOperations, contract: AztecAddress, slot: Fr): Promise<Fr> {
356
- const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
319
+ public async checkNullifierExists(nullifier: Fr): Promise<boolean> {
320
+ const timer = new Timer();
321
+ const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
322
+ if (!lowLeafResult) {
323
+ throw new Error('Low leaf not found');
324
+ }
325
+ // TODO: We need this for the hints. See class comment for more details.
326
+ await this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, lowLeafResult.index);
327
+ // TODO: We need this for the hints. See class comment for more details.
328
+ await this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, lowLeafResult.index);
329
+ const exists = lowLeafResult.alreadyPresent;
330
+
331
+ this.logger.debug(`Checked nullifier exists (nullifier=${nullifier}, exists=${exists})`, {
332
+ eventName: 'public-db-access',
333
+ duration: timer.ms(),
334
+ operation: 'check-nullifier-exists',
335
+ } satisfies PublicDBAccessStats);
336
+ return exists;
337
+ }
338
+
339
+ public async writeNullifier(siloedNullifier: Fr): Promise<void> {
340
+ const timer = new Timer();
341
+ await this.db.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()]);
342
+
343
+ this.logger.debug(`Wrote nullifier (nullifier=${siloedNullifier})`, {
344
+ eventName: 'public-db-access',
345
+ duration: timer.ms(),
346
+ operation: 'write-nullifier',
347
+ } satisfies PublicDBAccessStats);
348
+ }
349
+
350
+ public async padTree(treeId: MerkleTreeId, leavesToInsert: number): Promise<void> {
351
+ const timer = new Timer();
352
+
353
+ switch (treeId) {
354
+ // Indexed trees.
355
+ case MerkleTreeId.NULLIFIER_TREE:
356
+ await this.db.batchInsert(
357
+ treeId,
358
+ Array(leavesToInsert).fill(NullifierLeaf.empty().toBuffer()),
359
+ NULLIFIER_SUBTREE_HEIGHT,
360
+ );
361
+ break;
362
+ case MerkleTreeId.PUBLIC_DATA_TREE:
363
+ await this.db.batchInsert(
364
+ treeId,
365
+ Array(leavesToInsert).fill(PublicDataTreeLeaf.empty().toBuffer()),
366
+ PUBLIC_DATA_SUBTREE_HEIGHT,
367
+ );
368
+ break;
369
+ // Append-only trees.
370
+ case MerkleTreeId.L1_TO_L2_MESSAGE_TREE:
371
+ case MerkleTreeId.NOTE_HASH_TREE:
372
+ await this.db.appendLeaves(treeId, Array(leavesToInsert).fill(Fr.ZERO));
373
+ break;
374
+ default:
375
+ throw new Error(`Padding not supported for tree ${treeId}`);
376
+ }
357
377
 
358
- const lowLeafResult = await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
359
- if (!lowLeafResult || !lowLeafResult.alreadyPresent) {
360
- return Fr.ZERO;
378
+ this.logger.debug(`Padded tree (tree=${getTreeName(treeId)}, leavesToInsert=${leavesToInsert})`, {
379
+ eventName: 'public-db-access',
380
+ duration: timer.ms(),
381
+ operation: 'pad-tree',
382
+ } satisfies PublicDBAccessStats);
361
383
  }
362
384
 
363
- const preimage = (await db.getLeafPreimage(
364
- MerkleTreeId.PUBLIC_DATA_TREE,
365
- lowLeafResult.index,
366
- )) as PublicDataTreeLeafPreimage;
385
+ public async createCheckpoint(): Promise<void> {
386
+ await this.db.createCheckpoint();
387
+ }
367
388
 
368
- return preimage.value;
389
+ public async commitCheckpoint(): Promise<void> {
390
+ await this.db.commitCheckpoint();
391
+ }
392
+
393
+ public async revertCheckpoint(): Promise<void> {
394
+ await this.db.revertCheckpoint();
395
+ }
396
+
397
+ public async getTreeSnapshots(): Promise<TreeSnapshots> {
398
+ const stateReference = await this.db.getStateReference();
399
+ return new TreeSnapshots(
400
+ stateReference.l1ToL2MessageTree,
401
+ stateReference.partial.noteHashTree,
402
+ stateReference.partial.nullifierTree,
403
+ stateReference.partial.publicDataTree,
404
+ );
405
+ }
369
406
  }