@aztec/simulator 0.0.1-commit.b655e406 → 0.0.1-commit.c0b82b2

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 (371) hide show
  1. package/README.md +6 -4
  2. package/dest/client.d.ts +1 -1
  3. package/dest/common/errors.d.ts +2 -2
  4. package/dest/common/errors.d.ts.map +1 -1
  5. package/dest/common/index.d.ts +1 -1
  6. package/dest/common/stats/index.d.ts +1 -1
  7. package/dest/common/stats/stats.d.ts +1 -1
  8. package/dest/private/acvm/acvm.d.ts +4 -2
  9. package/dest/private/acvm/acvm.d.ts.map +1 -1
  10. package/dest/private/acvm/acvm.js +4 -3
  11. package/dest/private/acvm/acvm_types.d.ts +1 -1
  12. package/dest/private/acvm/deserialize.d.ts +2 -2
  13. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  14. package/dest/private/acvm/deserialize.js +1 -1
  15. package/dest/private/acvm/index.d.ts +1 -1
  16. package/dest/private/acvm/serialize.d.ts +2 -2
  17. package/dest/private/acvm/serialize.d.ts.map +1 -1
  18. package/dest/private/acvm/serialize.js +1 -1
  19. package/dest/private/acvm_native.d.ts +5 -3
  20. package/dest/private/acvm_native.d.ts.map +1 -1
  21. package/dest/private/acvm_native.js +8 -6
  22. package/dest/private/acvm_wasm.d.ts +4 -3
  23. package/dest/private/acvm_wasm.d.ts.map +1 -1
  24. package/dest/private/acvm_wasm.js +4 -4
  25. package/dest/private/acvm_wasm_with_blobs.d.ts +1 -1
  26. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -1
  27. package/dest/private/circuit_recording/circuit_recorder.d.ts +4 -3
  28. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  29. package/dest/private/circuit_recording/circuit_recorder.js +21 -18
  30. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +3 -2
  31. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  32. package/dest/private/circuit_recording/file_circuit_recorder.js +2 -2
  33. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
  34. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
  35. package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
  36. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
  37. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  38. package/dest/private/circuit_simulator.d.ts +1 -1
  39. package/dest/private/factory.d.ts +3 -3
  40. package/dest/private/factory.d.ts.map +1 -1
  41. package/dest/private/factory.js +7 -4
  42. package/dest/public/avm/avm_context.d.ts +3 -3
  43. package/dest/public/avm/avm_context.d.ts.map +1 -1
  44. package/dest/public/avm/avm_contract_call_result.d.ts +6 -6
  45. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  46. package/dest/public/avm/avm_contract_call_result.js +3 -3
  47. package/dest/public/avm/avm_execution_environment.d.ts +9 -8
  48. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  49. package/dest/public/avm/avm_execution_environment.js +5 -8
  50. package/dest/public/avm/avm_gas.d.ts +2 -2
  51. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  52. package/dest/public/avm/avm_gas.js +3 -3
  53. package/dest/public/avm/avm_machine_state.d.ts +7 -6
  54. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  55. package/dest/public/avm/avm_machine_state.js +3 -2
  56. package/dest/public/avm/avm_memory_types.d.ts +14 -14
  57. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  58. package/dest/public/avm/avm_memory_types.js +4 -1
  59. package/dest/public/avm/avm_simulator.d.ts +5 -3
  60. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  61. package/dest/public/avm/avm_simulator.js +13 -11
  62. package/dest/public/avm/avm_simulator_interface.d.ts +1 -1
  63. package/dest/public/avm/calldata.d.ts +51 -0
  64. package/dest/public/avm/calldata.d.ts.map +1 -0
  65. package/dest/public/avm/calldata.js +63 -0
  66. package/dest/public/avm/errors.d.ts +8 -2
  67. package/dest/public/avm/errors.d.ts.map +1 -1
  68. package/dest/public/avm/errors.js +14 -2
  69. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +2 -0
  70. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
  71. package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
  72. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +1 -1
  73. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  74. package/dest/public/avm/fixtures/avm_simulation_tester.js +15 -5
  75. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +2 -2
  76. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  77. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +1 -1
  78. package/dest/public/avm/fixtures/initializers.d.ts +2 -3
  79. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
  80. package/dest/public/avm/fixtures/initializers.js +8 -5
  81. package/dest/public/avm/fixtures/utils.d.ts +4 -3
  82. package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
  83. package/dest/public/avm/fixtures/utils.js +3 -2
  84. package/dest/public/avm/index.d.ts +1 -1
  85. package/dest/public/avm/opcodes/accrued_substate.d.ts +17 -18
  86. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  87. package/dest/public/avm/opcodes/accrued_substate.js +42 -43
  88. package/dest/public/avm/opcodes/addressing_mode.d.ts +1 -1
  89. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  90. package/dest/public/avm/opcodes/addressing_mode.js +2 -2
  91. package/dest/public/avm/opcodes/arithmetic.d.ts +3 -1
  92. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  93. package/dest/public/avm/opcodes/arithmetic.js +12 -2
  94. package/dest/public/avm/opcodes/bitwise.d.ts +3 -3
  95. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  96. package/dest/public/avm/opcodes/bitwise.js +5 -5
  97. package/dest/public/avm/opcodes/comparators.d.ts +1 -1
  98. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  99. package/dest/public/avm/opcodes/comparators.js +1 -1
  100. package/dest/public/avm/opcodes/contract.d.ts +3 -3
  101. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  102. package/dest/public/avm/opcodes/contract.js +8 -8
  103. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  104. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  105. package/dest/public/avm/opcodes/control_flow.js +4 -4
  106. package/dest/public/avm/opcodes/conversion.d.ts +3 -3
  107. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  108. package/dest/public/avm/opcodes/conversion.js +4 -4
  109. package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
  110. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  111. package/dest/public/avm/opcodes/ec_add.js +17 -8
  112. package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
  113. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  114. package/dest/public/avm/opcodes/environment_getters.js +6 -6
  115. package/dest/public/avm/opcodes/external_calls.d.ts +9 -9
  116. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  117. package/dest/public/avm/opcodes/external_calls.js +23 -22
  118. package/dest/public/avm/opcodes/hashing.d.ts +7 -7
  119. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  120. package/dest/public/avm/opcodes/hashing.js +21 -16
  121. package/dest/public/avm/opcodes/index.d.ts +1 -1
  122. package/dest/public/avm/opcodes/instruction.d.ts +2 -2
  123. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  125. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  126. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  127. package/dest/public/avm/opcodes/memory.d.ts +13 -13
  128. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  129. package/dest/public/avm/opcodes/memory.js +26 -26
  130. package/dest/public/avm/opcodes/misc.d.ts +3 -3
  131. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  132. package/dest/public/avm/opcodes/misc.js +8 -8
  133. package/dest/public/avm/opcodes/storage.d.ts +14 -13
  134. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  135. package/dest/public/avm/opcodes/storage.js +34 -24
  136. package/dest/public/avm/revert_reason.d.ts +2 -2
  137. package/dest/public/avm/revert_reason.d.ts.map +1 -1
  138. package/dest/public/avm/revert_reason.js +3 -2
  139. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -1
  140. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  141. package/dest/public/avm/serialization/bytecode_serialization.d.ts +1 -1
  142. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  143. package/dest/public/avm/serialization/bytecode_serialization.js +12 -9
  144. package/dest/public/avm/serialization/instruction_serialization.d.ts +2 -2
  145. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  146. package/dest/public/avm/serialization/instruction_serialization.js +2 -2
  147. package/dest/public/avm/test_utils.d.ts +2 -2
  148. package/dest/public/avm/test_utils.d.ts.map +1 -1
  149. package/dest/public/avm/test_utils.js +1 -1
  150. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  151. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  152. package/dest/public/contracts_db_checkpoint.js +30 -0
  153. package/dest/public/db_interfaces.d.ts +14 -2
  154. package/dest/public/db_interfaces.d.ts.map +1 -1
  155. package/dest/public/debug_fn_name.d.ts +16 -3
  156. package/dest/public/debug_fn_name.d.ts.map +1 -1
  157. package/dest/public/debug_fn_name.js +31 -3
  158. package/dest/public/executor_metrics.d.ts +3 -2
  159. package/dest/public/executor_metrics.d.ts.map +1 -1
  160. package/dest/public/executor_metrics.js +13 -34
  161. package/dest/public/executor_metrics_interface.d.ts +3 -2
  162. package/dest/public/executor_metrics_interface.d.ts.map +1 -1
  163. package/dest/public/fixtures/amm_test.d.ts +1 -1
  164. package/dest/public/fixtures/amm_test.js +4 -4
  165. package/dest/public/fixtures/bulk_test.d.ts +3 -3
  166. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  167. package/dest/public/fixtures/bulk_test.js +5 -69
  168. package/dest/public/fixtures/custom_bytecode_tester.d.ts +29 -7
  169. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  170. package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
  171. package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -8
  172. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
  173. package/dest/public/fixtures/custom_bytecode_tests.js +83 -18
  174. package/dest/public/fixtures/index.d.ts +4 -2
  175. package/dest/public/fixtures/index.d.ts.map +1 -1
  176. package/dest/public/fixtures/index.js +3 -1
  177. package/dest/public/fixtures/minimal_public_tx.d.ts +2 -8
  178. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -1
  179. package/dest/public/fixtures/minimal_public_tx.js +6 -16
  180. package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
  181. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
  182. package/dest/public/fixtures/opcode_spammer.js +1653 -0
  183. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +24 -6
  184. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  185. package/dest/public/fixtures/public_tx_simulation_tester.js +89 -21
  186. package/dest/public/fixtures/simple_contract_data_source.d.ts +5 -4
  187. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
  188. package/dest/public/fixtures/simple_contract_data_source.js +4 -4
  189. package/dest/public/fixtures/token_test.d.ts +6 -2
  190. package/dest/public/fixtures/token_test.d.ts.map +1 -1
  191. package/dest/public/fixtures/token_test.js +13 -12
  192. package/dest/public/fixtures/utils.d.ts +2 -2
  193. package/dest/public/fixtures/utils.d.ts.map +1 -1
  194. package/dest/public/fixtures/utils.js +8 -7
  195. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
  196. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  197. package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
  198. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  199. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  200. package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
  201. package/dest/public/hinting_db_sources.d.ts +14 -4
  202. package/dest/public/hinting_db_sources.d.ts.map +1 -1
  203. package/dest/public/hinting_db_sources.js +71 -13
  204. package/dest/public/index.d.ts +3 -2
  205. package/dest/public/index.d.ts.map +1 -1
  206. package/dest/public/index.js +1 -1
  207. package/dest/public/public_db_sources.d.ts +25 -65
  208. package/dest/public/public_db_sources.d.ts.map +1 -1
  209. package/dest/public/public_db_sources.js +78 -135
  210. package/dest/public/public_errors.d.ts +1 -1
  211. package/dest/public/public_errors.d.ts.map +1 -1
  212. package/dest/public/public_processor/guarded_merkle_tree.d.ts +6 -4
  213. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  214. package/dest/public/public_processor/guarded_merkle_tree.js +5 -0
  215. package/dest/public/public_processor/public_processor.d.ts +17 -20
  216. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  217. package/dest/public/public_processor/public_processor.js +477 -72
  218. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  219. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  220. package/dest/public/public_processor/public_processor_metrics.js +28 -45
  221. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
  222. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  223. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
  224. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +35 -23
  225. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
  226. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +95 -53
  227. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  228. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  229. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  230. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  231. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  232. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
  233. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
  234. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  235. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  236. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  237. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  238. package/dest/public/public_tx_simulator/factories.js +28 -0
  239. package/dest/public/public_tx_simulator/index.d.ts +5 -1
  240. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  241. package/dest/public/public_tx_simulator/index.js +3 -0
  242. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +14 -7
  243. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -1
  244. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +5 -5
  245. package/dest/public/public_tx_simulator/public_tx_context.d.ts +8 -4
  246. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  247. package/dest/public/public_tx_simulator/public_tx_context.js +17 -9
  248. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +15 -33
  249. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  250. package/dest/public/public_tx_simulator/public_tx_simulator.js +118 -130
  251. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +25 -2
  252. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
  253. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +4 -4
  254. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -1
  255. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +395 -19
  256. package/dest/public/side_effect_errors.d.ts +1 -1
  257. package/dest/public/side_effect_errors.d.ts.map +1 -1
  258. package/dest/public/side_effect_trace.d.ts +5 -5
  259. package/dest/public/side_effect_trace.d.ts.map +1 -1
  260. package/dest/public/side_effect_trace.js +4 -4
  261. package/dest/public/side_effect_trace_interface.d.ts +3 -4
  262. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  263. package/dest/public/state_manager/index.d.ts +1 -1
  264. package/dest/public/state_manager/nullifiers.d.ts +2 -2
  265. package/dest/public/state_manager/nullifiers.d.ts.map +1 -1
  266. package/dest/public/state_manager/public_storage.d.ts +2 -2
  267. package/dest/public/state_manager/public_storage.d.ts.map +1 -1
  268. package/dest/public/state_manager/public_storage.js +1 -1
  269. package/dest/public/state_manager/state_manager.d.ts +16 -12
  270. package/dest/public/state_manager/state_manager.d.ts.map +1 -1
  271. package/dest/public/state_manager/state_manager.js +21 -10
  272. package/dest/public/test_executor_metrics.d.ts +11 -4
  273. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  274. package/dest/public/test_executor_metrics.js +29 -6
  275. package/dest/public/unique_class_ids.d.ts +1 -1
  276. package/dest/public/unique_class_ids.d.ts.map +1 -1
  277. package/dest/public/utils.d.ts +1 -1
  278. package/dest/server.d.ts +1 -1
  279. package/dest/testing.d.ts +1 -1
  280. package/package.json +21 -20
  281. package/src/common/errors.ts +1 -1
  282. package/src/private/acvm/acvm.ts +4 -3
  283. package/src/private/acvm/deserialize.ts +1 -1
  284. package/src/private/acvm/serialize.ts +1 -1
  285. package/src/private/acvm_native.ts +11 -5
  286. package/src/private/acvm_wasm.ts +7 -3
  287. package/src/private/circuit_recording/circuit_recorder.ts +22 -19
  288. package/src/private/circuit_recording/file_circuit_recorder.ts +7 -2
  289. package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
  290. package/src/private/factory.ts +7 -4
  291. package/src/public/avm/avm_context.ts +2 -2
  292. package/src/public/avm/avm_contract_call_result.ts +8 -6
  293. package/src/public/avm/avm_execution_environment.ts +13 -10
  294. package/src/public/avm/avm_gas.ts +5 -5
  295. package/src/public/avm/avm_machine_state.ts +7 -6
  296. package/src/public/avm/avm_memory_types.ts +5 -1
  297. package/src/public/avm/avm_simulator.ts +19 -14
  298. package/src/public/avm/calldata.ts +100 -0
  299. package/src/public/avm/errors.ts +17 -3
  300. package/src/public/avm/fixtures/account_proof.json +553 -0
  301. package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
  302. package/src/public/avm/fixtures/avm_simulation_tester.ts +18 -4
  303. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +1 -1
  304. package/src/public/avm/fixtures/initializers.ts +10 -11
  305. package/src/public/avm/fixtures/utils.ts +3 -2
  306. package/src/public/avm/opcodes/accrued_substate.ts +31 -34
  307. package/src/public/avm/opcodes/addressing_mode.ts +2 -2
  308. package/src/public/avm/opcodes/arithmetic.ts +14 -2
  309. package/src/public/avm/opcodes/bitwise.ts +3 -3
  310. package/src/public/avm/opcodes/comparators.ts +1 -1
  311. package/src/public/avm/opcodes/contract.ts +4 -7
  312. package/src/public/avm/opcodes/control_flow.ts +2 -2
  313. package/src/public/avm/opcodes/conversion.ts +3 -3
  314. package/src/public/avm/opcodes/ec_add.ts +15 -6
  315. package/src/public/avm/opcodes/environment_getters.ts +7 -7
  316. package/src/public/avm/opcodes/external_calls.ts +17 -15
  317. package/src/public/avm/opcodes/hashing.ts +16 -10
  318. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  319. package/src/public/avm/opcodes/memory.ts +20 -20
  320. package/src/public/avm/opcodes/misc.ts +6 -6
  321. package/src/public/avm/opcodes/storage.ts +30 -22
  322. package/src/public/avm/revert_reason.ts +6 -3
  323. package/src/public/avm/serialization/bytecode_serialization.ts +19 -8
  324. package/src/public/avm/serialization/instruction_serialization.ts +2 -2
  325. package/src/public/avm/test_utils.ts +1 -1
  326. package/src/public/contracts_db_checkpoint.ts +41 -0
  327. package/src/public/db_interfaces.ts +16 -1
  328. package/src/public/debug_fn_name.ts +39 -5
  329. package/src/public/executor_metrics.ts +11 -34
  330. package/src/public/executor_metrics_interface.ts +2 -1
  331. package/src/public/fixtures/amm_test.ts +4 -4
  332. package/src/public/fixtures/bulk_test.ts +9 -9
  333. package/src/public/fixtures/custom_bytecode_tester.ts +54 -20
  334. package/src/public/fixtures/custom_bytecode_tests.ts +111 -18
  335. package/src/public/fixtures/index.ts +7 -1
  336. package/src/public/fixtures/minimal_public_tx.ts +7 -17
  337. package/src/public/fixtures/opcode_spammer.ts +1717 -0
  338. package/src/public/fixtures/public_tx_simulation_tester.ts +116 -21
  339. package/src/public/fixtures/simple_contract_data_source.ts +8 -9
  340. package/src/public/fixtures/token_test.ts +18 -10
  341. package/src/public/fixtures/utils.ts +6 -7
  342. package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
  343. package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
  344. package/src/public/hinting_db_sources.ts +112 -10
  345. package/src/public/index.ts +6 -4
  346. package/src/public/public_db_sources.ts +107 -176
  347. package/src/public/public_processor/guarded_merkle_tree.ts +8 -3
  348. package/src/public/public_processor/public_processor.ts +124 -75
  349. package/src/public/public_processor/public_processor_metrics.ts +16 -44
  350. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
  351. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +141 -59
  352. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
  353. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
  354. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
  355. package/src/public/public_tx_simulator/factories.ts +44 -0
  356. package/src/public/public_tx_simulator/index.ts +4 -0
  357. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +10 -14
  358. package/src/public/public_tx_simulator/public_tx_context.ts +22 -9
  359. package/src/public/public_tx_simulator/public_tx_simulator.ts +177 -198
  360. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +24 -2
  361. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +3 -3
  362. package/src/public/side_effect_trace.ts +6 -3
  363. package/src/public/side_effect_trace_interface.ts +1 -1
  364. package/src/public/state_manager/nullifiers.ts +1 -1
  365. package/src/public/state_manager/public_storage.ts +1 -1
  366. package/src/public/state_manager/state_manager.ts +35 -26
  367. package/src/public/test_executor_metrics.ts +34 -8
  368. package/dest/public/tx_contract_cache.d.ts +0 -41
  369. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  370. package/dest/public/tx_contract_cache.js +0 -49
  371. package/src/public/tx_contract_cache.ts +0 -69
@@ -1,16 +1,10 @@
1
- import {
2
- CANONICAL_AUTH_REGISTRY_ADDRESS,
3
- CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,
4
- CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
5
- FEE_JUICE_ADDRESS,
6
- MULTI_CALL_ENTRYPOINT_ADDRESS,
7
- ROUTER_ADDRESS,
8
- } from '@aztec/constants';
9
- import { poseidon2Hash } from '@aztec/foundation/crypto';
10
- import { Fr } from '@aztec/foundation/fields';
1
+ import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS, MAX_PROTOCOL_CONTRACTS } from '@aztec/constants';
2
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
11
4
  import { jsonStringify } from '@aztec/foundation/json-rpc';
12
- import { type LogLevel, createLogger } from '@aztec/foundation/log';
5
+ import { type LogLevel, type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
13
6
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
7
+ import { FunctionSelector } from '@aztec/stdlib/abi';
14
8
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
15
9
  import type { ContractClassPublicWithCommitment, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
16
10
  import { SerializableContractInstance } from '@aztec/stdlib/contract';
@@ -26,7 +20,7 @@ import { strict as assert } from 'assert';
26
20
 
27
21
  import type { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
28
22
  import type { PublicContractsDBInterface } from '../db_interfaces.js';
29
- import { getPublicFunctionDebugName } from '../debug_fn_name.js';
23
+ import { getPublicFunctionDebugName, getPublicFunctionSelectorAndName } from '../debug_fn_name.js';
30
24
  import type { PublicTreesDB } from '../public_db_sources.js';
31
25
  import {
32
26
  L1ToL2MessageIndexOutOfRangeError,
@@ -48,7 +42,7 @@ import { PublicStorage } from './public_storage.js';
48
42
  * Manages merging of successful/reverted child state into current state.
49
43
  */
50
44
  export class PublicPersistableStateManager {
51
- private readonly log = createLogger('simulator:state_manager');
45
+ private readonly log: Logger;
52
46
 
53
47
  /** Make sure a forked state is never merged twice. */
54
48
  private alreadyMergedIntoParent = false;
@@ -59,10 +53,13 @@ export class PublicPersistableStateManager {
59
53
  private readonly trace: PublicSideEffectTraceInterface,
60
54
  private readonly firstNullifier: Fr, // Needed for note hashes.
61
55
  private readonly timestamp: UInt64, // Needed for contract updates.
62
- private readonly doMerkleOperations: boolean = false,
56
+ private readonly doMerkleOperations: boolean = true,
63
57
  private readonly publicStorage: PublicStorage = new PublicStorage(treesDB),
64
58
  private readonly nullifiers: NullifierManager = new NullifierManager(treesDB),
65
- ) {}
59
+ bindings?: LoggerBindings,
60
+ ) {
61
+ this.log = createLogger('simulator:state_manager', bindings);
62
+ }
66
63
 
67
64
  /**
68
65
  * Create a new state manager
@@ -71,9 +68,9 @@ export class PublicPersistableStateManager {
71
68
  treesDB: PublicTreesDB,
72
69
  contractsDB: PublicContractsDBInterface,
73
70
  trace: PublicSideEffectTraceInterface,
74
- doMerkleOperations: boolean = false,
75
71
  firstNullifier: Fr,
76
72
  timestamp: UInt64,
73
+ bindings?: LoggerBindings,
77
74
  ): PublicPersistableStateManager {
78
75
  return new PublicPersistableStateManager(
79
76
  treesDB,
@@ -81,7 +78,10 @@ export class PublicPersistableStateManager {
81
78
  trace,
82
79
  firstNullifier,
83
80
  timestamp,
84
- doMerkleOperations,
81
+ undefined,
82
+ undefined,
83
+ undefined,
84
+ bindings,
85
85
  );
86
86
  }
87
87
 
@@ -99,6 +99,7 @@ export class PublicPersistableStateManager {
99
99
  this.doMerkleOperations,
100
100
  this.publicStorage.fork(),
101
101
  this.nullifiers.fork(),
102
+ this.log.getBindings(),
102
103
  );
103
104
  }
104
105
 
@@ -171,7 +172,6 @@ export class PublicPersistableStateManager {
171
172
  if (this.doMerkleOperations) {
172
173
  return await this.treesDB.storageRead(contractAddress, slot);
173
174
  } else {
174
- // TODO(fcarreiro): I don't get this. PublicStorage CAN end up reading the tree. Why is it in the "dont do merkle operations" branch?
175
175
  const read = await this.publicStorage.read(contractAddress, slot);
176
176
  this.log.trace(
177
177
  `Storage read results (address=${contractAddress}, slot=${slot}): value=${read.value}, cached=${read.cached}`,
@@ -248,7 +248,15 @@ export class PublicPersistableStateManager {
248
248
  public async checkNullifierExists(contractAddress: AztecAddress, nullifier: Fr): Promise<boolean> {
249
249
  this.log.trace(`Checking existence of nullifier (address=${contractAddress}, nullifier=${nullifier})`);
250
250
  const siloedNullifier = await siloNullifier(contractAddress, nullifier);
251
+ return this.checkSiloedNullifierExists(siloedNullifier);
252
+ }
251
253
 
254
+ /**
255
+ * Check if a siloed nullifier exists.
256
+ * @param siloedNullifier - the siloed nullifier to check
257
+ * @returns exists - whether the nullifier exists in the nullifier set
258
+ */
259
+ public async checkSiloedNullifierExists(siloedNullifier: Fr): Promise<boolean> {
252
260
  if (this.doMerkleOperations) {
253
261
  const exists = await this.treesDB.checkNullifierExists(siloedNullifier);
254
262
  this.log.trace(`Checked siloed nullifier ${siloedNullifier} (exists=${exists})`);
@@ -437,6 +445,8 @@ export class PublicPersistableStateManager {
437
445
  await this.readStorage(ProtocolContractAddress.ContractInstanceRegistry, storageSlot);
438
446
 
439
447
  const hash = await readDeployerStorage(delayedPublicMutableHashSlot);
448
+ // NOTE: The below reads are either not performed (if hash.isZero()) or only performed in unconstrained in c++ simulation.
449
+ // See UpdateCheck::check_current_class_id documentation - this means if we generate hints from the merkle db, they are unused:
440
450
  const delayedPublicMutableValues = await DelayedPublicMutableValues.readFromTree(
441
451
  delayedPublicMutableSlot,
442
452
  readDeployerStorage,
@@ -539,6 +549,12 @@ export class PublicPersistableStateManager {
539
549
  return await getPublicFunctionDebugName(this.contractsDB, avmEnvironment.address, avmEnvironment.calldata);
540
550
  }
541
551
 
552
+ public async getPublicFunctionSelectorAndName(
553
+ avmEnvironment: AvmExecutionEnvironment,
554
+ ): Promise<{ functionSelector?: FunctionSelector; functionName?: string }> {
555
+ return await getPublicFunctionSelectorAndName(this.contractsDB, avmEnvironment.address, avmEnvironment.calldata);
556
+ }
557
+
542
558
  public async padTree(treeId: MerkleTreeId, leavesToInsert: number): Promise<void> {
543
559
  await this.treesDB.padTree(treeId, leavesToInsert);
544
560
  }
@@ -549,12 +565,5 @@ export class PublicPersistableStateManager {
549
565
  }
550
566
 
551
567
  function contractAddressIsCanonical(contractAddress: AztecAddress): boolean {
552
- return (
553
- contractAddress.equals(AztecAddress.fromNumber(CANONICAL_AUTH_REGISTRY_ADDRESS)) ||
554
- contractAddress.equals(AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS)) ||
555
- contractAddress.equals(AztecAddress.fromNumber(CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS)) ||
556
- contractAddress.equals(AztecAddress.fromNumber(MULTI_CALL_ENTRYPOINT_ADDRESS)) ||
557
- contractAddress.equals(AztecAddress.fromNumber(FEE_JUICE_ADDRESS)) ||
558
- contractAddress.equals(AztecAddress.fromNumber(ROUTER_ADDRESS))
559
- );
568
+ return contractAddress.toBigInt() >= 1 && contractAddress.toBigInt() <= MAX_PROTOCOL_CONTRACTS;
560
569
  }
@@ -1,7 +1,8 @@
1
1
  import { sum } from '@aztec/foundation/collection';
2
- import { type Logger, createLogger } from '@aztec/foundation/log';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
3
  import { Timer } from '@aztec/foundation/timer';
4
4
  import type { RevertCode } from '@aztec/stdlib/avm';
5
+ import type { GasUsed } from '@aztec/stdlib/gas';
5
6
 
6
7
  import { strict as assert } from 'assert';
7
8
 
@@ -18,8 +19,9 @@ export interface PublicEnqueuedCallMetrics {
18
19
  export interface PublicTxMetrics {
19
20
  // TS simulation
20
21
  totalDurationMs: number;
21
- manaUsed: number;
22
+ manaUsed: number | undefined;
22
23
  totalInstructionsExecuted: number;
24
+ bytecodeSizes: { contractName: string; sizeBytes: number }[];
23
25
  nonRevertiblePrivateInsertionsUs: number | undefined;
24
26
  revertiblePrivateInsertionsUs: number | undefined;
25
27
  enqueuedCalls: PublicEnqueuedCallMetrics[];
@@ -61,6 +63,7 @@ function createEmptyTxMetrics(): PublicTxMetrics {
61
63
  totalDurationMs: 0,
62
64
  manaUsed: 0,
63
65
  totalInstructionsExecuted: 0,
66
+ bytecodeSizes: [],
64
67
  nonRevertiblePrivateInsertionsUs: undefined,
65
68
  revertiblePrivateInsertionsUs: undefined,
66
69
  enqueuedCalls: [],
@@ -87,8 +90,8 @@ export class TestExecutorMetrics implements ExecutorMetricsInterface {
87
90
  private currentTxLabel: string | undefined;
88
91
  private txTimer: Timer | undefined;
89
92
 
90
- constructor() {
91
- this.logger = createLogger(`simulator:test_executor_metrics`);
93
+ constructor(bindings?: LoggerBindings) {
94
+ this.logger = createLogger(`simulator:test_executor_metrics`, bindings);
92
95
  }
93
96
 
94
97
  startRecordingTxSimulation(txLabel: string) {
@@ -99,7 +102,7 @@ export class TestExecutorMetrics implements ExecutorMetricsInterface {
99
102
  this.txTimer = new Timer();
100
103
  }
101
104
 
102
- stopRecordingTxSimulation(txLabel: string, revertedCode?: RevertCode) {
105
+ stopRecordingTxSimulation(txLabel: string, gasUsed?: GasUsed, revertedCode?: RevertCode) {
103
106
  assert(this.currentTxLabel === txLabel, 'Cannot stop recording metrics for tx when another is live');
104
107
 
105
108
  const txMetrics = this.txMetrics.get(txLabel)!;
@@ -109,7 +112,7 @@ export class TestExecutorMetrics implements ExecutorMetricsInterface {
109
112
  this.logger.debug(`Public TX simulation of ${txLabel} took ${txMetrics.totalDurationMs}ms`);
110
113
 
111
114
  // add manaUsed across all enqueued calls
112
- txMetrics.manaUsed = sum(txMetrics.enqueuedCalls.map(call => call.manaUsed));
115
+ txMetrics.manaUsed = gasUsed?.publicGas.l2Gas;
113
116
  // add totalInstructionsExecuted across all enqueued calls
114
117
  txMetrics.totalInstructionsExecuted = sum(txMetrics.enqueuedCalls.map(call => call.totalInstructionsExecuted));
115
118
  txMetrics.revertedCode = revertedCode;
@@ -171,6 +174,12 @@ export class TestExecutorMetrics implements ExecutorMetricsInterface {
171
174
  }
172
175
  }
173
176
 
177
+ recordBytecodeSize(txLabel: string, contractName: string, sizeBytes: number) {
178
+ const txMetrics = this.txMetrics.get(txLabel);
179
+ assert(txMetrics, `Cannot record bytecode size for unknown tx label: ${txLabel}`);
180
+ txMetrics.bytecodeSizes.push({ contractName, sizeBytes });
181
+ }
182
+
174
183
  recordProverMetrics(txLabel: string, metrics: Partial<PublicTxMetrics>) {
175
184
  if (!this.txMetrics.has(txLabel)) {
176
185
  this.txMetrics.set(txLabel, createEmptyTxMetrics());
@@ -202,8 +211,9 @@ export class TestExecutorMetrics implements ExecutorMetricsInterface {
202
211
  pretty += `${INDENT0}Total duration: ${fmtNum(txMetrics.totalDurationMs, 'ms')}\n`;
203
212
  }
204
213
  if (filter === PublicTxMetricsFilter.TOTALS || filter === PublicTxMetricsFilter.ALL) {
205
- pretty += `${INDENT0}Total mana used: ${fmtNum(txMetrics.manaUsed)}\n`;
206
- const manaPerSecond = Math.round((txMetrics.manaUsed * 1000) / txMetrics.totalDurationMs);
214
+ const manaUsed = txMetrics.manaUsed || 0;
215
+ pretty += `${INDENT0}Total mana used: ${fmtNum(manaUsed)}\n`;
216
+ const manaPerSecond = Math.round((manaUsed * 1000) / txMetrics.totalDurationMs);
207
217
  pretty += `${INDENT0}Mana per second: ${fmtNum(manaPerSecond)}\n`;
208
218
  }
209
219
 
@@ -214,6 +224,15 @@ export class TestExecutorMetrics implements ExecutorMetricsInterface {
214
224
  ) {
215
225
  pretty += `${INDENT0}Total instructions executed: ${fmtNum(txMetrics.totalInstructionsExecuted)}\n`;
216
226
  }
227
+ if (
228
+ (filter === PublicTxMetricsFilter.TOTALS || filter === PublicTxMetricsFilter.ALL) &&
229
+ txMetrics.bytecodeSizes.length > 0
230
+ ) {
231
+ pretty += `${INDENT0}Bytecode sizes:\n`;
232
+ for (const { contractName, sizeBytes } of txMetrics.bytecodeSizes) {
233
+ pretty += `${INDENT1}${contractName}: ${fmtNum(sizeBytes, 'bytes')}\n`;
234
+ }
235
+ }
217
236
  if (filter === PublicTxMetricsFilter.DURATIONS || filter === PublicTxMetricsFilter.ALL) {
218
237
  pretty += `${INDENT0}Private insertions:\n`;
219
238
  pretty += `${INDENT1}Non-revertible: ${fmtNum(txMetrics.nonRevertiblePrivateInsertionsUs! / 1_000, 'ms')}\n`;
@@ -385,6 +404,13 @@ export class TestExecutorMetrics implements ExecutorMetricsInterface {
385
404
  });
386
405
  }
387
406
  }
407
+ for (const { contractName, sizeBytes } of txMetrics.bytecodeSizes) {
408
+ data.push({
409
+ name: `${txLabel}/bytecodeSizeBytes/${contractName}`,
410
+ value: sizeBytes,
411
+ unit: 'bytes',
412
+ });
413
+ }
388
414
  }
389
415
  return JSON.stringify(data, null, indent);
390
416
  }
@@ -1,41 +0,0 @@
1
- import type { Fr } from '@aztec/foundation/fields';
2
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
- import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
4
- /**
5
- * A cache for contract classes and instances for a single transaction.
6
- * Useful for tracking/retrieving contracts for a tx while leaving
7
- * the option to clear them if the tx is reverted.
8
- */
9
- export declare class TxContractCache {
10
- private instanceCache;
11
- private classCache;
12
- /**
13
- * Add a contract instance to the cache
14
- */
15
- addInstance(address: AztecAddress, instance: ContractInstanceWithAddress): void;
16
- /**
17
- * Add a contract class to the cache
18
- */
19
- addClass(classId: Fr, contractClass: ContractClassPublic): void;
20
- /**
21
- * Get a contract instance from the cache
22
- */
23
- getInstance(address: AztecAddress): ContractInstanceWithAddress | undefined;
24
- /**
25
- * Get a contract class from the cache
26
- */
27
- getClass(classId: Fr): ContractClassPublic | undefined;
28
- /**
29
- * Check if the cache has a contract class
30
- */
31
- hasClass(classId: Fr): boolean;
32
- /**
33
- * Clear all entries from the cache
34
- */
35
- clear(): void;
36
- /**
37
- * Merge another cache into this one
38
- */
39
- mergeFrom(other: TxContractCache): void;
40
- }
41
- //# sourceMappingURL=tx_contract_cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx_contract_cache.d.ts","sourceRoot":"","sources":["../../src/public/tx_contract_cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE/F;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,UAAU,CAA0C;IAE5D;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,2BAA2B,GAAG,IAAI;IAItF;;OAEG;IACI,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,mBAAmB,GAAG,IAAI;IAItE;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,2BAA2B,GAAG,SAAS;IAIlF;;OAEG;IACI,QAAQ,CAAC,OAAO,EAAE,EAAE,GAAG,mBAAmB,GAAG,SAAS;IAI7D;;OAEG;IACI,QAAQ,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO;IAIrC;;OAEG;IACI,KAAK,IAAI,IAAI;IAKpB;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;CAS/C"}
@@ -1,49 +0,0 @@
1
- /**
2
- * A cache for contract classes and instances for a single transaction.
3
- * Useful for tracking/retrieving contracts for a tx while leaving
4
- * the option to clear them if the tx is reverted.
5
- */ export class TxContractCache {
6
- instanceCache = new Map();
7
- classCache = new Map();
8
- /**
9
- * Add a contract instance to the cache
10
- */ addInstance(address, instance) {
11
- this.instanceCache.set(address.toString(), instance);
12
- }
13
- /**
14
- * Add a contract class to the cache
15
- */ addClass(classId, contractClass) {
16
- this.classCache.set(classId.toString(), contractClass);
17
- }
18
- /**
19
- * Get a contract instance from the cache
20
- */ getInstance(address) {
21
- return this.instanceCache.get(address.toString());
22
- }
23
- /**
24
- * Get a contract class from the cache
25
- */ getClass(classId) {
26
- return this.classCache.get(classId.toString());
27
- }
28
- /**
29
- * Check if the cache has a contract class
30
- */ hasClass(classId) {
31
- return this.classCache.has(classId.toString());
32
- }
33
- /**
34
- * Clear all entries from the cache
35
- */ clear() {
36
- this.instanceCache.clear();
37
- this.classCache.clear();
38
- }
39
- /**
40
- * Merge another cache into this one
41
- */ mergeFrom(other) {
42
- other.instanceCache.forEach((value, key)=>{
43
- this.instanceCache.set(key, value);
44
- });
45
- other.classCache.forEach((value, key)=>{
46
- this.classCache.set(key, value);
47
- });
48
- }
49
- }
@@ -1,69 +0,0 @@
1
- import type { Fr } from '@aztec/foundation/fields';
2
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
- import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
4
-
5
- /**
6
- * A cache for contract classes and instances for a single transaction.
7
- * Useful for tracking/retrieving contracts for a tx while leaving
8
- * the option to clear them if the tx is reverted.
9
- */
10
- export class TxContractCache {
11
- private instanceCache = new Map<string, ContractInstanceWithAddress>();
12
- private classCache = new Map<string, ContractClassPublic>();
13
-
14
- /**
15
- * Add a contract instance to the cache
16
- */
17
- public addInstance(address: AztecAddress, instance: ContractInstanceWithAddress): void {
18
- this.instanceCache.set(address.toString(), instance);
19
- }
20
-
21
- /**
22
- * Add a contract class to the cache
23
- */
24
- public addClass(classId: Fr, contractClass: ContractClassPublic): void {
25
- this.classCache.set(classId.toString(), contractClass);
26
- }
27
-
28
- /**
29
- * Get a contract instance from the cache
30
- */
31
- public getInstance(address: AztecAddress): ContractInstanceWithAddress | undefined {
32
- return this.instanceCache.get(address.toString());
33
- }
34
-
35
- /**
36
- * Get a contract class from the cache
37
- */
38
- public getClass(classId: Fr): ContractClassPublic | undefined {
39
- return this.classCache.get(classId.toString());
40
- }
41
-
42
- /**
43
- * Check if the cache has a contract class
44
- */
45
- public hasClass(classId: Fr): boolean {
46
- return this.classCache.has(classId.toString());
47
- }
48
-
49
- /**
50
- * Clear all entries from the cache
51
- */
52
- public clear(): void {
53
- this.instanceCache.clear();
54
- this.classCache.clear();
55
- }
56
-
57
- /**
58
- * Merge another cache into this one
59
- */
60
- public mergeFrom(other: TxContractCache): void {
61
- other.instanceCache.forEach((value, key) => {
62
- this.instanceCache.set(key, value);
63
- });
64
-
65
- other.classCache.forEach((value, key) => {
66
- this.classCache.set(key, value);
67
- });
68
- }
69
- }