@aztec/simulator 6.0.0-nightly.20260604 → 6.0.0-nightly.20260721

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 (349) hide show
  1. package/dest/client.d.ts +1 -3
  2. package/dest/client.d.ts.map +1 -1
  3. package/dest/client.js +0 -2
  4. package/dest/private/circuit_recording/circuit_recorder.d.ts +36 -23
  5. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  6. package/dest/private/circuit_recording/circuit_recorder.js +65 -69
  7. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +7 -19
  8. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  9. package/dest/private/circuit_recording/file_circuit_recorder.js +38 -42
  10. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
  11. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  12. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
  13. package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
  14. package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
  15. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +1 -1
  16. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
  17. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +1 -1
  18. package/dest/public/avm/testing/utils.d.ts +32 -0
  19. package/dest/public/avm/testing/utils.d.ts.map +1 -0
  20. package/dest/public/avm/{fixtures → testing}/utils.js +1 -34
  21. package/dest/public/avm_simulator.d.ts +28 -0
  22. package/dest/public/avm_simulator.d.ts.map +1 -0
  23. package/dest/public/avm_simulator.js +4 -0
  24. package/dest/public/avm_simulator_pool.d.ts +45 -0
  25. package/dest/public/avm_simulator_pool.d.ts.map +1 -0
  26. package/dest/public/avm_simulator_pool.js +197 -0
  27. package/dest/public/cdb/generated/api_types.d.ts +171 -0
  28. package/dest/public/cdb/generated/api_types.d.ts.map +1 -0
  29. package/dest/public/cdb/generated/api_types.js +314 -0
  30. package/dest/public/cdb/generated/server.d.ts +26 -0
  31. package/dest/public/cdb/generated/server.d.ts.map +1 -0
  32. package/dest/public/cdb/generated/server.js +135 -0
  33. package/dest/public/cdb_ipc_server.d.ts +33 -0
  34. package/dest/public/cdb_ipc_server.d.ts.map +1 -0
  35. package/dest/public/cdb_ipc_server.js +153 -0
  36. package/dest/public/fixtures/amm_test.js +2 -2
  37. package/dest/public/fixtures/bulk_test.js +2 -2
  38. package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
  39. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  40. package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
  41. package/dest/public/fixtures/index.d.ts +2 -4
  42. package/dest/public/fixtures/index.d.ts.map +1 -1
  43. package/dest/public/fixtures/index.js +1 -3
  44. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  45. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  46. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  47. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +11 -7
  48. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  49. package/dest/public/fixtures/public_tx_simulation_tester.js +33 -43
  50. package/dest/public/fixtures/simple_contract_data_source.js +1 -1
  51. package/dest/public/fixtures/token_test.js +3 -3
  52. package/dest/public/fixtures/utils.d.ts +1 -1
  53. package/dest/public/fixtures/utils.d.ts.map +1 -1
  54. package/dest/public/fixtures/utils.js +5 -3
  55. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
  56. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  57. package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
  58. package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
  59. package/dest/public/index.d.ts +5 -2
  60. package/dest/public/index.d.ts.map +1 -1
  61. package/dest/public/index.js +2 -1
  62. package/dest/public/public_db_sources.d.ts +2 -2
  63. package/dest/public/public_db_sources.d.ts.map +1 -1
  64. package/dest/public/public_db_sources.js +1 -1
  65. package/dest/public/public_processor/guarded_merkle_tree.d.ts +4 -3
  66. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  67. package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
  68. package/dest/public/public_processor/public_processor.d.ts +8 -4
  69. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  70. package/dest/public/public_processor/public_processor.js +18 -14
  71. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  72. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  73. package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
  74. package/dest/public/public_tx_simulator/factories.d.ts +8 -8
  75. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
  76. package/dest/public/public_tx_simulator/factories.js +8 -8
  77. package/dest/public/public_tx_simulator/index.d.ts +4 -6
  78. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  79. package/dest/public/public_tx_simulator/index.js +2 -4
  80. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -75
  81. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  82. package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -323
  83. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  84. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  85. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  86. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
  87. package/dest/public/test_executor_metrics.d.ts +1 -6
  88. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  89. package/dest/public/test_executor_metrics.js +0 -22
  90. package/package.json +22 -19
  91. package/src/client.ts +0 -2
  92. package/src/private/circuit_recording/circuit_recorder.ts +84 -78
  93. package/src/private/circuit_recording/file_circuit_recorder.ts +38 -48
  94. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
  95. package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +1 -1
  96. package/src/public/avm/{fixtures → testing}/utils.ts +1 -40
  97. package/src/public/avm_simulator.ts +29 -0
  98. package/src/public/avm_simulator_pool.ts +226 -0
  99. package/src/public/cdb/generated/api_types.ts +457 -0
  100. package/src/public/cdb/generated/server.ts +109 -0
  101. package/src/public/cdb_ipc_server.ts +197 -0
  102. package/src/public/fixtures/amm_test.ts +2 -2
  103. package/src/public/fixtures/bulk_test.ts +2 -2
  104. package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
  105. package/src/public/fixtures/index.ts +1 -3
  106. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  107. package/src/public/fixtures/public_tx_simulation_tester.ts +41 -55
  108. package/src/public/fixtures/simple_contract_data_source.ts +1 -1
  109. package/src/public/fixtures/token_test.ts +3 -3
  110. package/src/public/fixtures/utils.ts +6 -11
  111. package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
  112. package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
  113. package/src/public/index.ts +7 -3
  114. package/src/public/public_db_sources.ts +1 -1
  115. package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
  116. package/src/public/public_processor/public_processor.ts +24 -17
  117. package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
  118. package/src/public/public_tx_simulator/factories.ts +27 -10
  119. package/src/public/public_tx_simulator/index.ts +6 -5
  120. package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -480
  121. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  122. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
  123. package/src/public/test_executor_metrics.ts +0 -24
  124. package/dest/public/avm/avm_context.d.ts +0 -41
  125. package/dest/public/avm/avm_context.d.ts.map +0 -1
  126. package/dest/public/avm/avm_context.js +0 -44
  127. package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
  128. package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
  129. package/dest/public/avm/avm_contract_call_result.js +0 -54
  130. package/dest/public/avm/avm_execution_environment.d.ts +0 -24
  131. package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
  132. package/dest/public/avm/avm_execution_environment.js +0 -33
  133. package/dest/public/avm/avm_gas.d.ts +0 -44
  134. package/dest/public/avm/avm_gas.d.ts.map +0 -1
  135. package/dest/public/avm/avm_gas.js +0 -195
  136. package/dest/public/avm/avm_machine_state.d.ts +0 -98
  137. package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
  138. package/dest/public/avm/avm_machine_state.js +0 -110
  139. package/dest/public/avm/avm_memory_types.d.ts +0 -275
  140. package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
  141. package/dest/public/avm/avm_memory_types.js +0 -354
  142. package/dest/public/avm/avm_simulator.d.ts +0 -41
  143. package/dest/public/avm/avm_simulator.d.ts.map +0 -1
  144. package/dest/public/avm/avm_simulator.js +0 -192
  145. package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
  146. package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
  147. package/dest/public/avm/avm_simulator_interface.js +0 -3
  148. package/dest/public/avm/calldata.d.ts +0 -51
  149. package/dest/public/avm/calldata.d.ts.map +0 -1
  150. package/dest/public/avm/calldata.js +0 -64
  151. package/dest/public/avm/errors.d.ts +0 -104
  152. package/dest/public/avm/errors.d.ts.map +0 -1
  153. package/dest/public/avm/errors.js +0 -141
  154. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +0 -2
  155. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +0 -1
  156. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
  157. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  158. package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -84
  159. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  160. package/dest/public/avm/fixtures/initializers.d.ts +0 -42
  161. package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
  162. package/dest/public/avm/fixtures/initializers.js +0 -45
  163. package/dest/public/avm/fixtures/utils.d.ts +0 -39
  164. package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
  165. package/dest/public/avm/index.d.ts +0 -2
  166. package/dest/public/avm/index.d.ts.map +0 -1
  167. package/dest/public/avm/index.js +0 -1
  168. package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -74
  169. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
  170. package/dest/public/avm/opcodes/accrued_substate.js +0 -254
  171. package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
  172. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
  173. package/dest/public/avm/opcodes/addressing_mode.js +0 -94
  174. package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
  175. package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
  176. package/dest/public/avm/opcodes/arithmetic.js +0 -97
  177. package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
  178. package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
  179. package/dest/public/avm/opcodes/bitwise.js +0 -99
  180. package/dest/public/avm/opcodes/comparators.d.ts +0 -25
  181. package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
  182. package/dest/public/avm/opcodes/comparators.js +0 -43
  183. package/dest/public/avm/opcodes/contract.d.ts +0 -21
  184. package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
  185. package/dest/public/avm/opcodes/contract.js +0 -69
  186. package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
  187. package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
  188. package/dest/public/avm/opcodes/control_flow.js +0 -107
  189. package/dest/public/avm/opcodes/conversion.d.ts +0 -18
  190. package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
  191. package/dest/public/avm/opcodes/conversion.js +0 -333
  192. package/dest/public/avm/opcodes/ec_add.d.ts +0 -17
  193. package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
  194. package/dest/public/avm/opcodes/ec_add.js +0 -79
  195. package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
  196. package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
  197. package/dest/public/avm/opcodes/environment_getters.js +0 -77
  198. package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
  199. package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
  200. package/dest/public/avm/opcodes/external_calls.js +0 -210
  201. package/dest/public/avm/opcodes/hashing.d.ts +0 -36
  202. package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
  203. package/dest/public/avm/opcodes/hashing.js +0 -119
  204. package/dest/public/avm/opcodes/index.d.ts +0 -16
  205. package/dest/public/avm/opcodes/index.d.ts.map +0 -1
  206. package/dest/public/avm/opcodes/index.js +0 -15
  207. package/dest/public/avm/opcodes/instruction.d.ts +0 -74
  208. package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
  209. package/dest/public/avm/opcodes/instruction.js +0 -95
  210. package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
  211. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
  212. package/dest/public/avm/opcodes/instruction_impl.js +0 -30
  213. package/dest/public/avm/opcodes/memory.d.ts +0 -74
  214. package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
  215. package/dest/public/avm/opcodes/memory.js +0 -257
  216. package/dest/public/avm/opcodes/misc.d.ts +0 -18
  217. package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
  218. package/dest/public/avm/opcodes/misc.js +0 -73
  219. package/dest/public/avm/opcodes/storage.d.ts +0 -25
  220. package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
  221. package/dest/public/avm/opcodes/storage.js +0 -78
  222. package/dest/public/avm/revert_reason.d.ts +0 -18
  223. package/dest/public/avm/revert_reason.d.ts.map +0 -1
  224. package/dest/public/avm/revert_reason.js +0 -39
  225. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
  226. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
  227. package/dest/public/avm/serialization/buffer_cursor.js +0 -99
  228. package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
  229. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  230. package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
  231. package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
  232. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
  233. package/dest/public/avm/serialization/instruction_serialization.js +0 -261
  234. package/dest/public/avm/test_utils.d.ts +0 -15
  235. package/dest/public/avm/test_utils.d.ts.map +0 -1
  236. package/dest/public/avm/test_utils.js +0 -44
  237. package/dest/public/debug_fn_name.d.ts +0 -18
  238. package/dest/public/debug_fn_name.d.ts.map +0 -1
  239. package/dest/public/debug_fn_name.js +0 -37
  240. package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -14
  241. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
  242. package/dest/public/fixtures/custom_bytecode_tests.js +0 -234
  243. package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
  244. package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
  245. package/dest/public/fixtures/minimal_public_tx.js +0 -19
  246. package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
  247. package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
  248. package/dest/public/fixtures/opcode_spammer.js +0 -1645
  249. package/dest/public/hinting_db_sources.d.ts +0 -80
  250. package/dest/public/hinting_db_sources.d.ts.map +0 -1
  251. package/dest/public/hinting_db_sources.js +0 -356
  252. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
  253. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
  254. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -99
  255. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
  256. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
  257. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -131
  258. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
  259. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
  260. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
  261. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
  262. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
  263. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
  264. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
  265. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
  266. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
  267. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
  268. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
  269. package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -135
  270. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
  271. package/dest/public/public_tx_simulator/public_tx_context.js +0 -298
  272. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
  273. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
  274. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
  275. package/dest/public/side_effect_trace.d.ts +0 -87
  276. package/dest/public/side_effect_trace.d.ts.map +0 -1
  277. package/dest/public/side_effect_trace.js +0 -199
  278. package/dest/public/side_effect_trace_interface.d.ts +0 -22
  279. package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
  280. package/dest/public/side_effect_trace_interface.js +0 -1
  281. package/dest/public/state_manager/index.d.ts +0 -2
  282. package/dest/public/state_manager/index.d.ts.map +0 -1
  283. package/dest/public/state_manager/index.js +0 -1
  284. package/dest/public/state_manager/nullifiers.d.ts +0 -61
  285. package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
  286. package/dest/public/state_manager/nullifiers.js +0 -92
  287. package/dest/public/state_manager/public_storage.d.ts +0 -66
  288. package/dest/public/state_manager/public_storage.d.ts.map +0 -1
  289. package/dest/public/state_manager/public_storage.js +0 -145
  290. package/dest/public/state_manager/state_manager.d.ts +0 -170
  291. package/dest/public/state_manager/state_manager.d.ts.map +0 -1
  292. package/dest/public/state_manager/state_manager.js +0 -402
  293. package/src/public/avm/avm_context.ts +0 -61
  294. package/src/public/avm/avm_contract_call_result.ts +0 -69
  295. package/src/public/avm/avm_execution_environment.ts +0 -51
  296. package/src/public/avm/avm_gas.ts +0 -183
  297. package/src/public/avm/avm_machine_state.ts +0 -170
  298. package/src/public/avm/avm_memory_types.ts +0 -440
  299. package/src/public/avm/avm_simulator.ts +0 -279
  300. package/src/public/avm/avm_simulator_interface.ts +0 -8
  301. package/src/public/avm/calldata.ts +0 -101
  302. package/src/public/avm/errors.ts +0 -177
  303. package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
  304. package/src/public/avm/fixtures/initializers.ts +0 -103
  305. package/src/public/avm/index.ts +0 -1
  306. package/src/public/avm/opcodes/accrued_substate.ts +0 -285
  307. package/src/public/avm/opcodes/addressing_mode.ts +0 -111
  308. package/src/public/avm/opcodes/arithmetic.ts +0 -129
  309. package/src/public/avm/opcodes/bitwise.ts +0 -113
  310. package/src/public/avm/opcodes/comparators.ts +0 -55
  311. package/src/public/avm/opcodes/contract.ts +0 -76
  312. package/src/public/avm/opcodes/control_flow.ts +0 -123
  313. package/src/public/avm/opcodes/conversion.ts +0 -104
  314. package/src/public/avm/opcodes/ec_add.ts +0 -86
  315. package/src/public/avm/opcodes/environment_getters.ts +0 -87
  316. package/src/public/avm/opcodes/external_calls.ts +0 -262
  317. package/src/public/avm/opcodes/hashing.ts +0 -151
  318. package/src/public/avm/opcodes/index.ts +0 -15
  319. package/src/public/avm/opcodes/instruction.ts +0 -136
  320. package/src/public/avm/opcodes/instruction_impl.ts +0 -36
  321. package/src/public/avm/opcodes/memory.ts +0 -293
  322. package/src/public/avm/opcodes/misc.ts +0 -102
  323. package/src/public/avm/opcodes/storage.ts +0 -95
  324. package/src/public/avm/revert_reason.ts +0 -58
  325. package/src/public/avm/serialization/buffer_cursor.ts +0 -118
  326. package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
  327. package/src/public/avm/serialization/instruction_serialization.ts +0 -249
  328. package/src/public/avm/test_utils.ts +0 -64
  329. package/src/public/debug_fn_name.ts +0 -52
  330. package/src/public/fixtures/custom_bytecode_tests.ts +0 -366
  331. package/src/public/fixtures/minimal_public_tx.ts +0 -26
  332. package/src/public/fixtures/opcode_spammer.ts +0 -1713
  333. package/src/public/hinting_db_sources.ts +0 -610
  334. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -125
  335. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -210
  336. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
  337. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
  338. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
  339. package/src/public/public_tx_simulator/public_tx_context.ts +0 -482
  340. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
  341. package/src/public/side_effect_trace.ts +0 -293
  342. package/src/public/side_effect_trace_interface.ts +0 -28
  343. package/src/public/state_manager/index.ts +0 -1
  344. package/src/public/state_manager/nullifiers.ts +0 -103
  345. package/src/public/state_manager/public_storage.ts +0 -174
  346. package/src/public/state_manager/state_manager.ts +0 -569
  347. /package/dest/public/avm/{fixtures → testing}/account_proof_fetcher.js +0 -0
  348. /package/src/public/avm/{fixtures → testing}/account_proof.json +0 -0
  349. /package/src/public/avm/{fixtures → testing}/account_proof_fetcher.ts +0 -0
@@ -1,199 +0,0 @@
1
- import { FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX } from '@aztec/constants';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { EthAddress } from '@aztec/foundation/eth-address';
4
- import { createLogger } from '@aztec/foundation/log';
5
- import { PublicDataUpdateRequest } from '@aztec/stdlib/avm';
6
- import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
7
- import { NoteHash, Nullifier } from '@aztec/stdlib/kernel';
8
- import { DebugLog, PublicLog } from '@aztec/stdlib/logs';
9
- import { L2ToL1Message } from '@aztec/stdlib/messaging';
10
- import { strict as assert } from 'assert';
11
- import { L2ToL1MessageLimitReachedError, MaxCallsToUniqueContractClassIdsError, NoteHashLimitReachedError, NullifierLimitReachedError, SideEffectLimitReachedError } from './side_effect_errors.js';
12
- import { UniqueClassIds } from './unique_class_ids.js';
13
- export class SideEffectArrayLengths {
14
- publicDataWrites;
15
- protocolPublicDataWrites;
16
- noteHashes;
17
- nullifiers;
18
- l2ToL1Msgs;
19
- publicLogFields;
20
- constructor(publicDataWrites, protocolPublicDataWrites, noteHashes, nullifiers, l2ToL1Msgs, publicLogFields){
21
- this.publicDataWrites = publicDataWrites;
22
- this.protocolPublicDataWrites = protocolPublicDataWrites;
23
- this.noteHashes = noteHashes;
24
- this.nullifiers = nullifiers;
25
- this.l2ToL1Msgs = l2ToL1Msgs;
26
- this.publicLogFields = publicLogFields;
27
- }
28
- static empty() {
29
- return new this(0, 0, 0, 0, 0, 0);
30
- }
31
- }
32
- /**
33
- * Trace side effects for an enqueued public call's execution.
34
- */ export class SideEffectTrace {
35
- startSideEffectCounter;
36
- previousSideEffectArrayLengths;
37
- uniqueClassIds;
38
- writtenPublicDataSlots;
39
- debugLogs;
40
- debugLogMemoryReads;
41
- log;
42
- /** The side effect counter increments with every call to the trace. */ sideEffectCounter;
43
- publicDataWrites;
44
- protocolPublicDataWritesLength;
45
- userPublicDataWritesLength;
46
- noteHashes;
47
- nullifiers;
48
- l2ToL1Messages;
49
- publicLogs;
50
- /** Make sure a forked trace is never merged twice. */ alreadyMergedIntoParent;
51
- constructor(/** The counter of this trace's first side effect. */ startSideEffectCounter = 0, bindings, /** Track parent's (or previous kernel's) lengths so the AVM can properly enforce TX-wide limits,
52
- * otherwise the public kernel can fail to prove because TX limits are breached.
53
- */ previousSideEffectArrayLengths = SideEffectArrayLengths.empty(), /** We need to track the set of class IDs used, to enforce limits. */ uniqueClassIds = new UniqueClassIds(), writtenPublicDataSlots = new Set(), debugLogs = [], debugLogMemoryReads = 0){
54
- this.startSideEffectCounter = startSideEffectCounter;
55
- this.previousSideEffectArrayLengths = previousSideEffectArrayLengths;
56
- this.uniqueClassIds = uniqueClassIds;
57
- this.writtenPublicDataSlots = writtenPublicDataSlots;
58
- this.debugLogs = debugLogs;
59
- this.debugLogMemoryReads = debugLogMemoryReads;
60
- this.publicDataWrites = [];
61
- this.protocolPublicDataWritesLength = 0;
62
- this.userPublicDataWritesLength = 0;
63
- this.noteHashes = [];
64
- this.nullifiers = [];
65
- this.l2ToL1Messages = [];
66
- this.publicLogs = [];
67
- this.alreadyMergedIntoParent = false;
68
- this.sideEffectCounter = startSideEffectCounter;
69
- this.log = createLogger('simulator:side_effect_trace', bindings);
70
- }
71
- fork() {
72
- return new SideEffectTrace(this.sideEffectCounter, this.log.getBindings(), new SideEffectArrayLengths(this.previousSideEffectArrayLengths.publicDataWrites + this.userPublicDataWritesLength, this.previousSideEffectArrayLengths.protocolPublicDataWrites + this.protocolPublicDataWritesLength, this.previousSideEffectArrayLengths.noteHashes + this.noteHashes.length, this.previousSideEffectArrayLengths.nullifiers + this.nullifiers.length, this.previousSideEffectArrayLengths.l2ToL1Msgs + this.l2ToL1Messages.length, this.previousSideEffectArrayLengths.publicLogFields + this.publicLogs.reduce((acc, log)=>acc + log.sizeInFields(), 0)), this.uniqueClassIds.fork(), new Set(this.writtenPublicDataSlots), this.debugLogs.slice(), this.debugLogMemoryReads);
73
- }
74
- merge(forkedTrace, reverted = false) {
75
- // sanity check to avoid merging the same forked trace twice
76
- assert(!forkedTrace.alreadyMergedIntoParent, 'Bug! Cannot merge a forked trace that has already been merged into its parent!');
77
- forkedTrace.alreadyMergedIntoParent = true;
78
- this.sideEffectCounter = forkedTrace.sideEffectCounter;
79
- this.uniqueClassIds.acceptAndMerge(forkedTrace.uniqueClassIds);
80
- this.debugLogs = forkedTrace.debugLogs;
81
- this.debugLogMemoryReads = forkedTrace.debugLogMemoryReads;
82
- if (!reverted) {
83
- this.publicDataWrites.push(...forkedTrace.publicDataWrites);
84
- this.noteHashes.push(...forkedTrace.noteHashes);
85
- this.nullifiers.push(...forkedTrace.nullifiers);
86
- this.l2ToL1Messages.push(...forkedTrace.l2ToL1Messages);
87
- this.publicLogs.push(...forkedTrace.publicLogs);
88
- this.userPublicDataWritesLength += forkedTrace.userPublicDataWritesLength;
89
- this.protocolPublicDataWritesLength += forkedTrace.protocolPublicDataWritesLength;
90
- for (const slot of forkedTrace.writtenPublicDataSlots){
91
- this.writtenPublicDataSlots.add(slot);
92
- }
93
- }
94
- }
95
- getCounter() {
96
- return this.sideEffectCounter;
97
- }
98
- incrementSideEffectCounter() {
99
- this.sideEffectCounter++;
100
- }
101
- getNoteHashCount() {
102
- return this.previousSideEffectArrayLengths.noteHashes + this.noteHashes.length;
103
- }
104
- async tracePublicStorageWrite(contractAddress, slot, value, protocolWrite) {
105
- // Only increment counts if the storage slot has not been written to before.
106
- if (this.isStorageCold(contractAddress, slot)) {
107
- if (protocolWrite) {
108
- if (this.protocolPublicDataWritesLength + this.previousSideEffectArrayLengths.protocolPublicDataWrites >= PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
109
- throw new SideEffectLimitReachedError('protocol public data (contract storage) write', PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
110
- }
111
- this.protocolPublicDataWritesLength++;
112
- } else {
113
- if (this.userPublicDataWritesLength + this.previousSideEffectArrayLengths.publicDataWrites >= MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
114
- throw new SideEffectLimitReachedError('public data (contract storage) write', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
115
- }
116
- this.userPublicDataWritesLength++;
117
- }
118
- }
119
- const leafSlot = await computePublicDataTreeLeafSlot(contractAddress, slot);
120
- this.publicDataWrites.push(new PublicDataUpdateRequest(leafSlot, value, this.sideEffectCounter));
121
- this.log.trace(`Traced public data write (address=${contractAddress}, slot=${slot}): value=${value} (counter=${this.sideEffectCounter}, isProtocol:${protocolWrite})`);
122
- this.incrementSideEffectCounter();
123
- this.writtenPublicDataSlots.add(this.computePublicDataSlotKey(contractAddress, slot));
124
- }
125
- computePublicDataSlotKey(contractAddress, slot) {
126
- return `${contractAddress.toString()}:${slot.toString()}`;
127
- }
128
- isStorageCold(contractAddress, slot) {
129
- return !this.writtenPublicDataSlots.has(this.computePublicDataSlotKey(contractAddress, slot));
130
- }
131
- traceNewNoteHash(noteHash) {
132
- if (this.noteHashes.length + this.previousSideEffectArrayLengths.noteHashes >= MAX_NOTE_HASHES_PER_TX) {
133
- throw new NoteHashLimitReachedError();
134
- }
135
- this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
136
- this.log.trace(`Tracing new note hash (counter=${this.sideEffectCounter})`);
137
- this.incrementSideEffectCounter();
138
- }
139
- traceNewNullifier(siloedNullifier) {
140
- if (this.nullifiers.length + this.previousSideEffectArrayLengths.nullifiers >= MAX_NULLIFIERS_PER_TX) {
141
- throw new NullifierLimitReachedError();
142
- }
143
- this.nullifiers.push(new Nullifier(siloedNullifier, /*noteHash=*/ Fr.ZERO, this.sideEffectCounter));
144
- this.log.trace(`Tracing new nullifier (counter=${this.sideEffectCounter})`);
145
- this.incrementSideEffectCounter();
146
- }
147
- traceNewL2ToL1Message(contractAddress, recipient, content) {
148
- if (this.l2ToL1Messages.length + this.previousSideEffectArrayLengths.l2ToL1Msgs >= MAX_L2_TO_L1_MSGS_PER_TX) {
149
- throw new L2ToL1MessageLimitReachedError();
150
- }
151
- const recipientAddress = EthAddress.fromField(recipient);
152
- this.l2ToL1Messages.push(new L2ToL1Message(recipientAddress, content).scope(contractAddress));
153
- this.log.trace(`Tracing new l2 to l1 message (counter=${this.sideEffectCounter})`);
154
- this.incrementSideEffectCounter();
155
- }
156
- tracePublicLog(contractAddress, log) {
157
- const previouslyEmittedPublicLogFieldsCount = this.previousSideEffectArrayLengths.publicLogFields + this.publicLogs.reduce((acc, log)=>acc + log.sizeInFields(), 0);
158
- const publicLog = new PublicLog(contractAddress, log);
159
- if (previouslyEmittedPublicLogFieldsCount + publicLog.sizeInFields() > FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH) {
160
- throw new SideEffectLimitReachedError('public log fields', FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH);
161
- }
162
- this.publicLogs.push(publicLog);
163
- this.log.trace(`Tracing new public log (counter=${this.sideEffectCounter})`);
164
- this.incrementSideEffectCounter();
165
- }
166
- traceDebugLog(contractAddress, level, message, fields) {
167
- this.debugLogs.push(new DebugLog(contractAddress, level, message, fields));
168
- }
169
- getDebugLogs() {
170
- return this.debugLogs;
171
- }
172
- getDebugLogMemoryReads() {
173
- return this.debugLogMemoryReads;
174
- }
175
- traceDebugLogMemoryReads(memoryReads) {
176
- this.debugLogMemoryReads += memoryReads;
177
- }
178
- traceGetContractClass(contractClassId, exists) {
179
- // We limit the number of unique contract class IDs due to hashing and the trace length limit.
180
- if (exists && !this.uniqueClassIds.has(contractClassId.toString())) {
181
- if (this.uniqueClassIds.size() >= MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS) {
182
- this.log.debug(`Bytecode retrieval failure for contract class ID ${contractClassId} (limit reached)`);
183
- throw new MaxCallsToUniqueContractClassIdsError();
184
- }
185
- this.log.trace(`Adding contract class ID ${contractClassId} (counter=${this.sideEffectCounter})`);
186
- this.uniqueClassIds.add(contractClassId.toString());
187
- this.incrementSideEffectCounter();
188
- }
189
- }
190
- getSideEffects() {
191
- return {
192
- publicDataWrites: this.publicDataWrites,
193
- noteHashes: this.noteHashes,
194
- nullifiers: this.nullifiers,
195
- l2ToL1Msgs: this.l2ToL1Messages,
196
- publicLogs: this.publicLogs
197
- };
198
- }
199
- }
@@ -1,22 +0,0 @@
1
- import type { Fr } from '@aztec/foundation/curves/bn254';
2
- import type { LogLevel } from '@aztec/foundation/log';
3
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
- import type { DebugLog } from '@aztec/stdlib/logs';
5
- export interface PublicSideEffectTraceInterface {
6
- fork(): PublicSideEffectTraceInterface;
7
- merge(nestedTrace: PublicSideEffectTraceInterface, reverted?: boolean): void;
8
- getCounter(): number;
9
- tracePublicStorageWrite(contractAddress: AztecAddress, slot: Fr, value: Fr, protocolWrite: boolean): Promise<void>;
10
- isStorageCold(contractAddress: AztecAddress, slot: Fr): boolean;
11
- traceNewNoteHash(uniqueNoteHash: Fr): void;
12
- getNoteHashCount(): number;
13
- traceNewNullifier(siloedNullifier: Fr): void;
14
- traceNewL2ToL1Message(contractAddress: AztecAddress, recipient: Fr, content: Fr): void;
15
- tracePublicLog(contractAddress: AztecAddress, log: Fr[]): void;
16
- traceDebugLog(contractAddress: AztecAddress, level: LogLevel, message: string, fields: Fr[]): void;
17
- getDebugLogs(): DebugLog[];
18
- getDebugLogMemoryReads(): number;
19
- traceDebugLogMemoryReads(memoryReads: number): void;
20
- traceGetContractClass(contractClassId: Fr, exists: boolean): void;
21
- }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2VfaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlX2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLFdBQVcsOEJBQThCO0lBQzdDLElBQUksSUFBSSw4QkFBOEIsQ0FBQztJQUN2QyxLQUFLLENBQUMsV0FBVyxFQUFFLDhCQUE4QixFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDN0UsVUFBVSxJQUFJLE1BQU0sQ0FBQztJQUVyQix1QkFBdUIsQ0FDckIsZUFBZSxFQUFFLFlBQVksRUFDN0IsSUFBSSxFQUFFLEVBQUUsRUFDUixLQUFLLEVBQUUsRUFBRSxFQUNULGFBQWEsRUFBRSxPQUFPLEdBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixhQUFhLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNoRSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQztJQUMzQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUM7SUFDM0IsaUJBQWlCLENBQUMsZUFBZSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDN0MscUJBQXFCLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZGLGNBQWMsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDL0QsYUFBYSxDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDbkcsWUFBWSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQzNCLHNCQUFzQixJQUFJLE1BQU0sQ0FBQztJQUNqQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNwRCxxQkFBcUIsQ0FBQyxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ25FIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"side_effect_trace_interface.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace_interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,8BAA8B;IAC7C,IAAI,IAAI,8BAA8B,CAAC;IACvC,KAAK,CAAC,WAAW,EAAE,8BAA8B,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7E,UAAU,IAAI,MAAM,CAAC;IAErB,uBAAuB,CACrB,eAAe,EAAE,YAAY,EAC7B,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,EAAE,EACT,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,aAAa,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC;IAChE,gBAAgB,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC;IAC3C,gBAAgB,IAAI,MAAM,CAAC;IAC3B,iBAAiB,CAAC,eAAe,EAAE,EAAE,GAAG,IAAI,CAAC;IAC7C,qBAAqB,CAAC,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;IACvF,cAAc,CAAC,eAAe,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAC/D,aAAa,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACnG,YAAY,IAAI,QAAQ,EAAE,CAAC;IAC3B,sBAAsB,IAAI,MAAM,CAAC;IACjC,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,qBAAqB,CAAC,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACnE"}
@@ -1 +0,0 @@
1
- export { };
@@ -1,2 +0,0 @@
1
- export * from './state_manager.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvc3RhdGVfbWFuYWdlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/public/state_manager/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -1 +0,0 @@
1
- export * from './state_manager.js';
@@ -1,61 +0,0 @@
1
- import type { Fr } from '@aztec/foundation/curves/bn254';
2
- import type { PublicTreesDB } from '../public_db_sources.js';
3
- /**
4
- * A class to manage new nullifier staging and existence checks during a contract call's AVM simulation.
5
- * Maintains a siloed nullifier cache, and ensures that existence checks fall back to the correct source.
6
- * When a contract call completes, its cached nullifier set can be merged into its parent's.
7
- */
8
- export declare class NullifierManager {
9
- /** Reference to node storage. Checked on parent cache-miss. */
10
- private readonly hostNullifiers;
11
- /** Cache of siloed nullifiers. */
12
- private cache;
13
- /** Parent nullifier manager to fall back on */
14
- private readonly parent?;
15
- constructor(
16
- /** Reference to node storage. Checked on parent cache-miss. */
17
- hostNullifiers: PublicTreesDB,
18
- /** Cache of siloed nullifiers. */
19
- cache?: Set<bigint>,
20
- /** Parent nullifier manager to fall back on */
21
- parent?: NullifierManager | undefined);
22
- /**
23
- * Create a new nullifiers manager forked from this one
24
- */
25
- fork(): NullifierManager;
26
- /**
27
- * Get a nullifier's existence in this' cache or parent's (recursively).
28
- * DOES NOT CHECK HOST STORAGE!
29
- * @param siloedNullifier - the nullifier to check for
30
- * @returns exists: whether the nullifier exists in cache here or in parent's
31
- */
32
- private checkExistsHereOrParent;
33
- /**
34
- * Get a nullifier's existence status.
35
- * 1. Check cache.
36
- * 2. Check parent cache.
37
- * 3. Fall back to the host state.
38
- * 4. Not found! Nullifier does not exist.
39
- *
40
- * @param siloedNullifier - the nullifier to check for
41
- * @returns exists: whether the nullifier exists at all,
42
- * cacheHit: whether the nullifier was found in a cache,
43
- */
44
- checkExists(siloedNullifier: Fr): Promise<{
45
- exists: boolean;
46
- cacheHit: boolean;
47
- }>;
48
- /**
49
- * Stage a new nullifier (append it to the cache).
50
- *
51
- * @param siloedNullifier - the nullifier to stage
52
- */
53
- append(siloedNullifier: Fr): Promise<void>;
54
- /**
55
- * Merges another nullifier cache into this one.
56
- *
57
- * @param incomingNullifiers - the incoming cached nullifiers to merge into this instance's
58
- */
59
- acceptAndMerge(incomingNullifiers: NullifierManager): void;
60
- }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbGlmaWVycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1YmxpYy9zdGF0ZV9tYW5hZ2VyL251bGxpZmllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFekQsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHN0Q7Ozs7R0FJRztBQUNILHFCQUFhLGdCQUFnQjtJQUV6QiwrREFBK0Q7SUFDL0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjO0lBQy9CLGtDQUFrQztJQUNsQyxPQUFPLENBQUMsS0FBSztJQUNiLCtDQUErQztJQUMvQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQU4xQjtJQUNFLCtEQUErRDtJQUM5QyxjQUFjLEVBQUUsYUFBYTtJQUM5QyxrQ0FBa0M7SUFDMUIsS0FBSyxHQUFFLEdBQUcsQ0FBQyxNQUFNLENBQWE7SUFDdEMsK0NBQStDO0lBQzlCLE1BQU0sQ0FBQyw4QkFBa0IsRUFDeEM7SUFFSjs7T0FFRztJQUNJLElBQUkscUJBRVY7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyx1QkFBdUI7SUFXL0I7Ozs7Ozs7Ozs7T0FVRztJQUNVLFdBQVcsQ0FBQyxlQUFlLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFBQyxRQUFRLEVBQUUsT0FBTyxDQUFBO0tBQUUsQ0FBQyxDQWlCN0Y7SUFFRDs7OztPQUlHO0lBQ1UsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLGlCQU10QztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLFFBU3pEO0NBQ0YifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"nullifiers.d.ts","sourceRoot":"","sources":["../../../src/public/state_manager/nullifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D;;;;GAIG;AACH,qBAAa,gBAAgB;IAEzB,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,kCAAkC;IAClC,OAAO,CAAC,KAAK;IACb,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAN1B;IACE,+DAA+D;IAC9C,cAAc,EAAE,aAAa;IAC9C,kCAAkC;IAC1B,KAAK,GAAE,GAAG,CAAC,MAAM,CAAa;IACtC,+CAA+C;IAC9B,MAAM,CAAC,8BAAkB,EACxC;IAEJ;;OAEG;IACI,IAAI,qBAEV;IAED;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;;;;;;;;;OAUG;IACU,WAAW,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAiB7F;IAED;;;;OAIG;IACU,MAAM,CAAC,eAAe,EAAE,EAAE,iBAMtC;IAED;;;;OAIG;IACI,cAAc,CAAC,kBAAkB,EAAE,gBAAgB,QASzD;CACF"}
@@ -1,92 +0,0 @@
1
- import { NullifierCollisionError } from '../side_effect_errors.js';
2
- /**
3
- * A class to manage new nullifier staging and existence checks during a contract call's AVM simulation.
4
- * Maintains a siloed nullifier cache, and ensures that existence checks fall back to the correct source.
5
- * When a contract call completes, its cached nullifier set can be merged into its parent's.
6
- */ export class NullifierManager {
7
- hostNullifiers;
8
- cache;
9
- parent;
10
- constructor(/** Reference to node storage. Checked on parent cache-miss. */ hostNullifiers, /** Cache of siloed nullifiers. */ cache = new Set(), /** Parent nullifier manager to fall back on */ parent){
11
- this.hostNullifiers = hostNullifiers;
12
- this.cache = cache;
13
- this.parent = parent;
14
- }
15
- /**
16
- * Create a new nullifiers manager forked from this one
17
- */ fork() {
18
- return new NullifierManager(this.hostNullifiers, new Set(), this);
19
- }
20
- /**
21
- * Get a nullifier's existence in this' cache or parent's (recursively).
22
- * DOES NOT CHECK HOST STORAGE!
23
- * @param siloedNullifier - the nullifier to check for
24
- * @returns exists: whether the nullifier exists in cache here or in parent's
25
- */ checkExistsHereOrParent(siloedNullifier) {
26
- // First check this cache
27
- let existsAsPending = this.cache.has(siloedNullifier.toBigInt());
28
- // Then try parent's nullifier cache
29
- if (!existsAsPending && this.parent) {
30
- // Note: this will recurse to grandparent/etc until a cache-hit is encountered.
31
- existsAsPending = this.parent.checkExistsHereOrParent(siloedNullifier);
32
- }
33
- return existsAsPending;
34
- }
35
- /**
36
- * Get a nullifier's existence status.
37
- * 1. Check cache.
38
- * 2. Check parent cache.
39
- * 3. Fall back to the host state.
40
- * 4. Not found! Nullifier does not exist.
41
- *
42
- * @param siloedNullifier - the nullifier to check for
43
- * @returns exists: whether the nullifier exists at all,
44
- * cacheHit: whether the nullifier was found in a cache,
45
- */ async checkExists(siloedNullifier) {
46
- // Check this cache and parent's (recursively)
47
- const cacheHit = this.checkExistsHereOrParent(siloedNullifier);
48
- let existsInTree = false;
49
- if (!cacheHit) {
50
- // Finally try the host's Aztec state (a trip to the database)
51
- //const leafOrLowLeafIndex = await this.hostNullifiers.db.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, siloedNullifier.toBigInt());
52
- //assert(
53
- // leafOrLowLeafIndex !== undefined,
54
- // `${MerkleTreeId[MerkleTreeId.NULLIFIER_TREE]} low leaf index should always be found (even if target leaf does not exist)`,
55
- //);
56
- //existsInTree = leafOrLowLeafIndex.alreadyPresent;
57
- const exists = await this.hostNullifiers.checkNullifierExists(siloedNullifier);
58
- existsInTree = exists;
59
- }
60
- const exists = cacheHit || existsInTree;
61
- return Promise.resolve({
62
- exists,
63
- cacheHit
64
- });
65
- }
66
- /**
67
- * Stage a new nullifier (append it to the cache).
68
- *
69
- * @param siloedNullifier - the nullifier to stage
70
- */ async append(siloedNullifier) {
71
- const { exists } = await this.checkExists(siloedNullifier);
72
- if (exists) {
73
- throw new NullifierCollisionError(`Siloed nullifier ${siloedNullifier} already exists in parent cache or host.`);
74
- }
75
- this.cache.add(siloedNullifier.toBigInt());
76
- }
77
- /**
78
- * Merges another nullifier cache into this one.
79
- *
80
- * @param incomingNullifiers - the incoming cached nullifiers to merge into this instance's
81
- */ acceptAndMerge(incomingNullifiers) {
82
- for (const incomingNullifier of incomingNullifiers.cache){
83
- if (this.cache.has(incomingNullifier)) {
84
- throw new NullifierCollisionError(`Failed to merge in fork's cached nullifiers. Siloed nullifier ${incomingNullifier} already exists in parent cache.`);
85
- }
86
- }
87
- this.cache = new Set([
88
- ...this.cache,
89
- ...incomingNullifiers.cache
90
- ]);
91
- }
92
- }
@@ -1,66 +0,0 @@
1
- import { Fr } from '@aztec/foundation/curves/bn254';
2
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
- import type { PublicStateDBInterface } from '../db_interfaces.js';
4
- type PublicStorageReadResult = {
5
- value: Fr;
6
- cached: boolean;
7
- };
8
- /**
9
- * A class to manage public storage reads and writes during a contract call's AVM simulation.
10
- * Maintains a storage write cache, and ensures that reads fall back to the correct source.
11
- * When a contract call completes, its storage cache can be merged into its parent's.
12
- */
13
- export declare class PublicStorage {
14
- /** Reference to node storage. Checked on parent cache-miss. */
15
- private readonly hostPublicStorage;
16
- /** Parent's storage. Checked on this' cache-miss. */
17
- private readonly parent?;
18
- /** Cached storage writes. */
19
- private readonly cache;
20
- constructor(
21
- /** Reference to node storage. Checked on parent cache-miss. */
22
- hostPublicStorage: PublicStateDBInterface,
23
- /** Parent's storage. Checked on this' cache-miss. */
24
- parent?: PublicStorage | undefined);
25
- /**
26
- * Create a new public storage manager forked from this one
27
- */
28
- fork(): PublicStorage;
29
- /**
30
- * Read a storage value from this' cache or parent's (recursively).
31
- * DOES NOT CHECK HOST STORAGE!
32
- *
33
- * @param contractAddress - the address of the contract whose storage is being read from
34
- * @param slot - the slot in the contract's storage being read from
35
- * @returns value: the latest value written according to this cache or the parent's. undefined on cache miss.
36
- */
37
- readHereOrParent(contractAddress: AztecAddress, slot: Fr): Fr | undefined;
38
- /**
39
- * Read a value from storage.
40
- * 1. Check cache.
41
- * 2. Check parent cache.
42
- * 3. Fall back to the host state.
43
- * 4. Not found! Value has never been written to before. Flag it as non-existent and return value zero.
44
- *
45
- * @param contractAddress - the address of the contract whose storage is being read from
46
- * @param slot - the slot in the contract's storage being read from
47
- * @returns exists: whether the slot has EVER been written to before, value: the latest value written to slot, or 0 if never written to before
48
- */
49
- read(contractAddress: AztecAddress, slot: Fr): Promise<PublicStorageReadResult>;
50
- /**
51
- * Stage a storage write.
52
- *
53
- * @param contractAddress - the address of the contract whose storage is being written to
54
- * @param slot - the slot in the contract's storage being written to
55
- * @param value - the value being written to the slot
56
- */
57
- write(contractAddress: AztecAddress, slot: Fr, value: Fr): void;
58
- /**
59
- * Merges another PublicStorage's cache (pending writes) into this one.
60
- *
61
- * @param incomingPublicStorage - the incoming public storage to merge into this instance's
62
- */
63
- acceptAndMerge(incomingPublicStorage: PublicStorage): void;
64
- }
65
- export {};
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3N0b3JhZ2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvc3RhdGVfbWFuYWdlci9wdWJsaWNfc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRSxLQUFLLHVCQUF1QixHQUFHO0lBQzdCLEtBQUssRUFBRSxFQUFFLENBQUM7SUFDVixNQUFNLEVBQUUsT0FBTyxDQUFDO0NBQ2pCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gscUJBQWEsYUFBYTtJQUt0QiwrREFBK0Q7SUFDL0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7SUFDbEMscURBQXFEO0lBQ3JELE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBUDFCLDZCQUE2QjtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBcUI7SUFFM0M7SUFDRSwrREFBK0Q7SUFDOUMsaUJBQWlCLEVBQUUsc0JBQXNCO0lBQzFELHFEQUFxRDtJQUNwQyxNQUFNLENBQUMsMkJBQWUsRUFHeEM7SUFFRDs7T0FFRztJQUNJLElBQUksa0JBRVY7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksZ0JBQWdCLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxTQUFTLENBUy9FO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNVLElBQUksQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBaUIzRjtJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFFOUQ7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLHFCQUFxQixFQUFFLGFBQWEsUUFFekQ7Q0FDRiJ9
@@ -1 +0,0 @@
1
- {"version":3,"file":"public_storage.d.ts","sourceRoot":"","sources":["../../../src/public/state_manager/public_storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,KAAK,uBAAuB,GAAG;IAC7B,KAAK,EAAE,EAAE,CAAC;IACV,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,aAAa;IAKtB,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAP1B,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C;IACE,+DAA+D;IAC9C,iBAAiB,EAAE,sBAAsB;IAC1D,qDAAqD;IACpC,MAAM,CAAC,2BAAe,EAGxC;IAED;;OAEG;IACI,IAAI,kBAEV;IAED;;;;;;;OAOG;IACI,gBAAgB,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,SAAS,CAS/E;IAED;;;;;;;;;;OAUG;IACU,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAiB3F;IAED;;;;;;OAMG;IACI,KAAK,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,QAE9D;IAED;;;;OAIG;IACI,cAAc,CAAC,qBAAqB,EAAE,aAAa,QAEzD;CACF"}
@@ -1,145 +0,0 @@
1
- import { Fr } from '@aztec/foundation/curves/bn254';
2
- /**
3
- * A class to manage public storage reads and writes during a contract call's AVM simulation.
4
- * Maintains a storage write cache, and ensures that reads fall back to the correct source.
5
- * When a contract call completes, its storage cache can be merged into its parent's.
6
- */ export class PublicStorage {
7
- hostPublicStorage;
8
- parent;
9
- /** Cached storage writes. */ cache;
10
- constructor(/** Reference to node storage. Checked on parent cache-miss. */ hostPublicStorage, /** Parent's storage. Checked on this' cache-miss. */ parent){
11
- this.hostPublicStorage = hostPublicStorage;
12
- this.parent = parent;
13
- this.cache = new PublicStorageCache();
14
- }
15
- /**
16
- * Create a new public storage manager forked from this one
17
- */ fork() {
18
- return new PublicStorage(this.hostPublicStorage, this);
19
- }
20
- /**
21
- * Read a storage value from this' cache or parent's (recursively).
22
- * DOES NOT CHECK HOST STORAGE!
23
- *
24
- * @param contractAddress - the address of the contract whose storage is being read from
25
- * @param slot - the slot in the contract's storage being read from
26
- * @returns value: the latest value written according to this cache or the parent's. undefined on cache miss.
27
- */ readHereOrParent(contractAddress, slot) {
28
- // First try check this storage cache
29
- let value = this.cache.read(contractAddress, slot);
30
- // Then try parent's storage cache
31
- if (!value && this.parent) {
32
- // Note: this will recurse to grandparent/etc until a cache-hit is encountered.
33
- value = this.parent.readHereOrParent(contractAddress, slot);
34
- }
35
- return value;
36
- }
37
- /**
38
- * Read a value from storage.
39
- * 1. Check cache.
40
- * 2. Check parent cache.
41
- * 3. Fall back to the host state.
42
- * 4. Not found! Value has never been written to before. Flag it as non-existent and return value zero.
43
- *
44
- * @param contractAddress - the address of the contract whose storage is being read from
45
- * @param slot - the slot in the contract's storage being read from
46
- * @returns exists: whether the slot has EVER been written to before, value: the latest value written to slot, or 0 if never written to before
47
- */ async read(contractAddress, slot) {
48
- let cached = false;
49
- // Check this cache and parent's (recursively)
50
- let value = this.readHereOrParent(contractAddress, slot);
51
- // Finally try the host's Aztec state (a trip to the database)
52
- if (!value) {
53
- // This functions returns Fr.ZERO if it has never been written to before
54
- // we explicity coalesce to Fr.ZERO in case we have some implementations that cause this to return undefined
55
- value = await this.hostPublicStorage.storageRead(contractAddress, slot) ?? Fr.ZERO;
56
- // TODO(dbanks12): if value retrieved from host storage, we can cache it here
57
- // any future reads to the same slot can read from cache instead of more expensive
58
- // DB access
59
- } else {
60
- cached = true;
61
- }
62
- // if value is Fr.ZERO here, it that means this slot has never been written to!
63
- return Promise.resolve({
64
- value,
65
- cached
66
- });
67
- }
68
- /**
69
- * Stage a storage write.
70
- *
71
- * @param contractAddress - the address of the contract whose storage is being written to
72
- * @param slot - the slot in the contract's storage being written to
73
- * @param value - the value being written to the slot
74
- */ write(contractAddress, slot, value) {
75
- this.cache.write(contractAddress, slot, value);
76
- }
77
- /**
78
- * Merges another PublicStorage's cache (pending writes) into this one.
79
- *
80
- * @param incomingPublicStorage - the incoming public storage to merge into this instance's
81
- */ acceptAndMerge(incomingPublicStorage) {
82
- this.cache.acceptAndMerge(incomingPublicStorage.cache);
83
- }
84
- }
85
- /**
86
- * A class to cache writes to public storage during a contract call's AVM simulation.
87
- * "Writes" update a map, "reads" check that map or return undefined.
88
- * An instance of this class can merge another instance's staged writes into its own.
89
- */ class PublicStorageCache {
90
- /**
91
- * Map for staging storage writes.
92
- * One inner-map per contract storage address,
93
- * mapping storage slot to latest staged write value.
94
- */ cachePerContract = new Map();
95
- /**
96
- * Read a staged value from storage, if it has been previously written to.
97
- *
98
- * @param contractAddress - the address of the contract whose storage is being read from
99
- * @param slot - the slot in the contract's storage being read from
100
- * @returns the latest value written to slot, or undefined if no value has been written
101
- */ read(contractAddress, slot) {
102
- return this.cachePerContract.get(contractAddress.toBigInt())?.get(slot.toBigInt());
103
- }
104
- /**
105
- * Stage a storage write.
106
- *
107
- * @param contractAddress - the address of the contract whose storage is being written to
108
- * @param slot - the slot in the contract's storage being written to
109
- * @param value - the value being written to the slot
110
- */ write(contractAddress, slot, value) {
111
- let cacheAtContract = this.cachePerContract.get(contractAddress.toBigInt());
112
- if (!cacheAtContract) {
113
- // If this contract's storage has no staged modifications, create a new inner map to store them
114
- cacheAtContract = new Map();
115
- this.cachePerContract.set(contractAddress.toBigInt(), cacheAtContract);
116
- }
117
- cacheAtContract.set(slot.toBigInt(), value);
118
- }
119
- /**
120
- * Merges another cache's staged writes into this instance's cache.
121
- *
122
- * Staged modifications in "incoming" take precedence over those
123
- * present in "this" as they are assumed to occur after this' writes.
124
- *
125
- * In practice, "this" is a parent call's storage cache, and "incoming" is a nested call's.
126
- *
127
- * @param incomingStorageCache - the incoming storage write cache to merge into this instance's
128
- */ acceptAndMerge(incomingStorageCache) {
129
- // Iterate over all incoming contracts with staged writes.
130
- for (const [incomingAddress, incomingCacheAtContract] of incomingStorageCache.cachePerContract){
131
- const thisCacheAtContract = this.cachePerContract.get(incomingAddress);
132
- if (!thisCacheAtContract) {
133
- // The contract has no storage writes staged here
134
- // so just accept the incoming cache as-is for this contract.
135
- this.cachePerContract.set(incomingAddress, incomingCacheAtContract);
136
- } else {
137
- // "Incoming" and "this" both have staged writes for this contract.
138
- // Merge in incoming staged writes, giving them precedence over this'.
139
- for (const [slot, value] of incomingCacheAtContract){
140
- thisCacheAtContract.set(slot, value);
141
- }
142
- }
143
- }
144
- }
145
- }