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

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 (505) 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 -11
  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 +77 -0
  123. package/dest/{avm → public/avm}/fixtures/index.d.ts +7 -7
  124. package/dest/public/avm/fixtures/index.d.ts.map +1 -0
  125. package/dest/public/avm/fixtures/index.js +140 -0
  126. package/dest/{avm → public/avm}/fixtures/simple_contract_data_source.d.ts +10 -4
  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 +112 -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 +488 -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 +12 -8
  200. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  201. package/dest/public/fixtures/public_tx_simulation_tester.js +37 -44
  202. package/dest/public/fixtures/utils.d.ts +3 -11
  203. package/dest/public/fixtures/utils.d.ts.map +1 -1
  204. package/dest/public/fixtures/utils.js +15 -35
  205. package/dest/public/index.d.ts +3 -2
  206. package/dest/public/index.d.ts.map +1 -1
  207. package/dest/public/index.js +3 -3
  208. package/dest/public/public_db_sources.d.ts +22 -28
  209. package/dest/public/public_db_sources.d.ts.map +1 -1
  210. package/dest/public/public_db_sources.js +75 -181
  211. package/dest/public/public_processor.d.ts +8 -6
  212. package/dest/public/public_processor.d.ts.map +1 -1
  213. package/dest/public/public_processor.js +329 -308
  214. package/dest/public/public_processor_metrics.d.ts +3 -3
  215. package/dest/public/public_processor_metrics.d.ts.map +1 -1
  216. package/dest/public/public_processor_metrics.js +46 -27
  217. package/dest/public/public_tx_context.d.ts +14 -8
  218. package/dest/public/public_tx_context.d.ts.map +1 -1
  219. package/dest/public/public_tx_context.js +122 -143
  220. package/dest/public/public_tx_simulator.d.ts +8 -5
  221. package/dest/public/public_tx_simulator.d.ts.map +1 -1
  222. package/dest/public/public_tx_simulator.js +306 -317
  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 +65 -132
  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/unique_class_ids.js +23 -28
  231. package/dest/public/utils.d.ts +2 -2
  232. package/dest/public/utils.d.ts.map +1 -1
  233. package/dest/public/utils.js +17 -12
  234. package/dest/server.d.ts +4 -4
  235. package/dest/server.d.ts.map +1 -1
  236. package/dest/server.js +3 -5
  237. package/dest/test/utils.d.ts +3 -2
  238. package/dest/test/utils.d.ts.map +1 -1
  239. package/dest/test/utils.js +9 -7
  240. package/package.json +16 -18
  241. package/src/client.ts +4 -0
  242. package/src/{public → common}/db_interfaces.ts +8 -40
  243. package/src/common/debug_fn_name.ts +4 -2
  244. package/src/common/errors.ts +5 -5
  245. package/src/common/index.ts +2 -1
  246. package/src/common/message_load_oracle_inputs.ts +2 -2
  247. package/src/common/stats/index.ts +1 -0
  248. package/src/{stats → common/stats}/stats.ts +2 -2
  249. package/src/{acvm → private/acvm}/acvm.ts +5 -5
  250. package/src/{acvm → private/acvm}/acvm_types.ts +1 -1
  251. package/src/{acvm → private/acvm}/deserialize.ts +2 -2
  252. package/src/{acvm → private/acvm}/oracle/index.ts +1 -1
  253. package/src/{acvm → private/acvm}/oracle/oracle.ts +22 -12
  254. package/src/{acvm → private/acvm}/oracle/typed_oracle.ts +50 -55
  255. package/src/{acvm → private/acvm}/serialize.ts +10 -3
  256. package/src/{client → private}/client_execution_context.ts +54 -37
  257. package/src/{client → private}/db_oracle.ts +20 -20
  258. package/src/{client → private}/execution_note_cache.ts +3 -3
  259. package/src/{common → private}/hashed_values_cache.ts +2 -2
  260. package/src/private/index.ts +12 -0
  261. package/src/{client → private}/pick_notes.ts +1 -1
  262. package/src/{client → private}/private_execution.ts +46 -14
  263. package/src/{providers → private/providers}/acvm_native.ts +6 -6
  264. package/src/{providers → private/providers}/acvm_wasm.ts +4 -4
  265. package/src/{providers → private/providers}/acvm_wasm_with_blobs.ts +5 -5
  266. package/src/{providers → private/providers}/factory.ts +1 -1
  267. package/src/{common → private/providers}/simulation_provider.ts +5 -5
  268. package/src/{client → private}/simulator.ts +31 -123
  269. package/src/{client → private}/unconstrained_execution.ts +7 -7
  270. package/src/{client → private}/view_data_oracle.ts +25 -28
  271. package/src/{avm → public/avm}/avm_context.ts +12 -7
  272. package/src/{avm → public/avm}/avm_contract_call_result.ts +6 -6
  273. package/src/{avm → public/avm}/avm_execution_environment.ts +2 -2
  274. package/src/{avm → public/avm}/avm_gas.ts +1 -3
  275. package/src/{avm → public/avm}/avm_machine_state.ts +2 -2
  276. package/src/{avm → public/avm}/avm_memory_types.ts +4 -4
  277. package/src/{avm → public/avm}/avm_simulator.ts +12 -6
  278. package/src/{avm → public/avm}/errors.ts +5 -4
  279. package/src/{avm → public/avm}/fixtures/avm_simulation_tester.ts +16 -15
  280. package/src/{avm → public/avm}/fixtures/base_avm_simulation_tester.ts +38 -40
  281. package/src/{avm → public/avm}/fixtures/index.ts +17 -12
  282. package/src/{avm → public/avm}/fixtures/simple_contract_data_source.ts +64 -9
  283. package/src/{avm → public/avm}/index.ts +1 -1
  284. package/src/public/avm/journal/index.ts +1 -0
  285. package/src/{avm → public/avm}/journal/journal.ts +332 -305
  286. package/src/{avm → public/avm}/journal/nullifiers.ts +20 -19
  287. package/src/{avm → public/avm}/journal/public_storage.ts +2 -2
  288. package/src/{avm → public/avm}/opcodes/contract.ts +1 -1
  289. package/src/{avm → public/avm}/opcodes/control_flow.ts +1 -1
  290. package/src/{avm → public/avm}/opcodes/conversion.ts +1 -1
  291. package/src/{avm → public/avm}/opcodes/ec_add.ts +2 -2
  292. package/src/{avm → public/avm}/opcodes/external_calls.ts +5 -6
  293. package/src/{avm → public/avm}/opcodes/hashing.ts +1 -1
  294. package/src/public/avm/opcodes/index.ts +15 -0
  295. package/src/{avm → public/avm}/opcodes/instruction.ts +2 -2
  296. package/src/{avm → public/avm}/opcodes/misc.ts +1 -1
  297. package/src/public/avm/serialization/bytecode_serialization.ts +204 -0
  298. package/src/{avm → public/avm}/serialization/instruction_serialization.ts +0 -1
  299. package/src/{avm → public/avm}/test_utils.ts +10 -7
  300. package/src/public/execution.ts +9 -12
  301. package/src/public/fixtures/public_tx_simulation_tester.ts +45 -63
  302. package/src/public/fixtures/utils.ts +8 -43
  303. package/src/public/index.ts +3 -2
  304. package/src/public/public_db_sources.ts +55 -188
  305. package/src/public/public_processor.ts +66 -47
  306. package/src/public/public_processor_metrics.ts +3 -3
  307. package/src/public/public_tx_context.ts +69 -74
  308. package/src/public/public_tx_simulator.ts +35 -27
  309. package/src/public/side_effect_trace.ts +67 -140
  310. package/src/public/side_effect_trace_interface.ts +10 -23
  311. package/src/public/unique_class_ids.ts +1 -1
  312. package/src/public/utils.ts +2 -2
  313. package/src/server.ts +4 -4
  314. package/src/test/utils.ts +5 -3
  315. package/dest/acvm/acvm.d.ts.map +0 -1
  316. package/dest/acvm/acvm.js +0 -73
  317. package/dest/acvm/acvm_types.d.ts.map +0 -1
  318. package/dest/acvm/acvm_types.js +0 -2
  319. package/dest/acvm/deserialize.d.ts.map +0 -1
  320. package/dest/acvm/deserialize.js +0 -46
  321. package/dest/acvm/index.d.ts.map +0 -1
  322. package/dest/acvm/index.js +0 -6
  323. package/dest/acvm/oracle/index.d.ts.map +0 -1
  324. package/dest/acvm/oracle/index.js +0 -3
  325. package/dest/acvm/oracle/oracle.d.ts.map +0 -1
  326. package/dest/acvm/oracle/oracle.js +0 -230
  327. package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
  328. package/dest/acvm/oracle/typed_oracle.js +0 -131
  329. package/dest/acvm/serialize.d.ts.map +0 -1
  330. package/dest/acvm/serialize.js +0 -48
  331. package/dest/avm/avm_context.d.ts.map +0 -1
  332. package/dest/avm/avm_context.js +0 -44
  333. package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
  334. package/dest/avm/avm_contract_call_result.js +0 -45
  335. package/dest/avm/avm_execution_environment.d.ts.map +0 -1
  336. package/dest/avm/avm_execution_environment.js +0 -28
  337. package/dest/avm/avm_gas.d.ts.map +0 -1
  338. package/dest/avm/avm_gas.js +0 -170
  339. package/dest/avm/avm_machine_state.d.ts.map +0 -1
  340. package/dest/avm/avm_machine_state.js +0 -112
  341. package/dest/avm/avm_memory_types.d.ts.map +0 -1
  342. package/dest/avm/avm_memory_types.js +0 -327
  343. package/dest/avm/avm_simulator.d.ts.map +0 -1
  344. package/dest/avm/avm_simulator.js +0 -193
  345. package/dest/avm/avm_tree.d.ts +0 -282
  346. package/dest/avm/avm_tree.d.ts.map +0 -1
  347. package/dest/avm/avm_tree.js +0 -684
  348. package/dest/avm/bytecode_utils.d.ts.map +0 -1
  349. package/dest/avm/bytecode_utils.js +0 -15
  350. package/dest/avm/errors.d.ts.map +0 -1
  351. package/dest/avm/errors.js +0 -196
  352. package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  353. package/dest/avm/fixtures/avm_simulation_tester.js +0 -73
  354. package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  355. package/dest/avm/fixtures/base_avm_simulation_tester.js +0 -76
  356. package/dest/avm/fixtures/index.d.ts.map +0 -1
  357. package/dest/avm/fixtures/index.js +0 -134
  358. package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  359. package/dest/avm/fixtures/simple_contract_data_source.js +0 -75
  360. package/dest/avm/index.d.ts.map +0 -1
  361. package/dest/avm/index.js +0 -4
  362. package/dest/avm/journal/index.d.ts.map +0 -1
  363. package/dest/avm/journal/index.js +0 -2
  364. package/dest/avm/journal/journal.d.ts.map +0 -1
  365. package/dest/avm/journal/journal.js +0 -499
  366. package/dest/avm/journal/nullifiers.d.ts.map +0 -1
  367. package/dest/avm/journal/nullifiers.js +0 -99
  368. package/dest/avm/journal/public_storage.d.ts.map +0 -1
  369. package/dest/avm/journal/public_storage.js +0 -159
  370. package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
  371. package/dest/avm/opcodes/accrued_substate.js +0 -215
  372. package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
  373. package/dest/avm/opcodes/addressing_mode.js +0 -81
  374. package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
  375. package/dest/avm/opcodes/arithmetic.js +0 -70
  376. package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
  377. package/dest/avm/opcodes/bitwise.js +0 -90
  378. package/dest/avm/opcodes/comparators.d.ts.map +0 -1
  379. package/dest/avm/opcodes/comparators.js +0 -40
  380. package/dest/avm/opcodes/contract.d.ts.map +0 -1
  381. package/dest/avm/opcodes/contract.js +0 -63
  382. package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
  383. package/dest/avm/opcodes/control_flow.js +0 -97
  384. package/dest/avm/opcodes/conversion.d.ts.map +0 -1
  385. package/dest/avm/opcodes/conversion.js +0 -64
  386. package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
  387. package/dest/avm/opcodes/ec_add.js +0 -82
  388. package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
  389. package/dest/avm/opcodes/environment_getters.js +0 -78
  390. package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
  391. package/dest/avm/opcodes/external_calls.js +0 -169
  392. package/dest/avm/opcodes/hashing.d.ts.map +0 -1
  393. package/dest/avm/opcodes/hashing.js +0 -103
  394. package/dest/avm/opcodes/index.d.ts.map +0 -1
  395. package/dest/avm/opcodes/index.js +0 -16
  396. package/dest/avm/opcodes/instruction.d.ts.map +0 -1
  397. package/dest/avm/opcodes/instruction.js +0 -100
  398. package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
  399. package/dest/avm/opcodes/instruction_impl.js +0 -33
  400. package/dest/avm/opcodes/memory.d.ts.map +0 -1
  401. package/dest/avm/opcodes/memory.js +0 -226
  402. package/dest/avm/opcodes/misc.d.ts.map +0 -1
  403. package/dest/avm/opcodes/misc.js +0 -45
  404. package/dest/avm/opcodes/multi_scalar_mul.d.ts +0 -16
  405. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +0 -1
  406. package/dest/avm/opcodes/multi_scalar_mul.js +0 -112
  407. package/dest/avm/opcodes/storage.d.ts.map +0 -1
  408. package/dest/avm/opcodes/storage.js +0 -61
  409. package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
  410. package/dest/avm/serialization/buffer_cursor.js +0 -99
  411. package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  412. package/dest/avm/serialization/bytecode_serialization.js +0 -132
  413. package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
  414. package/dest/avm/serialization/instruction_serialization.js +0 -187
  415. package/dest/avm/test_utils.d.ts.map +0 -1
  416. package/dest/avm/test_utils.js +0 -52
  417. package/dest/client/client_execution_context.d.ts.map +0 -1
  418. package/dest/client/client_execution_context.js +0 -392
  419. package/dest/client/db_oracle.d.ts.map +0 -1
  420. package/dest/client/db_oracle.js +0 -17
  421. package/dest/client/execution_note_cache.d.ts.map +0 -1
  422. package/dest/client/execution_note_cache.js +0 -181
  423. package/dest/client/index.d.ts +0 -16
  424. package/dest/client/index.d.ts.map +0 -1
  425. package/dest/client/index.js +0 -15
  426. package/dest/client/pick_notes.d.ts.map +0 -1
  427. package/dest/client/pick_notes.js +0 -54
  428. package/dest/client/private_execution.d.ts +0 -19
  429. package/dest/client/private_execution.d.ts.map +0 -1
  430. package/dest/client/private_execution.js +0 -72
  431. package/dest/client/simulator.d.ts +0 -60
  432. package/dest/client/simulator.d.ts.map +0 -1
  433. package/dest/client/simulator.js +0 -136
  434. package/dest/client/unconstrained_execution.d.ts.map +0 -1
  435. package/dest/client/unconstrained_execution.js +0 -30
  436. package/dest/client/view_data_oracle.d.ts.map +0 -1
  437. package/dest/client/view_data_oracle.js +0 -268
  438. package/dest/common/hashed_values_cache.d.ts.map +0 -1
  439. package/dest/common/hashed_values_cache.js +0 -50
  440. package/dest/common/simulation_provider.d.ts.map +0 -1
  441. package/dest/common/simulation_provider.js +0 -27
  442. package/dest/common.d.ts +0 -2
  443. package/dest/common.d.ts.map +0 -1
  444. package/dest/common.js +0 -2
  445. package/dest/providers/acvm_native.d.ts.map +0 -1
  446. package/dest/providers/acvm_native.js +0 -125
  447. package/dest/providers/acvm_wasm.d.ts.map +0 -1
  448. package/dest/providers/acvm_wasm.js +0 -54
  449. package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  450. package/dest/providers/factory.d.ts.map +0 -1
  451. package/dest/providers/factory.js +0 -27
  452. package/dest/providers/index.d.ts +0 -5
  453. package/dest/providers/index.d.ts.map +0 -1
  454. package/dest/providers/index.js +0 -5
  455. package/dest/public/db_interfaces.d.ts.map +0 -1
  456. package/dest/public/db_interfaces.js +0 -2
  457. package/dest/public/fee_payment.d.ts +0 -11
  458. package/dest/public/fee_payment.d.ts.map +0 -1
  459. package/dest/public/fee_payment.js +0 -21
  460. package/dest/stats/index.d.ts.map +0 -1
  461. package/dest/stats/index.js +0 -2
  462. package/dest/stats/stats.d.ts.map +0 -1
  463. package/dest/stats/stats.js +0 -11
  464. package/src/avm/avm_tree.ts +0 -887
  465. package/src/avm/opcodes/multi_scalar_mul.ts +0 -121
  466. package/src/avm/serialization/bytecode_serialization.ts +0 -212
  467. package/src/client/index.ts +0 -15
  468. package/src/common.ts +0 -1
  469. package/src/providers/index.ts +0 -4
  470. package/src/public/fee_payment.ts +0 -23
  471. /package/dest/{stats → common/stats}/index.d.ts +0 -0
  472. /package/{src/stats/index.ts → dest/common/stats/index.js} +0 -0
  473. /package/dest/{acvm → private/acvm}/index.d.ts +0 -0
  474. /package/dest/{avm → public/avm}/avm_gas.d.ts +0 -0
  475. /package/dest/{avm → public/avm}/bytecode_utils.d.ts +0 -0
  476. /package/dest/{avm → public/avm}/journal/index.d.ts +0 -0
  477. /package/{src/avm/journal/index.ts → dest/public/avm/journal/index.js} +0 -0
  478. /package/dest/{avm → public/avm}/opcodes/accrued_substate.d.ts +0 -0
  479. /package/dest/{avm → public/avm}/opcodes/addressing_mode.d.ts +0 -0
  480. /package/dest/{avm → public/avm}/opcodes/arithmetic.d.ts +0 -0
  481. /package/dest/{avm → public/avm}/opcodes/bitwise.d.ts +0 -0
  482. /package/dest/{avm → public/avm}/opcodes/comparators.d.ts +0 -0
  483. /package/dest/{avm → public/avm}/opcodes/contract.d.ts +0 -0
  484. /package/dest/{avm → public/avm}/opcodes/control_flow.d.ts +0 -0
  485. /package/dest/{avm → public/avm}/opcodes/environment_getters.d.ts +0 -0
  486. /package/dest/{avm → public/avm}/opcodes/external_calls.d.ts +0 -0
  487. /package/dest/{avm → public/avm}/opcodes/index.d.ts +0 -0
  488. /package/{src/avm/opcodes/index.ts → dest/public/avm/opcodes/index.js} +0 -0
  489. /package/dest/{avm → public/avm}/opcodes/instruction_impl.d.ts +0 -0
  490. /package/dest/{avm → public/avm}/opcodes/memory.d.ts +0 -0
  491. /package/dest/{avm → public/avm}/opcodes/storage.d.ts +0 -0
  492. /package/dest/{avm → public/avm}/serialization/buffer_cursor.d.ts +0 -0
  493. /package/src/{acvm → private/acvm}/index.ts +0 -0
  494. /package/src/{avm → public/avm}/bytecode_utils.ts +0 -0
  495. /package/src/{avm → public/avm}/opcodes/.eslintrc.cjs +0 -0
  496. /package/src/{avm → public/avm}/opcodes/accrued_substate.ts +0 -0
  497. /package/src/{avm → public/avm}/opcodes/addressing_mode.ts +0 -0
  498. /package/src/{avm → public/avm}/opcodes/arithmetic.ts +0 -0
  499. /package/src/{avm → public/avm}/opcodes/bitwise.ts +0 -0
  500. /package/src/{avm → public/avm}/opcodes/comparators.ts +0 -0
  501. /package/src/{avm → public/avm}/opcodes/environment_getters.ts +0 -0
  502. /package/src/{avm → public/avm}/opcodes/instruction_impl.ts +0 -0
  503. /package/src/{avm → public/avm}/opcodes/memory.ts +0 -0
  504. /package/src/{avm → public/avm}/opcodes/storage.ts +0 -0
  505. /package/src/{avm → public/avm}/serialization/buffer_cursor.ts +0 -0
@@ -1,48 +1,52 @@
1
1
  import {
2
- type AvmProvingRequest,
3
- MerkleTreeId,
4
- type MerkleTreeReadOperations,
5
- ProvingRequestType,
6
- type PublicExecutionRequest,
7
- type SimulationError,
8
- type Tx,
9
- TxExecutionPhase,
10
- type TxHash,
11
- } from '@aztec/circuit-types';
12
- import {
13
- AvmCircuitInputs,
14
- type AvmCircuitPublicInputs,
15
- type AztecAddress,
16
- Fr,
17
- Gas,
18
- type GasSettings,
19
- type GlobalVariables,
20
2
  MAX_L2_GAS_PER_TX_PUBLIC_PORTION,
21
3
  MAX_L2_TO_L1_MSGS_PER_TX,
22
4
  MAX_NOTE_HASHES_PER_TX,
23
5
  MAX_NULLIFIERS_PER_TX,
24
6
  MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
7
+ NULLIFIER_SUBTREE_HEIGHT,
8
+ } from '@aztec/constants';
9
+ import { padArrayEnd } from '@aztec/foundation/collection';
10
+ import { Fr } from '@aztec/foundation/fields';
11
+ import { type Logger, createLogger } from '@aztec/foundation/log';
12
+ import { assertLength } from '@aztec/foundation/serialize';
13
+ import {
14
+ AvmCircuitInputs,
15
+ type AvmCircuitPublicInputs,
16
+ type AvmProvingRequest,
17
+ PublicDataWrite,
18
+ RevertCode,
19
+ } from '@aztec/stdlib/avm';
20
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
21
+ import type { SimulationError } from '@aztec/stdlib/errors';
22
+ import { computeTransactionFee } from '@aztec/stdlib/fees';
23
+ import { Gas, GasSettings } from '@aztec/stdlib/gas';
24
+ import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
25
+ import {
25
26
  PrivateToAvmAccumulatedData,
26
27
  PrivateToAvmAccumulatedDataArrayLengths,
27
28
  type PrivateToPublicAccumulatedData,
28
29
  PublicCallRequest,
29
- PublicDataWrite,
30
- RevertCode,
31
- type StateReference,
32
- TreeSnapshots,
33
- computeTransactionFee,
34
30
  countAccumulatedItems,
35
31
  mergeAccumulatedData,
36
- } from '@aztec/circuits.js';
37
- import { padArrayEnd } from '@aztec/foundation/collection';
38
- import { type Logger, createLogger } from '@aztec/foundation/log';
39
- import { assertLength } from '@aztec/foundation/serialize';
32
+ } from '@aztec/stdlib/kernel';
33
+ import { ProvingRequestType } from '@aztec/stdlib/proofs';
34
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
35
+ import {
36
+ type GlobalVariables,
37
+ type PublicExecutionRequest,
38
+ type StateReference,
39
+ TreeSnapshots,
40
+ type Tx,
41
+ TxExecutionPhase,
42
+ type TxHash,
43
+ } from '@aztec/stdlib/tx';
40
44
 
41
45
  import { strict as assert } from 'assert';
42
46
  import { inspect } from 'util';
43
47
 
44
- import { AvmPersistableStateManager } from '../avm/index.js';
45
- import { type WorldStateDB } from './public_db_sources.js';
48
+ import { AvmPersistableStateManager } from './avm/index.js';
49
+ import type { WorldStateDB } from './public_db_sources.js';
46
50
  import { SideEffectArrayLengths, SideEffectTrace } from './side_effect_trace.js';
47
51
  import { getCallRequestsByPhase, getExecutionRequestsByPhase } from './utils.js';
48
52
 
@@ -111,12 +115,7 @@ export class PublicTxContext {
111
115
  const firstNullifier = nonRevertibleAccumulatedDataFromPrivate.nullifiers[0];
112
116
 
113
117
  // Transaction level state manager that will be forked for revertible phases.
114
- const txStateManager = await AvmPersistableStateManager.create(
115
- worldStateDB,
116
- trace,
117
- doMerkleOperations,
118
- firstNullifier,
119
- );
118
+ const txStateManager = AvmPersistableStateManager.create(worldStateDB, trace, doMerkleOperations, firstNullifier);
120
119
 
121
120
  const gasSettings = tx.data.constants.txContext.gasSettings;
122
121
  const gasUsedByPrivate = tx.data.gasUsed;
@@ -149,9 +148,9 @@ export class PublicTxContext {
149
148
  * All phases have been processed.
150
149
  * Actual transaction fee and actual total consumed gas can now be queried.
151
150
  */
152
- halt() {
151
+ async halt() {
153
152
  if (this.state.isForked()) {
154
- this.state.mergeForkedState();
153
+ await this.state.mergeForkedState();
155
154
  }
156
155
  this.halted = true;
157
156
  }
@@ -325,37 +324,7 @@ export class PublicTxContext {
325
324
  */
326
325
  private async generateAvmCircuitPublicInputs(endStateReference: StateReference): Promise<AvmCircuitPublicInputs> {
327
326
  assert(this.halted, 'Can only get AvmCircuitPublicInputs after tx execution ends');
328
- const ephemeralTrees = this.state.getActiveStateManager().merkleTrees;
329
-
330
- const noteHashTree = await ephemeralTrees.getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE);
331
- const nullifierTree = await ephemeralTrees.getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE);
332
- const publicDataTree = await ephemeralTrees.getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE);
333
-
334
- // Pad the note hash and nullifier trees
335
- const paddedNoteHashTreeSize =
336
- this.startStateReference.partial.noteHashTree.nextAvailableLeafIndex + MAX_NOTE_HASHES_PER_TX;
337
- if (noteHashTree.nextAvailableLeafIndex > paddedNoteHashTreeSize) {
338
- throw new Error(
339
- `Inserted too many leaves in note hash tree: ${noteHashTree.nextAvailableLeafIndex} > ${paddedNoteHashTreeSize}`,
340
- );
341
- }
342
- noteHashTree.nextAvailableLeafIndex = paddedNoteHashTreeSize;
343
-
344
- const paddedNullifierTreeSize =
345
- this.startStateReference.partial.nullifierTree.nextAvailableLeafIndex + MAX_NULLIFIERS_PER_TX;
346
- if (nullifierTree.nextAvailableLeafIndex > paddedNullifierTreeSize) {
347
- throw new Error(
348
- `Inserted too many leaves in nullifier tree: ${nullifierTree.nextAvailableLeafIndex} > ${paddedNullifierTreeSize}`,
349
- );
350
- }
351
- nullifierTree.nextAvailableLeafIndex = paddedNullifierTreeSize;
352
-
353
- const endTreeSnapshots = new TreeSnapshots(
354
- endStateReference.l1ToL2MessageTree,
355
- noteHashTree,
356
- nullifierTree,
357
- publicDataTree,
358
- );
327
+ const stateManager = this.state.getActiveStateManager();
359
328
 
360
329
  const startTreeSnapshots = new TreeSnapshots(
361
330
  this.startStateReference.l1ToL2MessageTree,
@@ -364,6 +333,14 @@ export class PublicTxContext {
364
333
  this.startStateReference.partial.publicDataTree,
365
334
  );
366
335
 
336
+ // Will be patched/padded at the end of this fn
337
+ const endTreeSnapshots = new TreeSnapshots(
338
+ endStateReference.l1ToL2MessageTree,
339
+ endStateReference.partial.noteHashTree,
340
+ endStateReference.partial.nullifierTree,
341
+ endStateReference.partial.publicDataTree,
342
+ );
343
+
367
344
  const avmCircuitPublicInputs = this.trace.toAvmCircuitPublicInputs(
368
345
  this.globalVariables,
369
346
  startTreeSnapshots,
@@ -427,6 +404,24 @@ export class PublicTxContext {
427
404
  PublicDataWrite.empty(),
428
405
  MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
429
406
  );
407
+ const numNoteHashesToPad =
408
+ MAX_NOTE_HASHES_PER_TX - countAccumulatedItems(avmCircuitPublicInputs.accumulatedData.noteHashes);
409
+ await stateManager.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, padArrayEnd([], Fr.ZERO, numNoteHashesToPad));
410
+ const numNullifiersToPad =
411
+ MAX_NULLIFIERS_PER_TX - countAccumulatedItems(avmCircuitPublicInputs.accumulatedData.nullifiers);
412
+ await stateManager.db.batchInsert(
413
+ MerkleTreeId.NULLIFIER_TREE,
414
+ padArrayEnd([], Fr.ZERO, numNullifiersToPad).map(nullifier => nullifier.toBuffer()),
415
+ NULLIFIER_SUBTREE_HEIGHT,
416
+ );
417
+
418
+ const paddedState = await stateManager.db.getStateReference();
419
+ avmCircuitPublicInputs.endTreeSnapshots = new TreeSnapshots(
420
+ paddedState.l1ToL2MessageTree,
421
+ paddedState.partial.noteHashTree,
422
+ paddedState.partial.nullifierTree,
423
+ paddedState.partial.publicDataTree,
424
+ );
430
425
 
431
426
  return avmCircuitPublicInputs;
432
427
  }
@@ -467,10 +462,10 @@ class PhaseStateManager {
467
462
  this.log = createLogger(`simulator:public_phase_state_manager`);
468
463
  }
469
464
 
470
- fork() {
465
+ async fork() {
471
466
  assert(!this.currentlyActiveStateManager, 'Cannot fork when already forked');
472
467
  this.log.debug(`Forking phase state manager`);
473
- this.currentlyActiveStateManager = this.txStateManager.fork();
468
+ this.currentlyActiveStateManager = await this.txStateManager.fork();
474
469
  }
475
470
 
476
471
  getActiveStateManager() {
@@ -481,18 +476,18 @@ class PhaseStateManager {
481
476
  return !!this.currentlyActiveStateManager;
482
477
  }
483
478
 
484
- mergeForkedState() {
479
+ async mergeForkedState() {
485
480
  assert(this.currentlyActiveStateManager, 'No forked state to merge');
486
481
  this.log.debug(`Merging in forked state`);
487
- this.txStateManager.merge(this.currentlyActiveStateManager!);
482
+ await this.txStateManager.merge(this.currentlyActiveStateManager!);
488
483
  // Drop the forked state manager now that it is merged
489
484
  this.currentlyActiveStateManager = undefined;
490
485
  }
491
486
 
492
- discardForkedState() {
487
+ async discardForkedState() {
493
488
  this.log.debug(`Discarding forked state`);
494
489
  assert(this.currentlyActiveStateManager, 'No forked state to discard');
495
- this.txStateManager.reject(this.currentlyActiveStateManager!);
490
+ await this.txStateManager.reject(this.currentlyActiveStateManager!);
496
491
  // Drop the forked state manager. We don't want it!
497
492
  this.currentlyActiveStateManager = undefined;
498
493
  }
@@ -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';
21
- import { type AvmPersistableStateManager, AvmSimulator } from '../avm/index.js';
22
- import { NullifierCollisionError } from '../avm/journal/nullifiers.js';
23
23
  import { getPublicFunctionDebugName } from '../common/debug_fn_name.js';
24
+ import type { AvmFinalizedCallResult } from './avm/avm_contract_call_result.js';
25
+ import { type AvmPersistableStateManager, AvmSimulator } from './avm/index.js';
26
+ import { NullifierCollisionError } from './avm/journal/nullifiers.js';
24
27
  import { ExecutorMetrics } from './executor_metrics.js';
25
- import { computeFeePayerBalanceStorageSlot } from './fee_payment.js';
26
- import { type WorldStateDB } from './public_db_sources.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,6 +72,8 @@ 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> {
75
+ const startTime = process.hrtime.bigint();
76
+
73
77
  const txHash = await tx.getTxHash();
74
78
  this.log.debug(`Simulating ${tx.enqueuedPublicFunctionCalls.length} public calls for tx ${txHash}`, { txHash });
75
79
 
@@ -114,7 +118,7 @@ export class PublicTxSimulator {
114
118
  processedPhases.push(teardownResult);
115
119
  }
116
120
 
117
- context.halt();
121
+ await context.halt();
118
122
  await this.payFee(context);
119
123
 
120
124
  const endStateReference = await this.db.getStateReference();
@@ -129,15 +133,19 @@ export class PublicTxSimulator {
129
133
  // FIXME: we shouldn't need to directly modify worldStateDb here!
130
134
  await this.worldStateDB.removeNewContracts(tx, true);
131
135
  // FIXME(dbanks12): should not be changing immutable tx
132
- tx.filterRevertedLogs(tx.data.forPublic!.nonRevertibleAccumulatedData);
136
+ await tx.filterRevertedLogs();
133
137
  }
134
138
 
139
+ const endTime = process.hrtime.bigint();
140
+ this.log.debug(`Public TX simulator took ${Number(endTime - startTime) / 1_000_000} ms\n`);
141
+
135
142
  return {
136
143
  avmProvingRequest,
137
144
  gasUsed: {
138
145
  totalGas: context.getActualGasUsed(),
139
146
  teardownGas: context.teardownGasUsed,
140
147
  publicGas: context.getActualPublicGasUsed(),
148
+ billedGas: context.getTotalGasUsed(),
141
149
  },
142
150
  revertCode,
143
151
  revertReason: context.revertReason,
@@ -166,11 +174,11 @@ export class PublicTxSimulator {
166
174
 
167
175
  if (result.reverted) {
168
176
  // Drop the currently active forked state manager and rollback to end of setup.
169
- context.state.discardForkedState();
177
+ await context.state.discardForkedState();
170
178
  } else {
171
179
  if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
172
180
  // Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
173
- context.state.mergeForkedState();
181
+ await context.state.mergeForkedState();
174
182
  }
175
183
  }
176
184
 
@@ -186,17 +194,17 @@ export class PublicTxSimulator {
186
194
  if (!context.state.isForked()) {
187
195
  // If state isn't forked (app logic reverted), fork now
188
196
  // so we can rollback to the end of setup if teardown reverts.
189
- context.state.fork();
197
+ await context.state.fork();
190
198
  }
191
199
 
192
200
  const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
193
201
 
194
202
  if (result.reverted) {
195
203
  // Drop the currently active forked state manager and rollback to end of setup.
196
- context.state.discardForkedState();
204
+ await context.state.discardForkedState();
197
205
  } else {
198
206
  // Merge state updates from teardown,
199
- context.state.mergeForkedState();
207
+ await context.state.mergeForkedState();
200
208
  }
201
209
 
202
210
  return result;
@@ -395,7 +403,7 @@ export class PublicTxSimulator {
395
403
  */
396
404
  public async insertRevertiblesFromPrivate(context: PublicTxContext) {
397
405
  // Fork the state manager so we can rollback to end of setup if app logic reverts.
398
- context.state.fork();
406
+ await context.state.fork();
399
407
  const stateManager = context.state.getActiveStateManager();
400
408
  try {
401
409
  await stateManager.writeSiloedNullifiersFromPrivate(context.revertibleAccumulatedDataFromPrivate.nullifiers);
@@ -433,7 +441,7 @@ export class PublicTxSimulator {
433
441
  // When mocking the balance of the fee payer, the circuit should not be able to prove the simulation
434
442
 
435
443
  if (currentBalance.lt(txFee)) {
436
- if (this.enforceFeePayment) {
444
+ if (!this.skipFeeEnforcement) {
437
445
  throw new Error(
438
446
  `Not enough balance for fee payer to pay for transaction (got ${currentBalance.toBigInt()} needs ${txFee.toBigInt()})`,
439
447
  );
@@ -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,22 +166,10 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
168
166
  }
169
167
 
170
168
  private mergeHints(forkedTrace: this) {
171
- this.gotBytecodeFromClassIds.acceptAndMerge(forkedTrace.gotBytecodeFromClassIds);
172
-
169
+ this.uniqueClassIds.acceptAndMerge(forkedTrace.uniqueClassIds);
173
170
  this.avmCircuitHints.enqueuedCalls.items.push(...forkedTrace.avmCircuitHints.enqueuedCalls.items);
174
-
175
171
  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
-
172
+ this.avmCircuitHints.contractClasses.items.push(...forkedTrace.avmCircuitHints.contractClasses.items);
187
173
  this.avmCircuitHints.publicDataReads.items.push(...forkedTrace.avmCircuitHints.publicDataReads.items);
188
174
  this.avmCircuitHints.publicDataWrites.items.push(...forkedTrace.avmCircuitHints.publicDataWrites.items);
189
175
  this.avmCircuitHints.nullifierReads.items.push(...forkedTrace.avmCircuitHints.nullifierReads.items);
@@ -371,114 +357,55 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
371
357
  contractAddress: AztecAddress,
372
358
  exists: boolean,
373
359
  instance: SerializableContractInstance = SerializableContractInstance.default(),
374
- lowLeafPreimage: NullifierLeafPreimage = NullifierLeafPreimage.empty(),
375
- lowLeafIndex: Fr = Fr.zero(),
376
- lowLeafPath: Fr[] = emptyNullifierPath(),
360
+ updateMembershipHint: AvmPublicDataReadTreeHint = AvmPublicDataReadTreeHint.empty(),
361
+ updatePreimage: Fr[] = [],
377
362
  ) {
378
- const membershipHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
379
363
  this.avmCircuitHints.contractInstances.items.push(
380
364
  new AvmContractInstanceHint(
381
365
  contractAddress,
382
366
  exists,
383
367
  instance.salt,
384
368
  instance.deployer,
385
- instance.contractClassId,
369
+ instance.currentContractClassId,
370
+ instance.originalContractClassId,
386
371
  instance.initializationHash,
387
372
  instance.publicKeys,
388
- membershipHint,
373
+ updateMembershipHint,
374
+ updatePreimage,
389
375
  ),
390
376
  );
391
377
  this.log.trace(`Tracing contract instance retrieval (counter=${this.sideEffectCounter})`);
392
378
  this.incrementSideEffectCounter();
393
379
  }
394
380
 
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
-
381
+ public traceGetContractClass(contractClassId: Fr, exists: boolean, contractClass?: ContractClassWithCommitment) {
440
382
  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`,
383
+ this.avmCircuitHints.contractClasses.items.push(
384
+ new AvmContractClassHint(contractClassId, exists, Fr.zero(), Fr.zero(), Fr.zero(), Buffer.alloc(0)),
453
385
  );
454
- return;
455
- }
386
+ } else if (!this.uniqueClassIds.has(contractClassId.toString())) {
387
+ if (this.uniqueClassIds.size() >= MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS) {
388
+ this.log.debug(`Bytecode retrieval failure for contract class ID ${contractClassId} (limit reached)`);
389
+ throw new SideEffectLimitReachedError(
390
+ 'contract calls to unique class IDs',
391
+ MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
392
+ );
393
+ }
456
394
 
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)`,
395
+ this.uniqueClassIds.add(contractClassId.toString());
396
+ this.avmCircuitHints.contractClasses.items.push(
397
+ new AvmContractClassHint(
398
+ contractClassId,
399
+ exists,
400
+ contractClass!.artifactHash,
401
+ contractClass!.privateFunctionsRoot,
402
+ contractClass!.publicBytecodeCommitment,
403
+ contractClass!.packedBytecode,
404
+ ),
467
405
  );
468
- throw new SideEffectLimitReachedError(
469
- 'contract calls to unique class IDs',
470
- MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
471
- );
472
- }
473
406
 
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());
407
+ this.incrementSideEffectCounter();
408
+ }
482
409
  }
483
410
 
484
411
  /**