@aztec/simulator 0.76.4 → 0.77.0-testnet-ignition.21

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 (517) hide show
  1. package/README.md +3 -3
  2. package/dest/client.d.ts +5 -0
  3. package/dest/client.d.ts.map +1 -0
  4. package/dest/client.js +3 -0
  5. package/dest/{public → common}/db_interfaces.d.ts +8 -33
  6. package/dest/common/db_interfaces.d.ts.map +1 -0
  7. package/dest/common/db_interfaces.js +1 -0
  8. package/dest/common/debug_fn_name.d.ts +3 -2
  9. package/dest/common/debug_fn_name.d.ts.map +1 -1
  10. package/dest/common/debug_fn_name.js +2 -5
  11. package/dest/common/errors.d.ts +4 -4
  12. package/dest/common/errors.d.ts.map +1 -1
  13. package/dest/common/errors.js +30 -39
  14. package/dest/common/index.d.ts +2 -1
  15. package/dest/common/index.d.ts.map +1 -1
  16. package/dest/common/index.js +2 -2
  17. package/dest/common/message_load_oracle_inputs.d.ts +2 -2
  18. package/dest/common/message_load_oracle_inputs.d.ts.map +1 -1
  19. package/dest/common/message_load_oracle_inputs.js +8 -8
  20. package/dest/common/stats/index.d.ts.map +1 -0
  21. package/dest/{stats → common/stats}/stats.d.ts +2 -2
  22. package/dest/common/stats/stats.d.ts.map +1 -0
  23. package/dest/common/stats/stats.js +10 -0
  24. package/dest/{acvm → private/acvm}/acvm.d.ts +4 -4
  25. package/dest/private/acvm/acvm.d.ts.map +1 -0
  26. package/dest/private/acvm/acvm.js +70 -0
  27. package/dest/{acvm → private/acvm}/acvm_types.d.ts +1 -1
  28. package/dest/private/acvm/acvm_types.d.ts.map +1 -0
  29. package/dest/private/acvm/acvm_types.js +3 -0
  30. package/dest/{acvm → private/acvm}/deserialize.d.ts +2 -2
  31. package/dest/private/acvm/deserialize.d.ts.map +1 -0
  32. package/dest/private/acvm/deserialize.js +42 -0
  33. package/dest/private/acvm/index.d.ts.map +1 -0
  34. package/dest/private/acvm/index.js +5 -0
  35. package/dest/{acvm → private/acvm}/oracle/index.d.ts +1 -1
  36. package/dest/private/acvm/oracle/index.d.ts.map +1 -0
  37. package/dest/private/acvm/oracle/index.js +2 -0
  38. package/dest/{acvm → private/acvm}/oracle/oracle.d.ts +4 -3
  39. package/dest/private/acvm/oracle/oracle.d.ts.map +1 -0
  40. package/dest/private/acvm/oracle/oracle.js +263 -0
  41. package/dest/{acvm → private/acvm}/oracle/typed_oracle.d.ts +12 -6
  42. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -0
  43. package/dest/private/acvm/oracle/typed_oracle.js +132 -0
  44. package/dest/{acvm → private/acvm}/serialize.d.ts +7 -3
  45. package/dest/private/acvm/serialize.d.ts.map +1 -0
  46. package/dest/private/acvm/serialize.js +46 -0
  47. package/dest/{client → private}/client_execution_context.d.ts +20 -17
  48. package/dest/private/client_execution_context.d.ts.map +1 -0
  49. package/dest/private/client_execution_context.js +378 -0
  50. package/dest/{client → private}/db_oracle.d.ts +19 -7
  51. package/dest/private/db_oracle.d.ts.map +1 -0
  52. package/dest/private/db_oracle.js +14 -0
  53. package/dest/{client → private}/execution_note_cache.d.ts +2 -2
  54. package/dest/private/execution_note_cache.d.ts.map +1 -0
  55. package/dest/private/execution_note_cache.js +180 -0
  56. package/dest/{common → private}/hashed_values_cache.d.ts +2 -2
  57. package/dest/private/hashed_values_cache.d.ts.map +1 -0
  58. package/dest/private/hashed_values_cache.js +46 -0
  59. package/dest/private/index.d.ts +13 -0
  60. package/dest/private/index.d.ts.map +1 -0
  61. package/dest/private/index.js +12 -0
  62. package/dest/{client → private}/pick_notes.d.ts +1 -1
  63. package/dest/private/pick_notes.d.ts.map +1 -0
  64. package/dest/private/pick_notes.js +51 -0
  65. package/dest/private/private_execution.d.ts +24 -0
  66. package/dest/private/private_execution.d.ts.map +1 -0
  67. package/dest/private/private_execution.js +90 -0
  68. package/dest/{providers → private/providers}/acvm_native.d.ts +5 -5
  69. package/dest/private/providers/acvm_native.d.ts.map +1 -0
  70. package/dest/private/providers/acvm_native.js +139 -0
  71. package/dest/{providers → private/providers}/acvm_wasm.d.ts +4 -4
  72. package/dest/private/providers/acvm_wasm.d.ts.map +1 -0
  73. package/dest/private/providers/acvm_wasm.js +62 -0
  74. package/dest/{providers → private/providers}/acvm_wasm_with_blobs.d.ts +5 -5
  75. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +1 -0
  76. package/dest/{providers → private/providers}/acvm_wasm_with_blobs.js +3 -6
  77. package/dest/{providers → private/providers}/factory.d.ts +1 -1
  78. package/dest/private/providers/factory.d.ts.map +1 -0
  79. package/dest/private/providers/factory.js +27 -0
  80. package/dest/{common → private/providers}/simulation_provider.d.ts +5 -5
  81. package/dest/private/providers/simulation_provider.d.ts.map +1 -0
  82. package/dest/private/providers/simulation_provider.js +24 -0
  83. package/dest/private/simulator.d.ts +36 -0
  84. package/dest/private/simulator.d.ts.map +1 -0
  85. package/dest/private/simulator.js +78 -0
  86. package/dest/{client → private}/unconstrained_execution.d.ts +5 -5
  87. package/dest/private/unconstrained_execution.d.ts.map +1 -0
  88. package/dest/private/unconstrained_execution.js +27 -0
  89. package/dest/{client → private}/view_data_oracle.d.ts +15 -7
  90. package/dest/private/view_data_oracle.d.ts.map +1 -0
  91. package/dest/private/view_data_oracle.js +260 -0
  92. package/dest/{avm → public/avm}/avm_context.d.ts +7 -5
  93. package/dest/public/avm/avm_context.d.ts.map +1 -0
  94. package/dest/public/avm/avm_context.js +44 -0
  95. package/dest/{avm → public/avm}/avm_contract_call_result.d.ts +5 -5
  96. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -0
  97. package/dest/public/avm/avm_contract_call_result.js +50 -0
  98. package/dest/{avm → public/avm}/avm_execution_environment.d.ts +2 -2
  99. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -0
  100. package/dest/public/avm/avm_execution_environment.js +31 -0
  101. package/dest/public/avm/avm_gas.d.ts.map +1 -0
  102. package/dest/public/avm/avm_gas.js +202 -0
  103. package/dest/{avm → public/avm}/avm_machine_state.d.ts +2 -2
  104. package/dest/public/avm/avm_machine_state.d.ts.map +1 -0
  105. package/dest/public/avm/avm_machine_state.js +106 -0
  106. package/dest/{avm → public/avm}/avm_memory_types.d.ts +2 -2
  107. package/dest/public/avm/avm_memory_types.d.ts.map +1 -0
  108. package/dest/public/avm/avm_memory_types.js +340 -0
  109. package/dest/{avm → public/avm}/avm_simulator.d.ts +5 -3
  110. package/dest/public/avm/avm_simulator.d.ts.map +1 -0
  111. package/dest/public/avm/avm_simulator.js +202 -0
  112. package/dest/public/avm/bytecode_utils.d.ts.map +1 -0
  113. package/dest/public/avm/bytecode_utils.js +17 -0
  114. package/dest/{avm → public/avm}/errors.d.ts +5 -4
  115. package/dest/public/avm/errors.d.ts.map +1 -0
  116. package/dest/public/avm/errors.js +179 -0
  117. package/dest/{avm → public/avm}/fixtures/avm_simulation_tester.d.ts +6 -6
  118. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
  119. package/dest/public/avm/fixtures/avm_simulation_tester.js +76 -0
  120. package/dest/{avm → public/avm}/fixtures/base_avm_simulation_tester.d.ts +13 -12
  121. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
  122. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +83 -0
  123. package/dest/{avm → public/avm}/fixtures/index.d.ts +24 -7
  124. package/dest/public/avm/fixtures/index.d.ts.map +1 -0
  125. package/dest/public/avm/fixtures/index.js +175 -0
  126. package/dest/{avm → public/avm}/fixtures/simple_contract_data_source.d.ts +10 -6
  127. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
  128. package/dest/public/avm/fixtures/simple_contract_data_source.js +74 -0
  129. package/dest/public/avm/index.d.ts +4 -0
  130. package/dest/public/avm/index.d.ts.map +1 -0
  131. package/dest/{avm/index.d.ts → public/avm/index.js} +1 -2
  132. package/dest/public/avm/journal/index.d.ts.map +1 -0
  133. package/dest/{avm → public/avm}/journal/journal.d.ts +51 -18
  134. package/dest/public/avm/journal/journal.d.ts.map +1 -0
  135. package/dest/public/avm/journal/journal.js +486 -0
  136. package/dest/{avm → public/avm}/journal/nullifiers.d.ts +8 -6
  137. package/dest/public/avm/journal/nullifiers.d.ts.map +1 -0
  138. package/dest/public/avm/journal/nullifiers.js +97 -0
  139. package/dest/{avm → public/avm}/journal/public_storage.d.ts +2 -2
  140. package/dest/public/avm/journal/public_storage.d.ts.map +1 -0
  141. package/dest/public/avm/journal/public_storage.js +145 -0
  142. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -0
  143. package/dest/public/avm/opcodes/accrued_substate.js +252 -0
  144. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -0
  145. package/dest/public/avm/opcodes/addressing_mode.js +74 -0
  146. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -0
  147. package/dest/public/avm/opcodes/arithmetic.js +73 -0
  148. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -0
  149. package/dest/public/avm/opcodes/bitwise.js +106 -0
  150. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -0
  151. package/dest/public/avm/opcodes/comparators.js +43 -0
  152. package/dest/public/avm/opcodes/contract.d.ts.map +1 -0
  153. package/dest/public/avm/opcodes/contract.js +66 -0
  154. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -0
  155. package/dest/public/avm/opcodes/control_flow.js +105 -0
  156. package/dest/{avm → public/avm}/opcodes/conversion.d.ts +1 -1
  157. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -0
  158. package/dest/public/avm/opcodes/conversion.js +69 -0
  159. package/dest/{avm → public/avm}/opcodes/ec_add.d.ts +1 -1
  160. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -0
  161. package/dest/public/avm/opcodes/ec_add.js +84 -0
  162. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -0
  163. package/dest/public/avm/opcodes/environment_getters.js +79 -0
  164. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -0
  165. package/dest/public/avm/opcodes/external_calls.js +180 -0
  166. package/dest/{avm → public/avm}/opcodes/hashing.d.ts +1 -1
  167. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -0
  168. package/dest/public/avm/opcodes/hashing.js +114 -0
  169. package/dest/public/avm/opcodes/index.d.ts.map +1 -0
  170. package/dest/{avm → public/avm}/opcodes/instruction.d.ts +2 -2
  171. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -0
  172. package/dest/public/avm/opcodes/instruction.js +91 -0
  173. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -0
  174. package/dest/public/avm/opcodes/instruction_impl.js +30 -0
  175. package/dest/public/avm/opcodes/memory.d.ts.map +1 -0
  176. package/dest/public/avm/opcodes/memory.js +253 -0
  177. package/dest/{avm → public/avm}/opcodes/misc.d.ts +1 -1
  178. package/dest/public/avm/opcodes/misc.d.ts.map +1 -0
  179. package/dest/public/avm/opcodes/misc.js +48 -0
  180. package/dest/public/avm/opcodes/storage.d.ts.map +1 -0
  181. package/dest/public/avm/opcodes/storage.js +66 -0
  182. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -0
  183. package/dest/public/avm/serialization/buffer_cursor.js +99 -0
  184. package/dest/{avm → public/avm}/serialization/bytecode_serialization.d.ts +1 -1
  185. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -0
  186. package/dest/public/avm/serialization/bytecode_serialization.js +328 -0
  187. package/dest/{avm → public/avm}/serialization/instruction_serialization.d.ts +1 -2
  188. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -0
  189. package/dest/public/avm/serialization/instruction_serialization.js +225 -0
  190. package/dest/{avm → public/avm}/test_utils.d.ts +6 -4
  191. package/dest/public/avm/test_utils.d.ts.map +1 -0
  192. package/dest/public/avm/test_utils.js +52 -0
  193. package/dest/public/bytecode_errors.js +1 -2
  194. package/dest/public/execution.d.ts +8 -2
  195. package/dest/public/execution.d.ts.map +1 -1
  196. package/dest/public/execution.js +4 -5
  197. package/dest/public/executor_metrics.js +16 -12
  198. package/dest/public/fixtures/index.js +0 -1
  199. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +15 -9
  200. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  201. package/dest/public/fixtures/public_tx_simulation_tester.js +54 -53
  202. package/dest/public/fixtures/utils.d.ts +7 -11
  203. package/dest/public/fixtures/utils.d.ts.map +1 -1
  204. package/dest/public/fixtures/utils.js +92 -32
  205. package/dest/public/index.d.ts +5 -4
  206. package/dest/public/index.d.ts.map +1 -1
  207. package/dest/public/index.js +5 -5
  208. package/dest/public/public_db_sources.d.ts +82 -34
  209. package/dest/public/public_db_sources.d.ts.map +1 -1
  210. package/dest/public/public_db_sources.js +171 -196
  211. package/dest/public/{public_processor.d.ts → public_processor/public_processor.d.ts} +10 -8
  212. package/dest/public/public_processor/public_processor.d.ts.map +1 -0
  213. package/dest/public/public_processor/public_processor.js +379 -0
  214. package/dest/public/{public_processor_metrics.d.ts → public_processor/public_processor_metrics.d.ts} +3 -3
  215. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -0
  216. package/dest/public/public_processor/public_processor_metrics.js +125 -0
  217. package/dest/public/{public_tx_context.d.ts → public_tx_simulator/public_tx_context.d.ts} +14 -8
  218. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -0
  219. package/dest/public/public_tx_simulator/public_tx_context.js +320 -0
  220. package/dest/public/{public_tx_simulator.d.ts → public_tx_simulator/public_tx_simulator.d.ts} +10 -7
  221. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -0
  222. package/dest/public/public_tx_simulator/public_tx_simulator.js +325 -0
  223. package/dest/public/side_effect_errors.js +1 -2
  224. package/dest/public/side_effect_trace.d.ts +16 -10
  225. package/dest/public/side_effect_trace.d.ts.map +1 -1
  226. package/dest/public/side_effect_trace.js +82 -149
  227. package/dest/public/side_effect_trace_interface.d.ts +9 -7
  228. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  229. package/dest/public/side_effect_trace_interface.js +1 -2
  230. package/dest/public/tx_contract_cache.d.ts +41 -0
  231. package/dest/public/tx_contract_cache.d.ts.map +1 -0
  232. package/dest/public/tx_contract_cache.js +49 -0
  233. package/dest/public/unique_class_ids.js +23 -28
  234. package/dest/public/utils.d.ts +2 -2
  235. package/dest/public/utils.d.ts.map +1 -1
  236. package/dest/public/utils.js +17 -12
  237. package/dest/server.d.ts +4 -4
  238. package/dest/server.d.ts.map +1 -1
  239. package/dest/server.js +3 -5
  240. package/dest/test/utils.d.ts +3 -2
  241. package/dest/test/utils.d.ts.map +1 -1
  242. package/dest/test/utils.js +9 -7
  243. package/package.json +19 -21
  244. package/src/client.ts +4 -0
  245. package/src/{public → common}/db_interfaces.ts +8 -40
  246. package/src/common/debug_fn_name.ts +4 -2
  247. package/src/common/errors.ts +5 -5
  248. package/src/common/index.ts +2 -1
  249. package/src/common/message_load_oracle_inputs.ts +2 -2
  250. package/src/common/stats/index.ts +1 -0
  251. package/src/{stats → common/stats}/stats.ts +2 -2
  252. package/src/{acvm → private/acvm}/acvm.ts +5 -5
  253. package/src/{acvm → private/acvm}/acvm_types.ts +1 -1
  254. package/src/{acvm → private/acvm}/deserialize.ts +2 -2
  255. package/src/{acvm → private/acvm}/oracle/index.ts +1 -1
  256. package/src/{acvm → private/acvm}/oracle/oracle.ts +22 -12
  257. package/src/{acvm → private/acvm}/oracle/typed_oracle.ts +50 -55
  258. package/src/{acvm → private/acvm}/serialize.ts +10 -3
  259. package/src/{client → private}/client_execution_context.ts +54 -37
  260. package/src/{client → private}/db_oracle.ts +20 -20
  261. package/src/{client → private}/execution_note_cache.ts +3 -3
  262. package/src/{common → private}/hashed_values_cache.ts +2 -2
  263. package/src/private/index.ts +12 -0
  264. package/src/{client → private}/pick_notes.ts +1 -1
  265. package/src/{client → private}/private_execution.ts +46 -14
  266. package/src/{providers → private/providers}/acvm_native.ts +6 -6
  267. package/src/{providers → private/providers}/acvm_wasm.ts +4 -4
  268. package/src/{providers → private/providers}/acvm_wasm_with_blobs.ts +5 -5
  269. package/src/{providers → private/providers}/factory.ts +1 -1
  270. package/src/{common → private/providers}/simulation_provider.ts +5 -5
  271. package/src/{client → private}/simulator.ts +31 -123
  272. package/src/{client → private}/unconstrained_execution.ts +7 -7
  273. package/src/{client → private}/view_data_oracle.ts +25 -28
  274. package/src/{avm → public/avm}/avm_context.ts +12 -7
  275. package/src/{avm → public/avm}/avm_contract_call_result.ts +6 -6
  276. package/src/{avm → public/avm}/avm_execution_environment.ts +2 -2
  277. package/src/{avm → public/avm}/avm_gas.ts +1 -3
  278. package/src/{avm → public/avm}/avm_machine_state.ts +2 -2
  279. package/src/{avm → public/avm}/avm_memory_types.ts +4 -4
  280. package/src/{avm → public/avm}/avm_simulator.ts +12 -6
  281. package/src/{avm → public/avm}/errors.ts +5 -4
  282. package/src/{avm → public/avm}/fixtures/avm_simulation_tester.ts +16 -15
  283. package/src/{avm → public/avm}/fixtures/base_avm_simulation_tester.ts +45 -40
  284. package/src/{avm → public/avm}/fixtures/index.ts +77 -12
  285. package/src/{avm → public/avm}/fixtures/simple_contract_data_source.ts +26 -19
  286. package/src/{avm → public/avm}/index.ts +1 -1
  287. package/src/public/avm/journal/index.ts +1 -0
  288. package/src/{avm → public/avm}/journal/journal.ts +330 -305
  289. package/src/{avm → public/avm}/journal/nullifiers.ts +20 -19
  290. package/src/{avm → public/avm}/journal/public_storage.ts +2 -2
  291. package/src/{avm → public/avm}/opcodes/contract.ts +1 -1
  292. package/src/{avm → public/avm}/opcodes/control_flow.ts +1 -1
  293. package/src/{avm → public/avm}/opcodes/conversion.ts +1 -1
  294. package/src/{avm → public/avm}/opcodes/ec_add.ts +2 -2
  295. package/src/{avm → public/avm}/opcodes/external_calls.ts +5 -6
  296. package/src/{avm → public/avm}/opcodes/hashing.ts +1 -1
  297. package/src/public/avm/opcodes/index.ts +15 -0
  298. package/src/{avm → public/avm}/opcodes/instruction.ts +2 -2
  299. package/src/{avm → public/avm}/opcodes/misc.ts +1 -1
  300. package/src/public/avm/serialization/bytecode_serialization.ts +204 -0
  301. package/src/{avm → public/avm}/serialization/instruction_serialization.ts +0 -1
  302. package/src/{avm → public/avm}/test_utils.ts +10 -7
  303. package/src/public/execution.ts +9 -12
  304. package/src/public/fixtures/public_tx_simulation_tester.ts +66 -72
  305. package/src/public/fixtures/utils.ts +122 -33
  306. package/src/public/index.ts +5 -4
  307. package/src/public/public_db_sources.ts +216 -222
  308. package/src/public/{public_processor.ts → public_processor/public_processor.ts} +78 -53
  309. package/src/public/{public_processor_metrics.ts → public_processor/public_processor_metrics.ts} +3 -3
  310. package/src/public/{public_tx_context.ts → public_tx_simulator/public_tx_context.ts} +70 -75
  311. package/src/public/{public_tx_simulator.ts → public_tx_simulator/public_tx_simulator.ts} +104 -91
  312. package/src/public/side_effect_trace.ts +85 -160
  313. package/src/public/side_effect_trace_interface.ts +10 -23
  314. package/src/public/tx_contract_cache.ts +69 -0
  315. package/src/public/unique_class_ids.ts +1 -1
  316. package/src/public/utils.ts +2 -2
  317. package/src/server.ts +4 -4
  318. package/src/test/utils.ts +5 -3
  319. package/dest/acvm/acvm.d.ts.map +0 -1
  320. package/dest/acvm/acvm.js +0 -73
  321. package/dest/acvm/acvm_types.d.ts.map +0 -1
  322. package/dest/acvm/acvm_types.js +0 -2
  323. package/dest/acvm/deserialize.d.ts.map +0 -1
  324. package/dest/acvm/deserialize.js +0 -46
  325. package/dest/acvm/index.d.ts.map +0 -1
  326. package/dest/acvm/index.js +0 -6
  327. package/dest/acvm/oracle/index.d.ts.map +0 -1
  328. package/dest/acvm/oracle/index.js +0 -3
  329. package/dest/acvm/oracle/oracle.d.ts.map +0 -1
  330. package/dest/acvm/oracle/oracle.js +0 -230
  331. package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
  332. package/dest/acvm/oracle/typed_oracle.js +0 -131
  333. package/dest/acvm/serialize.d.ts.map +0 -1
  334. package/dest/acvm/serialize.js +0 -48
  335. package/dest/avm/avm_context.d.ts.map +0 -1
  336. package/dest/avm/avm_context.js +0 -44
  337. package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
  338. package/dest/avm/avm_contract_call_result.js +0 -45
  339. package/dest/avm/avm_execution_environment.d.ts.map +0 -1
  340. package/dest/avm/avm_execution_environment.js +0 -28
  341. package/dest/avm/avm_gas.d.ts.map +0 -1
  342. package/dest/avm/avm_gas.js +0 -170
  343. package/dest/avm/avm_machine_state.d.ts.map +0 -1
  344. package/dest/avm/avm_machine_state.js +0 -112
  345. package/dest/avm/avm_memory_types.d.ts.map +0 -1
  346. package/dest/avm/avm_memory_types.js +0 -327
  347. package/dest/avm/avm_simulator.d.ts.map +0 -1
  348. package/dest/avm/avm_simulator.js +0 -193
  349. package/dest/avm/avm_tree.d.ts +0 -282
  350. package/dest/avm/avm_tree.d.ts.map +0 -1
  351. package/dest/avm/avm_tree.js +0 -684
  352. package/dest/avm/bytecode_utils.d.ts.map +0 -1
  353. package/dest/avm/bytecode_utils.js +0 -15
  354. package/dest/avm/errors.d.ts.map +0 -1
  355. package/dest/avm/errors.js +0 -196
  356. package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  357. package/dest/avm/fixtures/avm_simulation_tester.js +0 -73
  358. package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  359. package/dest/avm/fixtures/base_avm_simulation_tester.js +0 -76
  360. package/dest/avm/fixtures/index.d.ts.map +0 -1
  361. package/dest/avm/fixtures/index.js +0 -134
  362. package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  363. package/dest/avm/fixtures/simple_contract_data_source.js +0 -75
  364. package/dest/avm/index.d.ts.map +0 -1
  365. package/dest/avm/index.js +0 -4
  366. package/dest/avm/journal/index.d.ts.map +0 -1
  367. package/dest/avm/journal/index.js +0 -2
  368. package/dest/avm/journal/journal.d.ts.map +0 -1
  369. package/dest/avm/journal/journal.js +0 -499
  370. package/dest/avm/journal/nullifiers.d.ts.map +0 -1
  371. package/dest/avm/journal/nullifiers.js +0 -99
  372. package/dest/avm/journal/public_storage.d.ts.map +0 -1
  373. package/dest/avm/journal/public_storage.js +0 -159
  374. package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
  375. package/dest/avm/opcodes/accrued_substate.js +0 -215
  376. package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
  377. package/dest/avm/opcodes/addressing_mode.js +0 -81
  378. package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
  379. package/dest/avm/opcodes/arithmetic.js +0 -70
  380. package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
  381. package/dest/avm/opcodes/bitwise.js +0 -90
  382. package/dest/avm/opcodes/comparators.d.ts.map +0 -1
  383. package/dest/avm/opcodes/comparators.js +0 -40
  384. package/dest/avm/opcodes/contract.d.ts.map +0 -1
  385. package/dest/avm/opcodes/contract.js +0 -63
  386. package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
  387. package/dest/avm/opcodes/control_flow.js +0 -97
  388. package/dest/avm/opcodes/conversion.d.ts.map +0 -1
  389. package/dest/avm/opcodes/conversion.js +0 -64
  390. package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
  391. package/dest/avm/opcodes/ec_add.js +0 -82
  392. package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
  393. package/dest/avm/opcodes/environment_getters.js +0 -78
  394. package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
  395. package/dest/avm/opcodes/external_calls.js +0 -169
  396. package/dest/avm/opcodes/hashing.d.ts.map +0 -1
  397. package/dest/avm/opcodes/hashing.js +0 -103
  398. package/dest/avm/opcodes/index.d.ts.map +0 -1
  399. package/dest/avm/opcodes/index.js +0 -16
  400. package/dest/avm/opcodes/instruction.d.ts.map +0 -1
  401. package/dest/avm/opcodes/instruction.js +0 -100
  402. package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
  403. package/dest/avm/opcodes/instruction_impl.js +0 -33
  404. package/dest/avm/opcodes/memory.d.ts.map +0 -1
  405. package/dest/avm/opcodes/memory.js +0 -226
  406. package/dest/avm/opcodes/misc.d.ts.map +0 -1
  407. package/dest/avm/opcodes/misc.js +0 -45
  408. package/dest/avm/opcodes/multi_scalar_mul.d.ts +0 -16
  409. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +0 -1
  410. package/dest/avm/opcodes/multi_scalar_mul.js +0 -112
  411. package/dest/avm/opcodes/storage.d.ts.map +0 -1
  412. package/dest/avm/opcodes/storage.js +0 -61
  413. package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
  414. package/dest/avm/serialization/buffer_cursor.js +0 -99
  415. package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  416. package/dest/avm/serialization/bytecode_serialization.js +0 -132
  417. package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
  418. package/dest/avm/serialization/instruction_serialization.js +0 -187
  419. package/dest/avm/test_utils.d.ts.map +0 -1
  420. package/dest/avm/test_utils.js +0 -52
  421. package/dest/client/client_execution_context.d.ts.map +0 -1
  422. package/dest/client/client_execution_context.js +0 -392
  423. package/dest/client/db_oracle.d.ts.map +0 -1
  424. package/dest/client/db_oracle.js +0 -17
  425. package/dest/client/execution_note_cache.d.ts.map +0 -1
  426. package/dest/client/execution_note_cache.js +0 -181
  427. package/dest/client/index.d.ts +0 -16
  428. package/dest/client/index.d.ts.map +0 -1
  429. package/dest/client/index.js +0 -15
  430. package/dest/client/pick_notes.d.ts.map +0 -1
  431. package/dest/client/pick_notes.js +0 -54
  432. package/dest/client/private_execution.d.ts +0 -19
  433. package/dest/client/private_execution.d.ts.map +0 -1
  434. package/dest/client/private_execution.js +0 -72
  435. package/dest/client/simulator.d.ts +0 -60
  436. package/dest/client/simulator.d.ts.map +0 -1
  437. package/dest/client/simulator.js +0 -136
  438. package/dest/client/unconstrained_execution.d.ts.map +0 -1
  439. package/dest/client/unconstrained_execution.js +0 -30
  440. package/dest/client/view_data_oracle.d.ts.map +0 -1
  441. package/dest/client/view_data_oracle.js +0 -268
  442. package/dest/common/hashed_values_cache.d.ts.map +0 -1
  443. package/dest/common/hashed_values_cache.js +0 -50
  444. package/dest/common/simulation_provider.d.ts.map +0 -1
  445. package/dest/common/simulation_provider.js +0 -27
  446. package/dest/common.d.ts +0 -2
  447. package/dest/common.d.ts.map +0 -1
  448. package/dest/common.js +0 -2
  449. package/dest/providers/acvm_native.d.ts.map +0 -1
  450. package/dest/providers/acvm_native.js +0 -125
  451. package/dest/providers/acvm_wasm.d.ts.map +0 -1
  452. package/dest/providers/acvm_wasm.js +0 -54
  453. package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  454. package/dest/providers/factory.d.ts.map +0 -1
  455. package/dest/providers/factory.js +0 -27
  456. package/dest/providers/index.d.ts +0 -5
  457. package/dest/providers/index.d.ts.map +0 -1
  458. package/dest/providers/index.js +0 -5
  459. package/dest/public/db_interfaces.d.ts.map +0 -1
  460. package/dest/public/db_interfaces.js +0 -2
  461. package/dest/public/fee_payment.d.ts +0 -11
  462. package/dest/public/fee_payment.d.ts.map +0 -1
  463. package/dest/public/fee_payment.js +0 -21
  464. package/dest/public/public_processor.d.ts.map +0 -1
  465. package/dest/public/public_processor.js +0 -352
  466. package/dest/public/public_processor_metrics.d.ts.map +0 -1
  467. package/dest/public/public_processor_metrics.js +0 -106
  468. package/dest/public/public_tx_context.d.ts.map +0 -1
  469. package/dest/public/public_tx_context.js +0 -341
  470. package/dest/public/public_tx_simulator.d.ts.map +0 -1
  471. package/dest/public/public_tx_simulator.js +0 -333
  472. package/dest/stats/index.d.ts.map +0 -1
  473. package/dest/stats/index.js +0 -2
  474. package/dest/stats/stats.d.ts.map +0 -1
  475. package/dest/stats/stats.js +0 -11
  476. package/src/avm/avm_tree.ts +0 -887
  477. package/src/avm/opcodes/multi_scalar_mul.ts +0 -121
  478. package/src/avm/serialization/bytecode_serialization.ts +0 -212
  479. package/src/client/index.ts +0 -15
  480. package/src/common.ts +0 -1
  481. package/src/providers/index.ts +0 -4
  482. package/src/public/fee_payment.ts +0 -23
  483. /package/dest/{stats → common/stats}/index.d.ts +0 -0
  484. /package/{src/stats/index.ts → dest/common/stats/index.js} +0 -0
  485. /package/dest/{acvm → private/acvm}/index.d.ts +0 -0
  486. /package/dest/{avm → public/avm}/avm_gas.d.ts +0 -0
  487. /package/dest/{avm → public/avm}/bytecode_utils.d.ts +0 -0
  488. /package/dest/{avm → public/avm}/journal/index.d.ts +0 -0
  489. /package/{src/avm/journal/index.ts → dest/public/avm/journal/index.js} +0 -0
  490. /package/dest/{avm → public/avm}/opcodes/accrued_substate.d.ts +0 -0
  491. /package/dest/{avm → public/avm}/opcodes/addressing_mode.d.ts +0 -0
  492. /package/dest/{avm → public/avm}/opcodes/arithmetic.d.ts +0 -0
  493. /package/dest/{avm → public/avm}/opcodes/bitwise.d.ts +0 -0
  494. /package/dest/{avm → public/avm}/opcodes/comparators.d.ts +0 -0
  495. /package/dest/{avm → public/avm}/opcodes/contract.d.ts +0 -0
  496. /package/dest/{avm → public/avm}/opcodes/control_flow.d.ts +0 -0
  497. /package/dest/{avm → public/avm}/opcodes/environment_getters.d.ts +0 -0
  498. /package/dest/{avm → public/avm}/opcodes/external_calls.d.ts +0 -0
  499. /package/dest/{avm → public/avm}/opcodes/index.d.ts +0 -0
  500. /package/{src/avm/opcodes/index.ts → dest/public/avm/opcodes/index.js} +0 -0
  501. /package/dest/{avm → public/avm}/opcodes/instruction_impl.d.ts +0 -0
  502. /package/dest/{avm → public/avm}/opcodes/memory.d.ts +0 -0
  503. /package/dest/{avm → public/avm}/opcodes/storage.d.ts +0 -0
  504. /package/dest/{avm → public/avm}/serialization/buffer_cursor.d.ts +0 -0
  505. /package/src/{acvm → private/acvm}/index.ts +0 -0
  506. /package/src/{avm → public/avm}/bytecode_utils.ts +0 -0
  507. /package/src/{avm → public/avm}/opcodes/.eslintrc.cjs +0 -0
  508. /package/src/{avm → public/avm}/opcodes/accrued_substate.ts +0 -0
  509. /package/src/{avm → public/avm}/opcodes/addressing_mode.ts +0 -0
  510. /package/src/{avm → public/avm}/opcodes/arithmetic.ts +0 -0
  511. /package/src/{avm → public/avm}/opcodes/bitwise.ts +0 -0
  512. /package/src/{avm → public/avm}/opcodes/comparators.ts +0 -0
  513. /package/src/{avm → public/avm}/opcodes/environment_getters.ts +0 -0
  514. /package/src/{avm → public/avm}/opcodes/instruction_impl.ts +0 -0
  515. /package/src/{avm → public/avm}/opcodes/memory.ts +0 -0
  516. /package/src/{avm → public/avm}/opcodes/storage.ts +0 -0
  517. /package/src/{avm → public/avm}/serialization/buffer_cursor.ts +0 -0
@@ -1,118 +1,233 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { Timer } from '@aztec/foundation/timer';
4
+ import { ContractClassRegisteredEvent } from '@aztec/protocol-contracts/class-registerer';
5
+ import { ContractInstanceDeployedEvent } from '@aztec/protocol-contracts/instance-deployer';
6
+ import type { FunctionSelector } from '@aztec/stdlib/abi';
7
+ import { PublicDataWrite } from '@aztec/stdlib/avm';
8
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
1
9
  import {
2
- ContractClassTxL2Logs,
3
- MerkleTreeId,
4
- type MerkleTreeReadOperations,
5
- type MerkleTreeWriteOperations,
6
- NullifierMembershipWitness,
7
- type Tx,
8
- } from '@aztec/circuit-types';
9
- import { type PublicDBAccessStats } from '@aztec/circuit-types/stats';
10
- import {
11
- type AztecAddress,
12
10
  type ContractClassPublic,
13
11
  type ContractDataSource,
14
12
  type ContractInstanceWithAddress,
15
- Fr,
16
- type FunctionSelector,
17
- type L1_TO_L2_MSG_TREE_HEIGHT,
18
- type NULLIFIER_TREE_HEIGHT,
19
- type NullifierLeafPreimage,
20
- type PublicDataTreeLeafPreimage,
21
13
  computePublicBytecodeCommitment,
22
- } from '@aztec/circuits.js';
23
- import { computeL1ToL2MessageNullifier, computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
24
- import { createLogger } from '@aztec/foundation/log';
25
- import { Timer } from '@aztec/foundation/timer';
26
- import { ContractClassRegisteredEvent } from '@aztec/protocol-contracts/class-registerer';
27
- import { ContractInstanceDeployedEvent } from '@aztec/protocol-contracts/instance-deployer';
28
-
29
- import { MessageLoadOracleInputs } from '../common/message_load_oracle_inputs.js';
30
- import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from './db_interfaces.js';
14
+ } from '@aztec/stdlib/contract';
15
+ import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
16
+ import type {
17
+ MerkleTreeCheckpointOperations,
18
+ MerkleTreeReadOperations,
19
+ MerkleTreeWriteOperations,
20
+ } from '@aztec/stdlib/interfaces/server';
21
+ import { ContractClassLog, PrivateLog } from '@aztec/stdlib/logs';
22
+ import type { PublicDBAccessStats } from '@aztec/stdlib/stats';
23
+ import { MerkleTreeId, type PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
24
+ import type { Tx } from '@aztec/stdlib/tx';
25
+
26
+ import type { PublicContractsDB, PublicStateDB } from '../common/db_interfaces.js';
27
+ import { TxContractCache } from './tx_contract_cache.js';
31
28
 
32
29
  /**
33
30
  * Implements the PublicContractsDB using a ContractDataSource.
34
31
  * Progressively records contracts in transaction as they are processed in a block.
32
+ * Separates block-level contract information (from processed/included txs) from the
33
+ * current tx's contract information (which may be cleared on tx revert/death).
35
34
  */
36
35
  export class ContractsDataSourcePublicDB implements PublicContractsDB {
37
- private instanceCache = new Map<string, ContractInstanceWithAddress>();
38
- private classCache = new Map<string, ContractClassPublic>();
36
+ // Two caching layers for contract classes and instances.
37
+ // Tx-level cache:
38
+ // - The current tx's new contract information is cached
39
+ // in currentTxNonRevertibleCache and currentTxRevertibleCache.
40
+ // Block-level cache:
41
+ // - Contract information from earlier in the block, usable by later txs.
42
+ // When a tx succeeds, that tx's caches are merged into the block cache and cleared.
43
+ private currentTxNonRevertibleCache = new TxContractCache();
44
+ private currentTxRevertibleCache = new TxContractCache();
45
+ private blockCache = new TxContractCache();
46
+ // Separate flat cache for bytecode commitments.
39
47
  private bytecodeCommitmentCache = new Map<string, Fr>();
40
48
 
41
49
  private log = createLogger('simulator:contracts-data-source');
42
50
 
43
51
  constructor(private dataSource: ContractDataSource) {}
52
+
44
53
  /**
45
54
  * Add new contracts from a transaction
46
55
  * @param tx - The transaction to add contracts from.
47
56
  */
48
57
  public async addNewContracts(tx: Tx): Promise<void> {
49
- // Extract contract class and instance data from logs and add to cache for this block
50
- const logs = tx.contractClassLogs.unrollLogs();
51
- const contractClassRegisteredEvents = logs
52
- .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data))
53
- .map(log => ContractClassRegisteredEvent.fromLog(log.data));
58
+ await this.addNonRevertibleContractClasses(tx);
59
+ await this.addRevertibleContractClasses(tx);
60
+ this.addNonRevertibleContractInstances(tx);
61
+ this.addRevertibleContractInstances(tx);
62
+ }
63
+
64
+ /**
65
+ * Add non revertible contracts from a transaction
66
+ * @param tx - The transaction to add non revertible contracts from.
67
+ */
68
+ public async addNewNonRevertibleContracts(tx: Tx) {
69
+ await this.addNonRevertibleContractClasses(tx);
70
+ this.addNonRevertibleContractInstances(tx);
71
+ }
72
+
73
+ /**
74
+ * Add revertible contracts from a transaction
75
+ * @param tx - The transaction to add revertible contracts from.
76
+ */
77
+ public async addNewRevertibleContracts(tx: Tx) {
78
+ await this.addRevertibleContractClasses(tx);
79
+ this.addRevertibleContractInstances(tx);
80
+ }
81
+
82
+ /**
83
+ * Add non-revertible contract classes from a transaction
84
+ * For private-only txs, this will be all contract classes (found in tx.data.forPublic)
85
+ * @param tx - The transaction to add non-revertible contract classes from.
86
+ */
87
+ private async addNonRevertibleContractClasses(tx: Tx) {
88
+ const siloedContractClassLogs = tx.data.forPublic
89
+ ? await tx.filterContractClassLogs(
90
+ tx.data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes,
91
+ /*siloed=*/ true,
92
+ )
93
+ : await tx.filterContractClassLogs(tx.data.forRollup!.end.contractClassLogsHashes, /*siloed=*/ true);
94
+
95
+ await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxNonRevertibleCache, 'non-revertible');
96
+ }
97
+
98
+ /**
99
+ * Add revertible contract classes from a transaction
100
+ * None for private-only txs.
101
+ * @param tx - The transaction to add revertible contract classes from.
102
+ */
103
+ private async addRevertibleContractClasses(tx: Tx) {
104
+ const siloedContractClassLogs = tx.data.forPublic
105
+ ? await tx.filterContractClassLogs(
106
+ tx.data.forPublic!.revertibleAccumulatedData.contractClassLogsHashes,
107
+ /*siloed=*/ true,
108
+ )
109
+ : [];
110
+
111
+ await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxRevertibleCache, 'revertible');
112
+ }
113
+
114
+ /**
115
+ * Add non-revertible contract instances from a transaction
116
+ * For private-only txs, this will be all contract instances (found in tx.data.forRollup)
117
+ * @param tx - The transaction to add non-revertible contract instances from.
118
+ */
119
+ private addNonRevertibleContractInstances(tx: Tx) {
120
+ const contractInstanceLogs = tx.data.forPublic
121
+ ? tx.data.forPublic!.nonRevertibleAccumulatedData.privateLogs.filter(l => !l.isEmpty())
122
+ : tx.data.forRollup!.end.privateLogs.filter(l => !l.isEmpty());
123
+
124
+ this.addContractInstancesFromLogs(contractInstanceLogs, this.currentTxNonRevertibleCache, 'non-revertible');
125
+ }
126
+
127
+ /**
128
+ * Add revertible contract instances from a transaction
129
+ * None for private-only txs.
130
+ * @param tx - The transaction to add revertible contract instances from.
131
+ */
132
+ private addRevertibleContractInstances(tx: Tx) {
133
+ const contractInstanceLogs = tx.data.forPublic
134
+ ? tx.data.forPublic!.revertibleAccumulatedData.privateLogs.filter(l => !l.isEmpty())
135
+ : [];
136
+
137
+ this.addContractInstancesFromLogs(contractInstanceLogs, this.currentTxRevertibleCache, 'revertible');
138
+ }
139
+
140
+ /**
141
+ * Given a tx's siloed contract class logs, add the contract classes to the cache
142
+ * @param siloedContractClassLogs - Contract class logs to process
143
+ * @param cache - The cache to store the contract classes in
144
+ * @param cacheType - Type of cache (for logging)
145
+ */
146
+ private async addContractClassesFromLogs(
147
+ siloedContractClassLogs: ContractClassLog[],
148
+ cache: TxContractCache,
149
+ cacheType: string,
150
+ ) {
151
+ const contractClassEvents = siloedContractClassLogs
152
+ .filter((log: ContractClassLog) => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
153
+ .map((log: ContractClassLog) => ContractClassRegisteredEvent.fromLog(log));
154
+
155
+ // Cache contract classes
54
156
  await Promise.all(
55
- contractClassRegisteredEvents.map(async event => {
56
- this.log.debug(`Adding class ${event.contractClassId.toString()} to public execution contract cache`);
57
- this.classCache.set(event.contractClassId.toString(), await event.toContractClassPublic());
157
+ contractClassEvents.map(async (event: ContractClassRegisteredEvent) => {
158
+ this.log.debug(`Adding class ${event.contractClassId.toString()} to contract's ${cacheType} tx cache`);
159
+ const contractClass = await event.toContractClassPublic();
160
+
161
+ cache.addClass(event.contractClassId, contractClass);
58
162
  }),
59
163
  );
164
+ }
60
165
 
61
- // We store the contract instance deployed event log in private logs, contract_instance_deployer_contract/src/main.nr
62
- const contractInstanceEvents = tx.data
63
- .getNonEmptyPrivateLogs()
166
+ /**
167
+ * Given a tx's contract instance logs, add the contract instances to the cache
168
+ * @param contractInstanceLogs - Contract instance logs to process
169
+ * @param cache - The cache to store the contract instances in
170
+ * @param cacheType - Type of cache (for logging)
171
+ */
172
+ private addContractInstancesFromLogs(contractInstanceLogs: PrivateLog[], cache: TxContractCache, cacheType: string) {
173
+ const contractInstanceEvents = contractInstanceLogs
64
174
  .filter(log => ContractInstanceDeployedEvent.isContractInstanceDeployedEvent(log))
65
- .map(ContractInstanceDeployedEvent.fromLog);
175
+ .map(log => ContractInstanceDeployedEvent.fromLog(log));
176
+
177
+ // Cache contract instances
66
178
  contractInstanceEvents.forEach(e => {
67
179
  this.log.debug(
68
- `Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to public execution contract cache`,
180
+ `Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to ${cacheType} tx contract cache`,
69
181
  );
70
- this.instanceCache.set(e.address.toString(), e.toContractInstance());
182
+ cache.addInstance(e.address, e.toContractInstance());
71
183
  });
72
184
  }
73
185
 
74
186
  /**
75
- * Removes new contracts added from transactions
76
- * @param tx - The tx's contracts to be removed
77
- * @param onlyRevertible - Whether to only remove contracts added from revertible contract class logs
187
+ * Clear new contracts from the current tx's cache
78
188
  */
79
- public removeNewContracts(tx: Tx, onlyRevertible: boolean = false): Promise<void> {
80
- // TODO(@spalladino): Can this inadvertently delete a valid contract added by another tx?
81
- // Let's say we have two txs adding the same contract on the same block. If the 2nd one reverts,
82
- // wouldn't that accidentally remove the contract added on the first one?
83
- const contractClassLogs = onlyRevertible
84
- ? tx.contractClassLogs
85
- .filterScoped(
86
- tx.data.forPublic!.revertibleAccumulatedData.contractClassLogsHashes,
87
- ContractClassTxL2Logs.empty(),
88
- )
89
- .unrollLogs()
90
- : tx.contractClassLogs.unrollLogs();
91
- contractClassLogs
92
- .filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data))
93
- .forEach(log => {
94
- const event = ContractClassRegisteredEvent.fromLog(log.data);
95
- this.classCache.delete(event.contractClassId.toString());
96
- });
97
-
98
- // We store the contract instance deployed event log in private logs, contract_instance_deployer_contract/src/main.nr
99
- const privateLogs = onlyRevertible
100
- ? tx.data.forPublic!.revertibleAccumulatedData.privateLogs.filter(l => !l.isEmpty())
101
- : tx.data.getNonEmptyPrivateLogs();
102
- const contractInstanceEvents = privateLogs
103
- .filter(log => ContractInstanceDeployedEvent.isContractInstanceDeployedEvent(log))
104
- .map(ContractInstanceDeployedEvent.fromLog);
105
- contractInstanceEvents.forEach(e => this.instanceCache.delete(e.address.toString()));
189
+ public clearContractsForTx() {
190
+ this.currentTxRevertibleCache.clear();
191
+ this.currentTxRevertibleCache.clear();
192
+ this.currentTxNonRevertibleCache.clear();
193
+ }
106
194
 
107
- return Promise.resolve();
195
+ /**
196
+ * Commits the current transaction's cached contracts to the block-level cache.
197
+ * Then, clears the tx cache.
198
+ */
199
+ public commitContractsForTx(onlyNonRevertibles: boolean = false) {
200
+ // Merge non-revertible tx cache into block cache
201
+ this.blockCache.mergeFrom(this.currentTxNonRevertibleCache);
202
+
203
+ if (!onlyNonRevertibles) {
204
+ // Merge revertible tx cache into block cache
205
+ this.blockCache.mergeFrom(this.currentTxRevertibleCache);
206
+ }
207
+
208
+ // Clear the tx's caches
209
+ this.currentTxNonRevertibleCache.clear();
210
+ this.currentTxRevertibleCache.clear();
108
211
  }
109
212
 
110
213
  public async getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
111
- return this.instanceCache.get(address.toString()) ?? (await this.dataSource.getContract(address));
214
+ // Check caches in order: tx revertible -> tx non-revertible -> block -> data source
215
+ return (
216
+ this.currentTxRevertibleCache.getInstance(address) ??
217
+ this.currentTxNonRevertibleCache.getInstance(address) ??
218
+ this.blockCache.getInstance(address) ??
219
+ (await this.dataSource.getContract(address))
220
+ );
112
221
  }
113
222
 
114
223
  public async getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined> {
115
- return this.classCache.get(contractClassId.toString()) ?? (await this.dataSource.getContractClass(contractClassId));
224
+ // Check caches in order: tx revertible -> tx non-revertible -> block -> data source
225
+ return (
226
+ this.currentTxRevertibleCache.getClass(contractClassId) ??
227
+ this.currentTxNonRevertibleCache.getClass(contractClassId) ??
228
+ this.blockCache.getClass(contractClassId) ??
229
+ (await this.dataSource.getContractClass(contractClassId))
230
+ );
116
231
  }
117
232
 
118
233
  public async getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined> {
@@ -140,18 +255,6 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
140
255
  return value;
141
256
  }
142
257
 
143
- async getBytecode(address: AztecAddress, selector: FunctionSelector): Promise<Buffer | undefined> {
144
- const instance = await this.getContractInstance(address);
145
- if (!instance) {
146
- throw new Error(`Contract ${address.toString()} not found`);
147
- }
148
- const contractClass = await this.getContractClass(instance.contractClassId);
149
- if (!contractClass) {
150
- throw new Error(`Contract class ${instance.contractClassId.toString()} for ${address.toString()} not found`);
151
- }
152
- return contractClass.publicFunctions.find(f => f.selector.equals(selector))?.bytecode;
153
- }
154
-
155
258
  public async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
156
259
  return await this.dataSource.getContractFunctionName(address, selector);
157
260
  }
@@ -160,17 +263,34 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
160
263
  /**
161
264
  * A public state DB that reads and writes to the world state.
162
265
  */
163
- export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicStateDB, CommitmentsDB {
266
+ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicStateDB, MerkleTreeCheckpointOperations {
164
267
  private logger = createLogger('simulator:world-state-db');
165
268
 
166
- private publicCommittedWriteCache: Map<bigint, Fr> = new Map();
167
- private publicCheckpointedWriteCache: Map<bigint, Fr> = new Map();
168
- private publicUncommittedWriteCache: Map<bigint, Fr> = new Map();
169
-
170
- constructor(private db: MerkleTreeWriteOperations, dataSource: ContractDataSource) {
269
+ constructor(public db: MerkleTreeWriteOperations, dataSource: ContractDataSource) {
171
270
  super(dataSource);
172
271
  }
173
272
 
273
+ /**
274
+ * Checkpoints the current fork state
275
+ */
276
+ public async createCheckpoint() {
277
+ await this.db.createCheckpoint();
278
+ }
279
+
280
+ /**
281
+ * Commits the current checkpoint
282
+ */
283
+ public async commitCheckpoint() {
284
+ await this.db.commitCheckpoint();
285
+ }
286
+
287
+ /**
288
+ * Reverts the current checkpoint
289
+ */
290
+ public async revertCheckpoint() {
291
+ await this.db.revertCheckpoint();
292
+ }
293
+
174
294
  public getMerkleInterface(): MerkleTreeWriteOperations {
175
295
  return this.db;
176
296
  }
@@ -182,20 +302,6 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
182
302
  * @returns The current value in the storage slot.
183
303
  */
184
304
  public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
185
- const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
186
- const uncommitted = this.publicUncommittedWriteCache.get(leafSlot);
187
- if (uncommitted !== undefined) {
188
- return uncommitted;
189
- }
190
- const checkpointed = this.publicCheckpointedWriteCache.get(leafSlot);
191
- if (checkpointed !== undefined) {
192
- return checkpointed;
193
- }
194
- const committed = this.publicCommittedWriteCache.get(leafSlot);
195
- if (committed !== undefined) {
196
- return committed;
197
- }
198
-
199
305
  return await readPublicState(this.db, contract, slot);
200
306
  }
201
307
 
@@ -206,73 +312,10 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
206
312
  * @param newValue - The new value to store.
207
313
  * @returns The slot of the written leaf in the public data tree.
208
314
  */
209
- public async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<bigint> {
210
- const index = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
211
- this.publicUncommittedWriteCache.set(index, newValue);
212
- return index;
213
- }
214
-
215
- public async getNullifierMembershipWitnessAtLatestBlock(
216
- nullifier: Fr,
217
- ): Promise<NullifierMembershipWitness | undefined> {
218
- const timer = new Timer();
219
- const index = (await this.db.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()]))[0];
220
- if (!index) {
221
- return undefined;
222
- }
223
-
224
- const leafPreimagePromise = this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, index);
225
- const siblingPathPromise = this.db.getSiblingPath<typeof NULLIFIER_TREE_HEIGHT>(
226
- MerkleTreeId.NULLIFIER_TREE,
227
- BigInt(index),
228
- );
229
-
230
- const [leafPreimage, siblingPath] = await Promise.all([leafPreimagePromise, siblingPathPromise]);
231
-
232
- if (!leafPreimage) {
233
- return undefined;
234
- }
235
-
236
- this.logger.debug(`[DB] Fetched nullifier membership`, {
237
- eventName: 'public-db-access',
238
- duration: timer.ms(),
239
- operation: 'get-nullifier-membership-witness-at-latest-block',
240
- } satisfies PublicDBAccessStats);
241
-
242
- return new NullifierMembershipWitness(BigInt(index), leafPreimage as NullifierLeafPreimage, siblingPath);
243
- }
244
-
245
- public async getL1ToL2MembershipWitness(
246
- contractAddress: AztecAddress,
247
- messageHash: Fr,
248
- secret: Fr,
249
- ): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>> {
250
- const timer = new Timer();
251
-
252
- const messageIndex = (await this.db.findLeafIndices(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [messageHash]))[0];
253
- if (messageIndex === undefined) {
254
- throw new Error(`No L1 to L2 message found for message hash ${messageHash.toString()}`);
255
- }
256
-
257
- const messageNullifier = await computeL1ToL2MessageNullifier(contractAddress, messageHash, secret);
258
- const nullifierIndex = await this.getNullifierIndex(messageNullifier);
259
-
260
- if (nullifierIndex !== undefined) {
261
- throw new Error(`No non-nullified L1 to L2 message found for message hash ${messageHash.toString()}`);
262
- }
263
-
264
- const siblingPath = await this.db.getSiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>(
265
- MerkleTreeId.L1_TO_L2_MESSAGE_TREE,
266
- messageIndex,
267
- );
268
-
269
- this.logger.debug(`[DB] Fetched L1 to L2 message membership`, {
270
- eventName: 'public-db-access',
271
- duration: timer.ms(),
272
- operation: 'get-l1-to-l2-message-membership-witness',
273
- } satisfies PublicDBAccessStats);
274
-
275
- return new MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>(messageIndex, siblingPath);
315
+ public async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<void> {
316
+ const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
317
+ const publicDataWrite = new PublicDataWrite(leafSlot, newValue);
318
+ await this.db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
276
319
  }
277
320
 
278
321
  public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr | undefined> {
@@ -286,17 +329,6 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
286
329
  return leafValue;
287
330
  }
288
331
 
289
- public async getCommitmentIndex(commitment: Fr): Promise<bigint | undefined> {
290
- const timer = new Timer();
291
- const index = (await this.db.findLeafIndices(MerkleTreeId.NOTE_HASH_TREE, [commitment]))[0];
292
- this.logger.debug(`[DB] Fetched commitment index`, {
293
- eventName: 'public-db-access',
294
- duration: timer.ms(),
295
- operation: 'get-commitment-index',
296
- } satisfies PublicDBAccessStats);
297
- return index;
298
- }
299
-
300
332
  public async getCommitmentValue(leafIndex: bigint): Promise<Fr | undefined> {
301
333
  const timer = new Timer();
302
334
  const leafValue = await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
@@ -318,44 +350,6 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
318
350
  } satisfies PublicDBAccessStats);
319
351
  return index;
320
352
  }
321
-
322
- /**
323
- * Commit the pending public changes to the DB.
324
- * @returns Nothing.
325
- */
326
- commit(): Promise<void> {
327
- for (const [k, v] of this.publicCheckpointedWriteCache) {
328
- this.publicCommittedWriteCache.set(k, v);
329
- }
330
- // uncommitted writes take precedence over checkpointed writes
331
- // since they are the most recent
332
- for (const [k, v] of this.publicUncommittedWriteCache) {
333
- this.publicCommittedWriteCache.set(k, v);
334
- }
335
- return this.rollbackToCommit();
336
- }
337
-
338
- /**
339
- * Rollback the pending public changes.
340
- * @returns Nothing.
341
- */
342
- async rollbackToCommit(): Promise<void> {
343
- await this.rollbackToCheckpoint();
344
- this.publicCheckpointedWriteCache = new Map<bigint, Fr>();
345
- return Promise.resolve();
346
- }
347
-
348
- checkpoint(): Promise<void> {
349
- for (const [k, v] of this.publicUncommittedWriteCache) {
350
- this.publicCheckpointedWriteCache.set(k, v);
351
- }
352
- return this.rollbackToCheckpoint();
353
- }
354
-
355
- rollbackToCheckpoint(): Promise<void> {
356
- this.publicUncommittedWriteCache = new Map<bigint, Fr>();
357
- return Promise.resolve();
358
- }
359
353
  }
360
354
 
361
355
  export async function readPublicState(db: MerkleTreeReadOperations, contract: AztecAddress, slot: Fr): Promise<Fr> {