@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,29 +1,31 @@
1
- import {
2
- type AvmProvingRequest,
3
- type GasUsed,
4
- type MerkleTreeReadOperations,
5
- NestedProcessReturnValues,
6
- type PublicExecutionRequest,
7
- type SimulationError,
8
- type Tx,
9
- TxExecutionPhase,
10
- } from '@aztec/circuit-types';
11
- import { type AvmSimulationStats } from '@aztec/circuit-types/stats';
12
- import { type Fr, type Gas, type GlobalVariables, type PublicCallRequest, type RevertCode } from '@aztec/circuits.js';
1
+ import type { Fr } from '@aztec/foundation/fields';
13
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
14
3
  import { Timer } from '@aztec/foundation/timer';
15
4
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
5
+ import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
6
+ import type { AvmProvingRequest, RevertCode } from '@aztec/stdlib/avm';
7
+ import type { SimulationError } from '@aztec/stdlib/errors';
8
+ import type { Gas, GasUsed } from '@aztec/stdlib/gas';
9
+ import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
10
+ import type { PublicCallRequest } from '@aztec/stdlib/kernel';
11
+ import type { AvmSimulationStats } from '@aztec/stdlib/stats';
12
+ import {
13
+ type GlobalVariables,
14
+ NestedProcessReturnValues,
15
+ PublicExecutionRequest,
16
+ Tx,
17
+ TxExecutionPhase,
18
+ } from '@aztec/stdlib/tx';
16
19
  import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
17
20
 
18
21
  import { strict as assert } from 'assert';
19
22
 
20
- import { type AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
23
+ import { getPublicFunctionDebugName } from '../../common/debug_fn_name.js';
24
+ import type { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
21
25
  import { type AvmPersistableStateManager, AvmSimulator } from '../avm/index.js';
22
26
  import { NullifierCollisionError } from '../avm/journal/nullifiers.js';
23
- import { getPublicFunctionDebugName } from '../common/debug_fn_name.js';
24
- import { ExecutorMetrics } from './executor_metrics.js';
25
- import { computeFeePayerBalanceStorageSlot } from './fee_payment.js';
26
- import { type WorldStateDB } from './public_db_sources.js';
27
+ import { ExecutorMetrics } from '../executor_metrics.js';
28
+ import type { WorldStateDB } from '../public_db_sources.js';
27
29
  import { PublicTxContext } from './public_tx_context.js';
28
30
 
29
31
  export type ProcessedPhase = {
@@ -54,7 +56,7 @@ export class PublicTxSimulator {
54
56
  private worldStateDB: WorldStateDB,
55
57
  private globalVariables: GlobalVariables,
56
58
  private doMerkleOperations: boolean = false,
57
- private enforceFeePayment: boolean = true,
59
+ private skipFeeEnforcement: boolean = false,
58
60
  telemetryClient: TelemetryClient = getTelemetryClient(),
59
61
  ) {
60
62
  this.log = createLogger(`simulator:public_tx_simulator`);
@@ -70,79 +72,89 @@ export class PublicTxSimulator {
70
72
  * @returns The result of the transaction's public execution.
71
73
  */
72
74
  public async simulate(tx: Tx): Promise<PublicTxResult> {
73
- const txHash = await tx.getTxHash();
74
- this.log.debug(`Simulating ${tx.enqueuedPublicFunctionCalls.length} public calls for tx ${txHash}`, { txHash });
75
-
76
- const context = await PublicTxContext.create(
77
- this.db,
78
- this.worldStateDB,
79
- tx,
80
- this.globalVariables,
81
- this.doMerkleOperations,
82
- );
75
+ try {
76
+ const startTime = process.hrtime.bigint();
77
+
78
+ const txHash = await tx.getTxHash();
79
+ this.log.debug(`Simulating ${tx.enqueuedPublicFunctionCalls.length} public calls for tx ${txHash}`, { txHash });
80
+
81
+ const context = await PublicTxContext.create(
82
+ this.db,
83
+ this.worldStateDB,
84
+ tx,
85
+ this.globalVariables,
86
+ this.doMerkleOperations,
87
+ );
88
+
89
+ const nonRevertStart = process.hrtime.bigint();
90
+ await this.insertNonRevertiblesFromPrivate(context);
91
+ // add new contracts to the contracts db so that their functions may be found and called
92
+ // TODO(#6464): Should we allow emitting contracts in the private setup phase?
93
+ await this.worldStateDB.addNewNonRevertibleContracts(tx);
94
+ const nonRevertEnd = process.hrtime.bigint();
95
+ this.metrics.recordPrivateEffectsInsertion(Number(nonRevertEnd - nonRevertStart) / 1_000, 'non-revertible');
96
+
97
+ const processedPhases: ProcessedPhase[] = [];
98
+ if (context.hasPhase(TxExecutionPhase.SETUP)) {
99
+ const setupResult: ProcessedPhase = await this.simulateSetupPhase(context);
100
+ processedPhases.push(setupResult);
101
+ }
83
102
 
84
- // add new contracts to the contracts db so that their functions may be found and called
85
- // TODO(#4073): This is catching only private deployments, when we add public ones, we'll
86
- // have to capture contracts emitted in that phase as well.
87
- // TODO(@spalladino): Should we allow emitting contracts in the fee preparation phase?
88
- // TODO(#6464): Should we allow emitting contracts in the private setup phase?
89
- // if so, this should only add contracts that were deployed during private app logic.
90
- // FIXME: we shouldn't need to directly modify worldStateDb here!
91
- await this.worldStateDB.addNewContracts(tx);
92
-
93
- const nonRevertStart = process.hrtime.bigint();
94
- await this.insertNonRevertiblesFromPrivate(context);
95
- const nonRevertEnd = process.hrtime.bigint();
96
- this.metrics.recordPrivateEffectsInsertion(Number(nonRevertEnd - nonRevertStart) / 1_000, 'non-revertible');
97
- const processedPhases: ProcessedPhase[] = [];
98
- if (context.hasPhase(TxExecutionPhase.SETUP)) {
99
- const setupResult: ProcessedPhase = await this.simulateSetupPhase(context);
100
- processedPhases.push(setupResult);
101
- }
103
+ const revertStart = process.hrtime.bigint();
104
+ // FIXME(#12375): TX shouldn't die if revertible insertions fail. Should just revert to snapshot.
105
+ await this.insertRevertiblesFromPrivate(context);
106
+ // add new contracts to the contracts db so that their functions may be found and called
107
+ await this.worldStateDB.addNewRevertibleContracts(tx);
108
+ const revertEnd = process.hrtime.bigint();
109
+ this.metrics.recordPrivateEffectsInsertion(Number(revertEnd - revertStart) / 1_000, 'revertible');
110
+
111
+ if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
112
+ const appLogicResult: ProcessedPhase = await this.simulateAppLogicPhase(context);
113
+ processedPhases.push(appLogicResult);
114
+ }
102
115
 
103
- const revertStart = process.hrtime.bigint();
104
- await this.insertRevertiblesFromPrivate(context);
105
- const revertEnd = process.hrtime.bigint();
106
- this.metrics.recordPrivateEffectsInsertion(Number(revertEnd - revertStart) / 1_000, 'revertible');
107
- if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
108
- const appLogicResult: ProcessedPhase = await this.simulateAppLogicPhase(context);
109
- processedPhases.push(appLogicResult);
110
- }
116
+ if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
117
+ const teardownResult: ProcessedPhase = await this.simulateTeardownPhase(context);
118
+ processedPhases.push(teardownResult);
119
+ }
111
120
 
112
- if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
113
- const teardownResult: ProcessedPhase = await this.simulateTeardownPhase(context);
114
- processedPhases.push(teardownResult);
115
- }
121
+ await context.halt();
122
+ await this.payFee(context);
116
123
 
117
- context.halt();
118
- await this.payFee(context);
124
+ const endStateReference = await this.db.getStateReference();
119
125
 
120
- const endStateReference = await this.db.getStateReference();
126
+ const avmProvingRequest = await context.generateProvingRequest(endStateReference);
121
127
 
122
- const avmProvingRequest = await context.generateProvingRequest(endStateReference);
128
+ const revertCode = context.getFinalRevertCode();
123
129
 
124
- const revertCode = context.getFinalRevertCode();
125
- if (!revertCode.isOK()) {
126
- // TODO(#6464): Should we allow emitting contracts in the private setup phase?
127
- // if so, this is removing contracts deployed in private setup
128
- // You can't submit contracts in public, so this is only relevant for private-created side effects
129
- // FIXME: we shouldn't need to directly modify worldStateDb here!
130
- await this.worldStateDB.removeNewContracts(tx, true);
131
- // FIXME(dbanks12): should not be changing immutable tx
132
- tx.filterRevertedLogs(tx.data.forPublic!.nonRevertibleAccumulatedData);
130
+ if (!revertCode.isOK()) {
131
+ await tx.filterRevertedLogs();
132
+ }
133
+ // Commit contracts from this TX to the block-level cache and clear tx cache
134
+ // If the tx reverted, only commit non-revertible contracts
135
+ // NOTE: You can't create contracts in public, so this is only relevant for private-created contracts
136
+ this.worldStateDB.commitContractsForTx(/*onlyNonRevertibles=*/ !revertCode.isOK());
137
+
138
+ const endTime = process.hrtime.bigint();
139
+ this.log.debug(`Public TX simulator took ${Number(endTime - startTime) / 1_000_000} ms\n`);
140
+
141
+ return {
142
+ avmProvingRequest,
143
+ gasUsed: {
144
+ totalGas: context.getActualGasUsed(),
145
+ teardownGas: context.teardownGasUsed,
146
+ publicGas: context.getActualPublicGasUsed(),
147
+ billedGas: context.getTotalGasUsed(),
148
+ },
149
+ revertCode,
150
+ revertReason: context.revertReason,
151
+ processedPhases: processedPhases,
152
+ };
153
+ } finally {
154
+ // Make sure there are no new contracts in the tx-level cache.
155
+ // They should either be committed to block-level cache or cleared.
156
+ this.worldStateDB.clearContractsForTx();
133
157
  }
134
-
135
- return {
136
- avmProvingRequest,
137
- gasUsed: {
138
- totalGas: context.getActualGasUsed(),
139
- teardownGas: context.teardownGasUsed,
140
- publicGas: context.getActualPublicGasUsed(),
141
- },
142
- revertCode,
143
- revertReason: context.revertReason,
144
- processedPhases: processedPhases,
145
- };
146
158
  }
147
159
 
148
160
  /**
@@ -166,11 +178,11 @@ export class PublicTxSimulator {
166
178
 
167
179
  if (result.reverted) {
168
180
  // Drop the currently active forked state manager and rollback to end of setup.
169
- context.state.discardForkedState();
181
+ await context.state.discardForkedState();
170
182
  } else {
171
183
  if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
172
184
  // Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
173
- context.state.mergeForkedState();
185
+ await context.state.mergeForkedState();
174
186
  }
175
187
  }
176
188
 
@@ -186,17 +198,17 @@ export class PublicTxSimulator {
186
198
  if (!context.state.isForked()) {
187
199
  // If state isn't forked (app logic reverted), fork now
188
200
  // so we can rollback to the end of setup if teardown reverts.
189
- context.state.fork();
201
+ await context.state.fork();
190
202
  }
191
203
 
192
204
  const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
193
205
 
194
206
  if (result.reverted) {
195
207
  // Drop the currently active forked state manager and rollback to end of setup.
196
- context.state.discardForkedState();
208
+ await context.state.discardForkedState();
197
209
  } else {
198
210
  // Merge state updates from teardown,
199
- context.state.mergeForkedState();
211
+ await context.state.mergeForkedState();
200
212
  }
201
213
 
202
214
  return result;
@@ -302,7 +314,7 @@ export class PublicTxSimulator {
302
314
 
303
315
  /**
304
316
  * Simulate an enqueued public call, without modifying the context (PublicTxContext).
305
- * Resulting modifcations to the context can be applied by the caller.
317
+ * Resulting modifications to the context can be applied by the caller.
306
318
  *
307
319
  * This function can be mocked for testing to skip actual AVM simulation
308
320
  * while still simulating phases and generating a proving request.
@@ -395,12 +407,13 @@ export class PublicTxSimulator {
395
407
  */
396
408
  public async insertRevertiblesFromPrivate(context: PublicTxContext) {
397
409
  // Fork the state manager so we can rollback to end of setup if app logic reverts.
398
- context.state.fork();
410
+ await context.state.fork();
399
411
  const stateManager = context.state.getActiveStateManager();
400
412
  try {
401
413
  await stateManager.writeSiloedNullifiersFromPrivate(context.revertibleAccumulatedDataFromPrivate.nullifiers);
402
414
  } catch (e) {
403
415
  if (e instanceof NullifierCollisionError) {
416
+ // FIXME(#12375): simulator should be able to recover from this and just revert to snapshot.
404
417
  throw new NullifierCollisionError(
405
418
  `Nullifier collision encountered when inserting revertible nullifiers from private. Details:\n${e.message}\n.Stack:${e.stack}`,
406
419
  );
@@ -433,7 +446,7 @@ export class PublicTxSimulator {
433
446
  // When mocking the balance of the fee payer, the circuit should not be able to prove the simulation
434
447
 
435
448
  if (currentBalance.lt(txFee)) {
436
- if (this.enforceFeePayment) {
449
+ if (!this.skipFeeEnforcement) {
437
450
  throw new Error(
438
451
  `Not enough balance for fee payer to pay for transaction (got ${currentBalance.toBigInt()} needs ${txFee.toBigInt()})`,
439
452
  );
@@ -1,23 +1,5 @@
1
1
  import {
2
- AvmAccumulatedData,
3
- AvmAppendTreeHint,
4
- AvmCircuitPublicInputs,
5
- AvmContractBytecodeHints,
6
- AvmContractInstanceHint,
7
- AvmEnqueuedCallHint,
8
- AvmExecutionHints,
9
- AvmNullifierReadTreeHint,
10
- AvmNullifierWriteTreeHint,
11
- AvmPublicDataReadTreeHint,
12
- AvmPublicDataWriteTreeHint,
13
- type AztecAddress,
14
- type ContractClassIdPreimage,
15
- EthAddress,
16
- type Gas,
17
- type GasSettings,
18
- type GlobalVariables,
19
2
  L1_TO_L2_MSG_TREE_HEIGHT,
20
- L2ToL1Message,
21
3
  MAX_ENQUEUED_CALLS_PER_TX,
22
4
  MAX_L2_TO_L1_MSGS_PER_TX,
23
5
  MAX_NOTE_HASHES_PER_TX,
@@ -28,33 +10,49 @@ import {
28
10
  MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
29
11
  NOTE_HASH_TREE_HEIGHT,
30
12
  NULLIFIER_TREE_HEIGHT,
31
- NoteHash,
32
- Nullifier,
33
- NullifierLeafPreimage,
34
13
  PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
35
14
  PUBLIC_DATA_TREE_HEIGHT,
36
15
  PUBLIC_LOG_DATA_SIZE_IN_FIELDS,
37
- PrivateToAvmAccumulatedData,
38
- PrivateToAvmAccumulatedDataArrayLengths,
39
- PublicCallRequest,
40
- PublicDataTreeLeafPreimage,
41
- PublicDataUpdateRequest,
42
- PublicDataWrite,
43
- PublicLog,
44
- ScopedL2ToL1Message,
45
- SerializableContractInstance,
46
- type TreeSnapshots,
47
- } from '@aztec/circuits.js';
48
- import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
16
+ } from '@aztec/constants';
49
17
  import { padArrayEnd } from '@aztec/foundation/collection';
18
+ import { EthAddress } from '@aztec/foundation/eth-address';
50
19
  import { Fr } from '@aztec/foundation/fields';
51
- import { jsonStringify } from '@aztec/foundation/json-rpc';
52
20
  import { createLogger } from '@aztec/foundation/log';
21
+ import {
22
+ AvmAccumulatedData,
23
+ AvmAppendTreeHint,
24
+ AvmCircuitPublicInputs,
25
+ AvmContractClassHint,
26
+ AvmContractInstanceHint,
27
+ AvmEnqueuedCallHint,
28
+ AvmExecutionHints,
29
+ AvmNullifierReadTreeHint,
30
+ AvmNullifierWriteTreeHint,
31
+ AvmPublicDataReadTreeHint,
32
+ AvmPublicDataWriteTreeHint,
33
+ PublicDataUpdateRequest,
34
+ PublicDataWrite,
35
+ } from '@aztec/stdlib/avm';
36
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
37
+ import { type ContractClassWithCommitment, SerializableContractInstance } from '@aztec/stdlib/contract';
38
+ import type { Gas, GasSettings } from '@aztec/stdlib/gas';
39
+ import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
40
+ import {
41
+ NoteHash,
42
+ Nullifier,
43
+ PrivateToAvmAccumulatedData,
44
+ PrivateToAvmAccumulatedDataArrayLengths,
45
+ PublicCallRequest,
46
+ } from '@aztec/stdlib/kernel';
47
+ import { PublicLog } from '@aztec/stdlib/logs';
48
+ import { L2ToL1Message, ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
49
+ import { NullifierLeafPreimage, PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
50
+ import type { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
53
51
 
54
52
  import { strict as assert } from 'assert';
55
53
 
56
54
  import { SideEffectLimitReachedError } from './side_effect_errors.js';
57
- import { type PublicSideEffectTraceInterface } from './side_effect_trace_interface.js';
55
+ import type { PublicSideEffectTraceInterface } from './side_effect_trace_interface.js';
58
56
  import { UniqueClassIds } from './unique_class_ids.js';
59
57
 
60
58
  const emptyPublicDataPath = () => new Array(PUBLIC_DATA_TREE_HEIGHT).fill(Fr.zero());
@@ -124,8 +122,8 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
124
122
  * otherwise the public kernel can fail to prove because TX limits are breached.
125
123
  */
126
124
  private readonly previousSideEffectArrayLengths: SideEffectArrayLengths = SideEffectArrayLengths.empty(),
127
- /** We need to track the set of class IDs used for bytecode retrieval to deduplicate and enforce limits. */
128
- private gotBytecodeFromClassIds: UniqueClassIds = new UniqueClassIds(),
125
+ /** We need to track the set of class IDs used, to enforce limits. */
126
+ private uniqueClassIds: UniqueClassIds = new UniqueClassIds(),
129
127
  ) {
130
128
  this.sideEffectCounter = startSideEffectCounter;
131
129
  this.avmCircuitHints = AvmExecutionHints.empty();
@@ -142,7 +140,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
142
140
  this.previousSideEffectArrayLengths.l2ToL1Msgs + this.l2ToL1Messages.length,
143
141
  this.previousSideEffectArrayLengths.publicLogs + this.publicLogs.length,
144
142
  ),
145
- this.gotBytecodeFromClassIds.fork(),
143
+ this.uniqueClassIds.fork(),
146
144
  );
147
145
  }
148
146
 
@@ -168,29 +166,17 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
168
166
  }
169
167
 
170
168
  private mergeHints(forkedTrace: this) {
171
- this.gotBytecodeFromClassIds.acceptAndMerge(forkedTrace.gotBytecodeFromClassIds);
172
-
173
- this.avmCircuitHints.enqueuedCalls.items.push(...forkedTrace.avmCircuitHints.enqueuedCalls.items);
174
-
175
- this.avmCircuitHints.contractInstances.items.push(...forkedTrace.avmCircuitHints.contractInstances.items);
176
-
177
- // merge in contract bytecode hints
178
- // UniqueClassIds should prevent duplication
179
- for (const [contractClassId, bytecodeHint] of forkedTrace.avmCircuitHints.contractBytecodeHints) {
180
- assert(
181
- !this.avmCircuitHints.contractBytecodeHints.has(contractClassId),
182
- 'Bug preventing duplication of contract bytecode hints',
183
- );
184
- this.avmCircuitHints.contractBytecodeHints.set(contractClassId, bytecodeHint);
185
- }
186
-
187
- this.avmCircuitHints.publicDataReads.items.push(...forkedTrace.avmCircuitHints.publicDataReads.items);
188
- this.avmCircuitHints.publicDataWrites.items.push(...forkedTrace.avmCircuitHints.publicDataWrites.items);
189
- this.avmCircuitHints.nullifierReads.items.push(...forkedTrace.avmCircuitHints.nullifierReads.items);
190
- this.avmCircuitHints.nullifierWrites.items.push(...forkedTrace.avmCircuitHints.nullifierWrites.items);
191
- this.avmCircuitHints.noteHashReads.items.push(...forkedTrace.avmCircuitHints.noteHashReads.items);
192
- this.avmCircuitHints.noteHashWrites.items.push(...forkedTrace.avmCircuitHints.noteHashWrites.items);
193
- this.avmCircuitHints.l1ToL2MessageReads.items.push(...forkedTrace.avmCircuitHints.l1ToL2MessageReads.items);
169
+ this.uniqueClassIds.acceptAndMerge(forkedTrace.uniqueClassIds);
170
+ this.avmCircuitHints.enqueuedCalls.push(...forkedTrace.avmCircuitHints.enqueuedCalls);
171
+ this.avmCircuitHints.contractInstances.push(...forkedTrace.avmCircuitHints.contractInstances);
172
+ this.avmCircuitHints.contractClasses.push(...forkedTrace.avmCircuitHints.contractClasses);
173
+ this.avmCircuitHints.publicDataReads.push(...forkedTrace.avmCircuitHints.publicDataReads);
174
+ this.avmCircuitHints.publicDataWrites.push(...forkedTrace.avmCircuitHints.publicDataWrites);
175
+ this.avmCircuitHints.nullifierReads.push(...forkedTrace.avmCircuitHints.nullifierReads);
176
+ this.avmCircuitHints.nullifierWrites.push(...forkedTrace.avmCircuitHints.nullifierWrites);
177
+ this.avmCircuitHints.noteHashReads.push(...forkedTrace.avmCircuitHints.noteHashReads);
178
+ this.avmCircuitHints.noteHashWrites.push(...forkedTrace.avmCircuitHints.noteHashWrites);
179
+ this.avmCircuitHints.l1ToL2MessageReads.push(...forkedTrace.avmCircuitHints.l1ToL2MessageReads);
194
180
  }
195
181
 
196
182
  public getCounter() {
@@ -213,7 +199,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
213
199
  leafIndex: Fr = Fr.zero(),
214
200
  path: Fr[] = emptyPublicDataPath(),
215
201
  ) {
216
- this.avmCircuitHints.publicDataReads.items.push(new AvmPublicDataReadTreeHint(leafPreimage, leafIndex, path));
202
+ this.avmCircuitHints.publicDataReads.push(new AvmPublicDataReadTreeHint(leafPreimage, leafIndex, path));
217
203
  this.log.trace(
218
204
  `Tracing storage read (address=${contractAddress}, slot=${slot}): value=${value} (counter=${this.sideEffectCounter})`,
219
205
  );
@@ -260,7 +246,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
260
246
 
261
247
  // New hinting
262
248
  const readHint = new AvmPublicDataReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
263
- this.avmCircuitHints.publicDataWrites.items.push(
249
+ this.avmCircuitHints.publicDataWrites.push(
264
250
  new AvmPublicDataWriteTreeHint(readHint, newLeafPreimage, insertionPath),
265
251
  );
266
252
 
@@ -279,7 +265,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
279
265
  path: Fr[] = emptyNoteHashPath(),
280
266
  ) {
281
267
  // New Hinting
282
- this.avmCircuitHints.noteHashReads.items.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
268
+ this.avmCircuitHints.noteHashReads.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
283
269
  // NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
284
270
  this.log.trace(`Tracing note hash check (counter=${this.sideEffectCounter})`);
285
271
  }
@@ -290,7 +276,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
290
276
  }
291
277
 
292
278
  this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
293
- this.avmCircuitHints.noteHashWrites.items.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
279
+ this.avmCircuitHints.noteHashWrites.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
294
280
  this.log.trace(`Tracing new note hash (counter=${this.sideEffectCounter})`);
295
281
  this.incrementSideEffectCounter();
296
282
  }
@@ -302,9 +288,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
302
288
  lowLeafIndex: Fr = Fr.zero(),
303
289
  lowLeafPath: Fr[] = emptyNullifierPath(),
304
290
  ) {
305
- this.avmCircuitHints.nullifierReads.items.push(
306
- new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath),
307
- );
291
+ this.avmCircuitHints.nullifierReads.push(new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath));
308
292
  this.log.trace(`Tracing nullifier check (counter=${this.sideEffectCounter})`);
309
293
  this.incrementSideEffectCounter();
310
294
  }
@@ -323,7 +307,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
323
307
  this.nullifiers.push(new Nullifier(siloedNullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
324
308
 
325
309
  const lowLeafReadHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
326
- this.avmCircuitHints.nullifierWrites.items.push(new AvmNullifierWriteTreeHint(lowLeafReadHint, insertionPath));
310
+ this.avmCircuitHints.nullifierWrites.push(new AvmNullifierWriteTreeHint(lowLeafReadHint, insertionPath));
327
311
  this.log.trace(`Tracing new nullifier (counter=${this.sideEffectCounter})`);
328
312
  this.incrementSideEffectCounter();
329
313
  }
@@ -336,7 +320,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
336
320
  _exists: boolean,
337
321
  path: Fr[] = emptyL1ToL2MessagePath(),
338
322
  ) {
339
- this.avmCircuitHints.l1ToL2MessageReads.items.push(new AvmAppendTreeHint(msgLeafIndex, msgHash, path));
323
+ this.avmCircuitHints.l1ToL2MessageReads.push(new AvmAppendTreeHint(msgLeafIndex, msgHash, path));
340
324
  this.log.trace(`Tracing l1 to l2 message check (counter=${this.sideEffectCounter})`);
341
325
  }
342
326
 
@@ -371,114 +355,55 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
371
355
  contractAddress: AztecAddress,
372
356
  exists: boolean,
373
357
  instance: SerializableContractInstance = SerializableContractInstance.default(),
374
- lowLeafPreimage: NullifierLeafPreimage = NullifierLeafPreimage.empty(),
375
- lowLeafIndex: Fr = Fr.zero(),
376
- lowLeafPath: Fr[] = emptyNullifierPath(),
358
+ updateMembershipHint: AvmPublicDataReadTreeHint = AvmPublicDataReadTreeHint.empty(),
359
+ updatePreimage: Fr[] = [],
377
360
  ) {
378
- const membershipHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
379
- this.avmCircuitHints.contractInstances.items.push(
361
+ this.avmCircuitHints.contractInstances.push(
380
362
  new AvmContractInstanceHint(
381
363
  contractAddress,
382
364
  exists,
383
365
  instance.salt,
384
366
  instance.deployer,
385
- instance.contractClassId,
367
+ instance.currentContractClassId,
368
+ instance.originalContractClassId,
386
369
  instance.initializationHash,
387
370
  instance.publicKeys,
388
- membershipHint,
371
+ updateMembershipHint,
372
+ updatePreimage,
389
373
  ),
390
374
  );
391
375
  this.log.trace(`Tracing contract instance retrieval (counter=${this.sideEffectCounter})`);
392
376
  this.incrementSideEffectCounter();
393
377
  }
394
378
 
395
- // This tracing function gets called everytime we start simulation/execution.
396
- // This happens both when starting a new top-level trace and the start of every forked trace
397
- // We use this to collect the AvmContractBytecodeHints
398
- public traceGetBytecode(
399
- contractAddress: AztecAddress,
400
- exists: boolean,
401
- bytecode: Buffer = Buffer.alloc(0),
402
- contractInstance: SerializableContractInstance = SerializableContractInstance.default(),
403
- contractClass: ContractClassIdPreimage = {
404
- artifactHash: Fr.zero(),
405
- privateFunctionsRoot: Fr.zero(),
406
- publicBytecodeCommitment: Fr.zero(),
407
- },
408
- lowLeafPreimage: NullifierLeafPreimage = NullifierLeafPreimage.empty(),
409
- lowLeafIndex: Fr = Fr.zero(),
410
- lowLeafPath: Fr[] = emptyNullifierPath(),
411
- ) {
412
- // FIXME: The way we are hinting contract bytecodes is fundamentally broken.
413
- // We are mapping contract class ID to a bytecode hint
414
- // But a bytecode hint is tied to a contract INSTANCE.
415
- // What if you encounter another contract instance with the same class ID?
416
- // We can't hint that instance too since there is already an entry in the hints set that class ID.
417
- // But without that instance hinted, the circuit can't prove that the called contract address
418
- // actually corresponds to any class ID.
419
-
420
- const membershipHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
421
- const instance = new AvmContractInstanceHint(
422
- contractAddress,
423
- exists,
424
- contractInstance.salt,
425
- contractInstance.deployer,
426
- contractInstance.contractClassId,
427
- contractInstance.initializationHash,
428
- contractInstance.publicKeys,
429
- membershipHint,
430
- );
431
-
432
- // Always hint the contract instance separately from the bytecode hint.
433
- // Since the bytecode hints are keyed by class ID, we need to hint the instance separately
434
- // since there might be multiple instances hinted for the same class ID.
435
- this.avmCircuitHints.contractInstances.items.push(instance);
436
- this.log.trace(
437
- `Tracing contract instance for bytecode retrieval: exists=${exists}, instance=${jsonStringify(contractInstance)}`,
438
- );
439
-
379
+ public traceGetContractClass(contractClassId: Fr, exists: boolean, contractClass?: ContractClassWithCommitment) {
440
380
  if (!exists) {
441
- // this ensures there are no duplicates
442
- this.log.debug(`Contract address ${contractAddress} does not exist. Not tracing bytecode & class ID.`);
443
- return;
444
- }
445
- // We already hinted this bytecode. No need to
446
- // Don't we still need to hint if the class ID already exists?
447
- // Because the circuit needs to prove that the called contract address corresponds to the class ID.
448
- // To do so, the circuit needs to know the class ID in the
449
- if (this.gotBytecodeFromClassIds.has(contractInstance.contractClassId.toString())) {
450
- // this ensures there are no duplicates
451
- this.log.trace(
452
- `Contract class id ${contractInstance.contractClassId.toString()} already exists in previous hints`,
381
+ this.avmCircuitHints.contractClasses.push(
382
+ new AvmContractClassHint(contractClassId, exists, Fr.zero(), Fr.zero(), Fr.zero(), Buffer.alloc(0)),
453
383
  );
454
- return;
455
- }
384
+ } else if (!this.uniqueClassIds.has(contractClassId.toString())) {
385
+ if (this.uniqueClassIds.size() >= MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS) {
386
+ this.log.debug(`Bytecode retrieval failure for contract class ID ${contractClassId} (limit reached)`);
387
+ throw new SideEffectLimitReachedError(
388
+ 'contract calls to unique class IDs',
389
+ MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
390
+ );
391
+ }
456
392
 
457
- // If we could actually allow contract calls after the limit was reached, we would hint even if we have
458
- // surpassed the limit of unique class IDs (still trace the failed bytecode retrieval)
459
- // because the circuit needs to know the class ID to know when the limit is hit.
460
- // BUT, the issue with this approach is that the sequencer could lie and say "this call was to a new class ID",
461
- // and the circuit cannot prove that it's not true without deriving the class ID from bytecode,
462
- // proving that it corresponds to the called contract address, and proving that the class ID wasn't already
463
- // present/used. That would require more bytecode hashing which is exactly what this limit exists to avoid.
464
- if (this.gotBytecodeFromClassIds.size() >= MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS) {
465
- this.log.debug(
466
- `Bytecode retrieval failure for contract class ID ${contractInstance.contractClassId.toString()} (limit reached)`,
393
+ this.uniqueClassIds.add(contractClassId.toString());
394
+ this.avmCircuitHints.contractClasses.push(
395
+ new AvmContractClassHint(
396
+ contractClassId,
397
+ exists,
398
+ contractClass!.artifactHash,
399
+ contractClass!.privateFunctionsRoot,
400
+ contractClass!.publicBytecodeCommitment,
401
+ contractClass!.packedBytecode,
402
+ ),
467
403
  );
468
- throw new SideEffectLimitReachedError(
469
- 'contract calls to unique class IDs',
470
- MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
471
- );
472
- }
473
404
 
474
- this.log.trace(`Tracing bytecode & contract class for bytecode retrieval: class=${jsonStringify(contractClass)}`);
475
- this.avmCircuitHints.contractBytecodeHints.set(
476
- contractInstance.contractClassId.toString(),
477
- new AvmContractBytecodeHints(bytecode, instance, contractClass),
478
- );
479
- // After adding the bytecode hint, mark the classId as retrieved to avoid duplication.
480
- // The above map alone isn't sufficient because we need to check the parent trace's (and its parent) as well.
481
- this.gotBytecodeFromClassIds.add(contractInstance.contractClassId.toString());
405
+ this.incrementSideEffectCounter();
406
+ }
482
407
  }
483
408
 
484
409
  /**
@@ -495,7 +420,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
495
420
  ) {
496
421
  // TODO(4805): check if some threshold is reached for max enqueued or nested calls (to unique contracts?)
497
422
  this.enqueuedCalls.push(publicCallRequest);
498
- this.avmCircuitHints.enqueuedCalls.items.push(new AvmEnqueuedCallHint(publicCallRequest.contractAddress, calldata));
423
+ this.avmCircuitHints.enqueuedCalls.push(new AvmEnqueuedCallHint(publicCallRequest.contractAddress, calldata));
499
424
  }
500
425
 
501
426
  public getSideEffects(): SideEffects {