@aztec/simulator 0.0.0-test.0

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 (367) hide show
  1. package/README.md +49 -0
  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/common/db_interfaces.d.ts +80 -0
  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 +5 -0
  9. package/dest/common/debug_fn_name.d.ts.map +1 -0
  10. package/dest/common/debug_fn_name.js +6 -0
  11. package/dest/common/errors.d.ts +54 -0
  12. package/dest/common/errors.d.ts.map +1 -0
  13. package/dest/common/errors.js +135 -0
  14. package/dest/common/index.d.ts +4 -0
  15. package/dest/common/index.d.ts.map +1 -0
  16. package/dest/common/index.js +3 -0
  17. package/dest/common/message_load_oracle_inputs.d.ts +15 -0
  18. package/dest/common/message_load_oracle_inputs.d.ts.map +1 -0
  19. package/dest/common/message_load_oracle_inputs.js +15 -0
  20. package/dest/common/stats/index.d.ts +2 -0
  21. package/dest/common/stats/index.d.ts.map +1 -0
  22. package/dest/common/stats/index.js +1 -0
  23. package/dest/common/stats/stats.d.ts +4 -0
  24. package/dest/common/stats/stats.d.ts.map +1 -0
  25. package/dest/common/stats/stats.js +10 -0
  26. package/dest/private/acvm/acvm.d.ts +35 -0
  27. package/dest/private/acvm/acvm.d.ts.map +1 -0
  28. package/dest/private/acvm/acvm.js +70 -0
  29. package/dest/private/acvm/acvm_types.d.ts +10 -0
  30. package/dest/private/acvm/acvm_types.d.ts.map +1 -0
  31. package/dest/private/acvm/acvm_types.js +3 -0
  32. package/dest/private/acvm/deserialize.d.ts +36 -0
  33. package/dest/private/acvm/deserialize.d.ts.map +1 -0
  34. package/dest/private/acvm/deserialize.js +42 -0
  35. package/dest/private/acvm/index.d.ts +6 -0
  36. package/dest/private/acvm/index.d.ts.map +1 -0
  37. package/dest/private/acvm/index.js +5 -0
  38. package/dest/private/acvm/oracle/index.d.ts +14 -0
  39. package/dest/private/acvm/oracle/index.d.ts.map +1 -0
  40. package/dest/private/acvm/oracle/index.js +2 -0
  41. package/dest/private/acvm/oracle/oracle.d.ts +49 -0
  42. package/dest/private/acvm/oracle/oracle.d.ts.map +1 -0
  43. package/dest/private/acvm/oracle/oracle.js +263 -0
  44. package/dest/private/acvm/oracle/typed_oracle.d.ts +83 -0
  45. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -0
  46. package/dest/private/acvm/oracle/typed_oracle.js +132 -0
  47. package/dest/private/acvm/serialize.d.ts +24 -0
  48. package/dest/private/acvm/serialize.d.ts.map +1 -0
  49. package/dest/private/acvm/serialize.js +46 -0
  50. package/dest/private/execution_data_provider.d.ts +261 -0
  51. package/dest/private/execution_data_provider.d.ts.map +1 -0
  52. package/dest/private/execution_data_provider.js +14 -0
  53. package/dest/private/execution_note_cache.d.ts +93 -0
  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/private/hashed_values_cache.d.ts +28 -0
  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/private/pick_notes.d.ts +85 -0
  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 +25 -0
  66. package/dest/private/private_execution.d.ts.map +1 -0
  67. package/dest/private/private_execution.js +92 -0
  68. package/dest/private/private_execution_oracle.d.ts +215 -0
  69. package/dest/private/private_execution_oracle.d.ts.map +1 -0
  70. package/dest/private/private_execution_oracle.js +382 -0
  71. package/dest/private/providers/acvm_native.d.ts +40 -0
  72. package/dest/private/providers/acvm_native.d.ts.map +1 -0
  73. package/dest/private/providers/acvm_native.js +139 -0
  74. package/dest/private/providers/acvm_wasm.d.ts +15 -0
  75. package/dest/private/providers/acvm_wasm.d.ts.map +1 -0
  76. package/dest/private/providers/acvm_wasm.js +62 -0
  77. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +19 -0
  78. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +1 -0
  79. package/dest/private/providers/acvm_wasm_with_blobs.js +32 -0
  80. package/dest/private/providers/factory.d.ts +12 -0
  81. package/dest/private/providers/factory.d.ts.map +1 -0
  82. package/dest/private/providers/factory.js +27 -0
  83. package/dest/private/providers/simulation_provider.d.ts +19 -0
  84. package/dest/private/providers/simulation_provider.d.ts.map +1 -0
  85. package/dest/private/providers/simulation_provider.js +24 -0
  86. package/dest/private/simulator.d.ts +34 -0
  87. package/dest/private/simulator.d.ts.map +1 -0
  88. package/dest/private/simulator.js +76 -0
  89. package/dest/private/unconstrained_execution.d.ts +10 -0
  90. package/dest/private/unconstrained_execution.d.ts.map +1 -0
  91. package/dest/private/unconstrained_execution.js +27 -0
  92. package/dest/private/unconstrained_execution_oracle.d.ts +161 -0
  93. package/dest/private/unconstrained_execution_oracle.d.ts.map +1 -0
  94. package/dest/private/unconstrained_execution_oracle.js +258 -0
  95. package/dest/public/avm/avm_context.d.ts +41 -0
  96. package/dest/public/avm/avm_context.d.ts.map +1 -0
  97. package/dest/public/avm/avm_context.js +44 -0
  98. package/dest/public/avm/avm_contract_call_result.d.ts +30 -0
  99. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -0
  100. package/dest/public/avm/avm_contract_call_result.js +50 -0
  101. package/dest/public/avm/avm_execution_environment.d.ts +21 -0
  102. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -0
  103. package/dest/public/avm/avm_execution_environment.js +31 -0
  104. package/dest/public/avm/avm_gas.d.ts +60 -0
  105. package/dest/public/avm/avm_gas.d.ts.map +1 -0
  106. package/dest/public/avm/avm_gas.js +203 -0
  107. package/dest/public/avm/avm_machine_state.d.ts +95 -0
  108. package/dest/public/avm/avm_machine_state.d.ts.map +1 -0
  109. package/dest/public/avm/avm_machine_state.js +107 -0
  110. package/dest/public/avm/avm_memory_types.d.ts +264 -0
  111. package/dest/public/avm/avm_memory_types.d.ts.map +1 -0
  112. package/dest/public/avm/avm_memory_types.js +340 -0
  113. package/dest/public/avm/avm_simulator.d.ts +40 -0
  114. package/dest/public/avm/avm_simulator.d.ts.map +1 -0
  115. package/dest/public/avm/avm_simulator.js +202 -0
  116. package/dest/public/avm/bytecode_utils.d.ts +5 -0
  117. package/dest/public/avm/bytecode_utils.d.ts.map +1 -0
  118. package/dest/public/avm/bytecode_utils.js +17 -0
  119. package/dest/public/avm/errors.d.ts +122 -0
  120. package/dest/public/avm/errors.d.ts.map +1 -0
  121. package/dest/public/avm/errors.js +179 -0
  122. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +21 -0
  123. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
  124. package/dest/public/avm/fixtures/avm_simulation_tester.js +76 -0
  125. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +36 -0
  126. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
  127. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +83 -0
  128. package/dest/public/avm/fixtures/index.d.ts +84 -0
  129. package/dest/public/avm/fixtures/index.d.ts.map +1 -0
  130. package/dest/public/avm/fixtures/index.js +175 -0
  131. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +35 -0
  132. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
  133. package/dest/public/avm/fixtures/simple_contract_data_source.js +74 -0
  134. package/dest/public/avm/index.d.ts +4 -0
  135. package/dest/public/avm/index.d.ts.map +1 -0
  136. package/dest/public/avm/index.js +3 -0
  137. package/dest/public/avm/journal/index.d.ts +2 -0
  138. package/dest/public/avm/journal/index.d.ts.map +1 -0
  139. package/dest/public/avm/journal/index.js +1 -0
  140. package/dest/public/avm/journal/journal.d.ts +209 -0
  141. package/dest/public/avm/journal/journal.d.ts.map +1 -0
  142. package/dest/public/avm/journal/journal.js +486 -0
  143. package/dest/public/avm/journal/nullifiers.d.ts +64 -0
  144. package/dest/public/avm/journal/nullifiers.d.ts.map +1 -0
  145. package/dest/public/avm/journal/nullifiers.js +97 -0
  146. package/dest/public/avm/journal/public_storage.d.ts +66 -0
  147. package/dest/public/avm/journal/public_storage.d.ts.map +1 -0
  148. package/dest/public/avm/journal/public_storage.js +145 -0
  149. package/dest/public/avm/opcodes/accrued_substate.d.ts +75 -0
  150. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -0
  151. package/dest/public/avm/opcodes/accrued_substate.js +252 -0
  152. package/dest/public/avm/opcodes/addressing_mode.d.ts +27 -0
  153. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -0
  154. package/dest/public/avm/opcodes/addressing_mode.js +74 -0
  155. package/dest/public/avm/opcodes/arithmetic.d.ts +37 -0
  156. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -0
  157. package/dest/public/avm/opcodes/arithmetic.js +73 -0
  158. package/dest/public/avm/opcodes/bitwise.d.ts +50 -0
  159. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -0
  160. package/dest/public/avm/opcodes/bitwise.js +106 -0
  161. package/dest/public/avm/opcodes/comparators.d.ts +25 -0
  162. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -0
  163. package/dest/public/avm/opcodes/comparators.js +43 -0
  164. package/dest/public/avm/opcodes/contract.d.ts +21 -0
  165. package/dest/public/avm/opcodes/contract.d.ts.map +1 -0
  166. package/dest/public/avm/opcodes/contract.js +66 -0
  167. package/dest/public/avm/opcodes/control_flow.d.ts +41 -0
  168. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -0
  169. package/dest/public/avm/opcodes/control_flow.js +105 -0
  170. package/dest/public/avm/opcodes/conversion.d.ts +17 -0
  171. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -0
  172. package/dest/public/avm/opcodes/conversion.js +69 -0
  173. package/dest/public/avm/opcodes/ec_add.d.ts +19 -0
  174. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -0
  175. package/dest/public/avm/opcodes/ec_add.js +84 -0
  176. package/dest/public/avm/opcodes/environment_getters.d.ts +28 -0
  177. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -0
  178. package/dest/public/avm/opcodes/environment_getters.js +79 -0
  179. package/dest/public/avm/opcodes/external_calls.d.ts +58 -0
  180. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -0
  181. package/dest/public/avm/opcodes/external_calls.js +204 -0
  182. package/dest/public/avm/opcodes/hashing.d.ts +36 -0
  183. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -0
  184. package/dest/public/avm/opcodes/hashing.js +114 -0
  185. package/dest/public/avm/opcodes/index.d.ts +16 -0
  186. package/dest/public/avm/opcodes/index.d.ts.map +1 -0
  187. package/dest/public/avm/opcodes/index.js +15 -0
  188. package/dest/public/avm/opcodes/instruction.d.ts +70 -0
  189. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -0
  190. package/dest/public/avm/opcodes/instruction.js +91 -0
  191. package/dest/public/avm/opcodes/instruction_impl.d.ts +19 -0
  192. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -0
  193. package/dest/public/avm/opcodes/instruction_impl.js +30 -0
  194. package/dest/public/avm/opcodes/memory.d.ts +74 -0
  195. package/dest/public/avm/opcodes/memory.d.ts.map +1 -0
  196. package/dest/public/avm/opcodes/memory.js +253 -0
  197. package/dest/public/avm/opcodes/misc.d.ts +17 -0
  198. package/dest/public/avm/opcodes/misc.d.ts.map +1 -0
  199. package/dest/public/avm/opcodes/misc.js +48 -0
  200. package/dest/public/avm/opcodes/storage.d.ts +24 -0
  201. package/dest/public/avm/opcodes/storage.d.ts.map +1 -0
  202. package/dest/public/avm/opcodes/storage.js +66 -0
  203. package/dest/public/avm/serialization/buffer_cursor.d.ts +28 -0
  204. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -0
  205. package/dest/public/avm/serialization/buffer_cursor.js +99 -0
  206. package/dest/public/avm/serialization/bytecode_serialization.d.ts +21 -0
  207. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -0
  208. package/dest/public/avm/serialization/bytecode_serialization.js +332 -0
  209. package/dest/public/avm/serialization/instruction_serialization.d.ts +105 -0
  210. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -0
  211. package/dest/public/avm/serialization/instruction_serialization.js +226 -0
  212. package/dest/public/avm/test_utils.d.ts +18 -0
  213. package/dest/public/avm/test_utils.d.ts.map +1 -0
  214. package/dest/public/avm/test_utils.js +52 -0
  215. package/dest/public/bytecode_errors.d.ts +4 -0
  216. package/dest/public/bytecode_errors.d.ts.map +1 -0
  217. package/dest/public/bytecode_errors.js +6 -0
  218. package/dest/public/execution.d.ts +108 -0
  219. package/dest/public/execution.d.ts.map +1 -0
  220. package/dest/public/execution.js +9 -0
  221. package/dest/public/executor_metrics.d.ts +13 -0
  222. package/dest/public/executor_metrics.d.ts.map +1 -0
  223. package/dest/public/executor_metrics.js +54 -0
  224. package/dest/public/fixtures/index.d.ts +3 -0
  225. package/dest/public/fixtures/index.d.ts.map +1 -0
  226. package/dest/public/fixtures/index.js +2 -0
  227. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +32 -0
  228. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -0
  229. package/dest/public/fixtures/public_tx_simulation_tester.js +93 -0
  230. package/dest/public/fixtures/utils.d.ts +13 -0
  231. package/dest/public/fixtures/utils.d.ts.map +1 -0
  232. package/dest/public/fixtures/utils.js +126 -0
  233. package/dest/public/index.d.ts +10 -0
  234. package/dest/public/index.d.ts.map +1 -0
  235. package/dest/public/index.js +8 -0
  236. package/dest/public/public_db_sources.d.ts +129 -0
  237. package/dest/public/public_db_sources.d.ts.map +1 -0
  238. package/dest/public/public_db_sources.js +264 -0
  239. package/dest/public/public_processor/public_processor.d.ts +74 -0
  240. package/dest/public/public_processor/public_processor.d.ts.map +1 -0
  241. package/dest/public/public_processor/public_processor.js +379 -0
  242. package/dest/public/public_processor/public_processor_metrics.d.ts +27 -0
  243. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -0
  244. package/dest/public/public_processor/public_processor_metrics.js +125 -0
  245. package/dest/public/public_tx_simulator/public_tx_context.d.ts +137 -0
  246. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -0
  247. package/dest/public/public_tx_simulator/public_tx_context.js +320 -0
  248. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +102 -0
  249. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -0
  250. package/dest/public/public_tx_simulator/public_tx_simulator.js +334 -0
  251. package/dest/public/side_effect_errors.d.ts +4 -0
  252. package/dest/public/side_effect_errors.d.ts.map +1 -0
  253. package/dest/public/side_effect_errors.js +6 -0
  254. package/dest/public/side_effect_trace.d.ts +132 -0
  255. package/dest/public/side_effect_trace.d.ts.map +1 -0
  256. package/dest/public/side_effect_trace.js +249 -0
  257. package/dest/public/side_effect_trace_interface.d.ts +34 -0
  258. package/dest/public/side_effect_trace_interface.d.ts.map +1 -0
  259. package/dest/public/side_effect_trace_interface.js +1 -0
  260. package/dest/public/tx_contract_cache.d.ts +41 -0
  261. package/dest/public/tx_contract_cache.d.ts.map +1 -0
  262. package/dest/public/tx_contract_cache.js +49 -0
  263. package/dest/public/unique_class_ids.d.ts +37 -0
  264. package/dest/public/unique_class_ids.d.ts.map +1 -0
  265. package/dest/public/unique_class_ids.js +61 -0
  266. package/dest/public/utils.d.ts +5 -0
  267. package/dest/public/utils.d.ts.map +1 -0
  268. package/dest/public/utils.js +35 -0
  269. package/dest/server.d.ts +6 -0
  270. package/dest/server.d.ts.map +1 -0
  271. package/dest/server.js +4 -0
  272. package/dest/test/utils.d.ts +13 -0
  273. package/dest/test/utils.d.ts.map +1 -0
  274. package/dest/test/utils.js +22 -0
  275. package/package.json +104 -0
  276. package/src/client.ts +4 -0
  277. package/src/common/db_interfaces.ts +94 -0
  278. package/src/common/debug_fn_name.ts +18 -0
  279. package/src/common/errors.ts +183 -0
  280. package/src/common/index.ts +3 -0
  281. package/src/common/message_load_oracle_inputs.ts +15 -0
  282. package/src/common/stats/index.ts +1 -0
  283. package/src/common/stats/stats.ts +20 -0
  284. package/src/private/acvm/acvm.ts +127 -0
  285. package/src/private/acvm/acvm_types.ts +11 -0
  286. package/src/private/acvm/deserialize.ts +52 -0
  287. package/src/private/acvm/index.ts +5 -0
  288. package/src/private/acvm/oracle/index.ts +16 -0
  289. package/src/private/acvm/oracle/oracle.ts +455 -0
  290. package/src/private/acvm/oracle/typed_oracle.ts +259 -0
  291. package/src/private/acvm/serialize.ts +60 -0
  292. package/src/private/execution_data_provider.ts +323 -0
  293. package/src/private/execution_note_cache.ts +217 -0
  294. package/src/private/hashed_values_cache.ts +55 -0
  295. package/src/private/index.ts +16 -0
  296. package/src/private/pick_notes.ts +141 -0
  297. package/src/private/private_execution.ts +151 -0
  298. package/src/private/private_execution_oracle.ts +614 -0
  299. package/src/private/providers/acvm_native.ts +171 -0
  300. package/src/private/providers/acvm_wasm.ts +63 -0
  301. package/src/private/providers/acvm_wasm_with_blobs.ts +50 -0
  302. package/src/private/providers/factory.ts +38 -0
  303. package/src/private/providers/simulation_provider.ts +45 -0
  304. package/src/private/simulator.ts +147 -0
  305. package/src/private/unconstrained_execution.ts +50 -0
  306. package/src/private/unconstrained_execution_oracle.ts +373 -0
  307. package/src/public/avm/avm_context.ts +61 -0
  308. package/src/public/avm/avm_contract_call_result.ts +55 -0
  309. package/src/public/avm/avm_execution_environment.ts +39 -0
  310. package/src/public/avm/avm_gas.ts +195 -0
  311. package/src/public/avm/avm_machine_state.ts +164 -0
  312. package/src/public/avm/avm_memory_types.ts +423 -0
  313. package/src/public/avm/avm_simulator.ts +284 -0
  314. package/src/public/avm/bytecode_utils.ts +17 -0
  315. package/src/public/avm/errors.ts +232 -0
  316. package/src/public/avm/fixtures/avm_simulation_tester.ts +105 -0
  317. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +109 -0
  318. package/src/public/avm/fixtures/index.ts +296 -0
  319. package/src/public/avm/fixtures/simple_contract_data_source.ts +105 -0
  320. package/src/public/avm/index.ts +3 -0
  321. package/src/public/avm/journal/index.ts +1 -0
  322. package/src/public/avm/journal/journal.ts +742 -0
  323. package/src/public/avm/journal/nullifiers.ts +109 -0
  324. package/src/public/avm/journal/public_storage.ts +174 -0
  325. package/src/public/avm/opcodes/.eslintrc.cjs +8 -0
  326. package/src/public/avm/opcodes/accrued_substate.ts +253 -0
  327. package/src/public/avm/opcodes/addressing_mode.ts +87 -0
  328. package/src/public/avm/opcodes/arithmetic.ts +95 -0
  329. package/src/public/avm/opcodes/bitwise.ts +109 -0
  330. package/src/public/avm/opcodes/comparators.ts +52 -0
  331. package/src/public/avm/opcodes/contract.ts +72 -0
  332. package/src/public/avm/opcodes/control_flow.ts +114 -0
  333. package/src/public/avm/opcodes/conversion.ts +80 -0
  334. package/src/public/avm/opcodes/ec_add.ts +93 -0
  335. package/src/public/avm/opcodes/environment_getters.ts +82 -0
  336. package/src/public/avm/opcodes/external_calls.ts +228 -0
  337. package/src/public/avm/opcodes/hashing.ts +125 -0
  338. package/src/public/avm/opcodes/index.ts +15 -0
  339. package/src/public/avm/opcodes/instruction.ts +126 -0
  340. package/src/public/avm/opcodes/instruction_impl.ts +36 -0
  341. package/src/public/avm/opcodes/memory.ts +254 -0
  342. package/src/public/avm/opcodes/misc.ts +60 -0
  343. package/src/public/avm/opcodes/storage.ts +71 -0
  344. package/src/public/avm/serialization/buffer_cursor.ts +115 -0
  345. package/src/public/avm/serialization/bytecode_serialization.ts +206 -0
  346. package/src/public/avm/serialization/instruction_serialization.ts +208 -0
  347. package/src/public/avm/test_utils.ts +81 -0
  348. package/src/public/bytecode_errors.ts +6 -0
  349. package/src/public/execution.ts +140 -0
  350. package/src/public/executor_metrics.ts +71 -0
  351. package/src/public/fixtures/index.ts +2 -0
  352. package/src/public/fixtures/public_tx_simulation_tester.ts +179 -0
  353. package/src/public/fixtures/utils.ts +199 -0
  354. package/src/public/index.ts +9 -0
  355. package/src/public/public_db_sources.ts +369 -0
  356. package/src/public/public_processor/public_processor.ts +521 -0
  357. package/src/public/public_processor/public_processor_metrics.ts +154 -0
  358. package/src/public/public_tx_simulator/public_tx_context.ts +504 -0
  359. package/src/public/public_tx_simulator/public_tx_simulator.ts +474 -0
  360. package/src/public/side_effect_errors.ts +6 -0
  361. package/src/public/side_effect_trace.ts +516 -0
  362. package/src/public/side_effect_trace_interface.ts +76 -0
  363. package/src/public/tx_contract_cache.ts +69 -0
  364. package/src/public/unique_class_ids.ts +80 -0
  365. package/src/public/utils.ts +32 -0
  366. package/src/server.ts +5 -0
  367. package/src/test/utils.ts +36 -0
@@ -0,0 +1,171 @@
1
+ import { runInDirectory } from '@aztec/foundation/fs';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { Timer } from '@aztec/foundation/timer';
4
+ import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
5
+
6
+ import type { WitnessMap } from '@noir-lang/types';
7
+ import * as proc from 'child_process';
8
+ import { promises as fs } from 'fs';
9
+
10
+ import type { ACIRCallback, ACIRExecutionResult } from '../acvm/acvm.js';
11
+ import type { ACVMWitness } from '../acvm/acvm_types.js';
12
+ import type { SimulationProvider } from './simulation_provider.js';
13
+
14
+ const logger = createLogger('simulator:acvm-native');
15
+
16
+ export enum ACVM_RESULT {
17
+ SUCCESS,
18
+ FAILURE,
19
+ }
20
+
21
+ export type ACVMSuccess = {
22
+ status: ACVM_RESULT.SUCCESS;
23
+ duration: number;
24
+ witness: Map<number, string>;
25
+ };
26
+
27
+ export type ACVMFailure = {
28
+ status: ACVM_RESULT.FAILURE;
29
+ reason: string;
30
+ };
31
+
32
+ export type ACVMResult = ACVMSuccess | ACVMFailure;
33
+
34
+ /**
35
+ * Parses a TOML format witness map string into a Map structure
36
+ * @param outputString - The witness map in TOML format
37
+ * @returns The parsed witness map
38
+ */
39
+ function parseIntoWitnessMap(outputString: string) {
40
+ const lines = outputString.split('\n');
41
+ return new Map<number, string>(
42
+ lines
43
+ .filter((line: string) => line.length)
44
+ .map((line: string) => {
45
+ const pair = line.replaceAll(' ', '').split('=');
46
+ return [Number(pair[0]), pair[1].replaceAll('"', '')];
47
+ }),
48
+ );
49
+ }
50
+
51
+ /**
52
+ *
53
+ * @param inputWitness - The circuit's input witness
54
+ * @param bytecode - The circuit bytecode
55
+ * @param workingDirectory - A directory to use for temporary files by the ACVM
56
+ * @param pathToAcvm - The path to the ACVM binary
57
+ * @param outputFilename - If specified, the output will be stored as a file, encoded using Bincode
58
+ * @returns The completed partial witness outputted from the circuit
59
+ */
60
+ export async function executeNativeCircuit(
61
+ inputWitness: WitnessMap,
62
+ bytecode: Buffer,
63
+ workingDirectory: string,
64
+ pathToAcvm: string,
65
+ outputFilename?: string,
66
+ ): Promise<ACVMResult> {
67
+ const bytecodeFilename = 'bytecode';
68
+ const witnessFilename = 'input_witness.toml';
69
+
70
+ // convert the witness map to TOML format
71
+ let witnessMap = '';
72
+ inputWitness.forEach((value: string, key: number) => {
73
+ witnessMap = witnessMap.concat(`${key} = '${value}'\n`);
74
+ });
75
+
76
+ try {
77
+ // Check that the directory exists
78
+ await fs.access(workingDirectory);
79
+ } catch (error) {
80
+ return { status: ACVM_RESULT.FAILURE, reason: `Working directory ${workingDirectory} does not exist` };
81
+ }
82
+
83
+ try {
84
+ // Write the bytecode and input witness to the working directory
85
+ await fs.writeFile(`${workingDirectory}/${bytecodeFilename}`, bytecode);
86
+ await fs.writeFile(`${workingDirectory}/${witnessFilename}`, witnessMap);
87
+
88
+ // Execute the ACVM using the given args
89
+ const args = [
90
+ `execute`,
91
+ `--working-directory`,
92
+ `${workingDirectory}`,
93
+ `--bytecode`,
94
+ `${bytecodeFilename}`,
95
+ `--input-witness`,
96
+ `${witnessFilename}`,
97
+ '--print',
98
+ '--output-witness',
99
+ 'output-witness',
100
+ ];
101
+
102
+ logger.debug(`Calling ACVM with ${args.join(' ')}`);
103
+
104
+ const processPromise = new Promise<string>((resolve, reject) => {
105
+ let outputWitness = Buffer.alloc(0);
106
+ let errorBuffer = Buffer.alloc(0);
107
+ const acvm = proc.spawn(pathToAcvm, args);
108
+ acvm.stdout.on('data', data => {
109
+ outputWitness = Buffer.concat([outputWitness, data]);
110
+ });
111
+ acvm.stderr.on('data', data => {
112
+ errorBuffer = Buffer.concat([errorBuffer, data]);
113
+ });
114
+ acvm.on('close', code => {
115
+ if (code === 0) {
116
+ resolve(outputWitness.toString('utf-8'));
117
+ } else {
118
+ logger.error(`From ACVM: ${errorBuffer.toString('utf-8')}`);
119
+ reject(errorBuffer.toString('utf-8'));
120
+ }
121
+ });
122
+ });
123
+
124
+ const duration = new Timer();
125
+ const output = await processPromise;
126
+ if (outputFilename) {
127
+ const outputWitnessFileName = `${workingDirectory}/output-witness.gz`;
128
+ await fs.copyFile(outputWitnessFileName, outputFilename);
129
+ }
130
+ const witness = parseIntoWitnessMap(output);
131
+ return { status: ACVM_RESULT.SUCCESS, witness, duration: duration.ms() };
132
+ } catch (error) {
133
+ return { status: ACVM_RESULT.FAILURE, reason: `${error}` };
134
+ }
135
+ }
136
+
137
+ export class NativeACVMSimulator implements SimulationProvider {
138
+ constructor(private workingDirectory: string, private pathToAcvm: string, private witnessFilename?: string) {}
139
+ async executeProtocolCircuit(input: WitnessMap, compiledCircuit: NoirCompiledCircuit): Promise<WitnessMap> {
140
+ // Execute the circuit on those initial witness values
141
+
142
+ const operation = async (directory: string) => {
143
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
144
+ const decodedBytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
145
+ // Execute the circuit
146
+ const result = await executeNativeCircuit(
147
+ input,
148
+ decodedBytecode,
149
+ directory,
150
+ this.pathToAcvm,
151
+ this.witnessFilename,
152
+ );
153
+
154
+ if (result.status == ACVM_RESULT.FAILURE) {
155
+ throw new Error(`Failed to generate witness: ${result.reason}`);
156
+ }
157
+
158
+ return result.witness;
159
+ };
160
+
161
+ return await runInDirectory(this.workingDirectory, operation, false, logger);
162
+ }
163
+
164
+ executeUserCircuit(
165
+ _acir: Buffer,
166
+ _initialWitness: ACVMWitness,
167
+ _callback: ACIRCallback,
168
+ ): Promise<ACIRExecutionResult> {
169
+ throw new Error('Not implemented');
170
+ }
171
+ }
@@ -0,0 +1,63 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { foreignCallHandler } from '@aztec/noir-protocol-circuits-types/client';
3
+ import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
4
+
5
+ import initACVM, { type ExecutionError, executeCircuit } from '@noir-lang/acvm_js';
6
+ import initAbi from '@noir-lang/noirc_abi';
7
+ import type { WitnessMap } from '@noir-lang/types';
8
+
9
+ import { type ACIRCallback, acvm } from '../acvm/acvm.js';
10
+ import type { ACVMWitness } from '../acvm/acvm_types.js';
11
+ import { type SimulationProvider, parseErrorPayload } from './simulation_provider.js';
12
+
13
+ export class WASMSimulator implements SimulationProvider {
14
+ constructor(protected log = createLogger('wasm-simulator')) {}
15
+
16
+ async init(): Promise<void> {
17
+ // If these are available, then we are in the
18
+ // web environment. For the node environment, this
19
+ // is a no-op.
20
+ if (typeof initAbi === 'function') {
21
+ /** @ts-expect-error The node bundle doesn't include these default imports, so TS complains */
22
+ await Promise.all([initAbi(), initACVM()]);
23
+ }
24
+ }
25
+
26
+ async executeProtocolCircuit(input: WitnessMap, compiledCircuit: NoirCompiledCircuit): Promise<WitnessMap> {
27
+ this.log.debug('init', { hash: compiledCircuit.hash });
28
+ await this.init();
29
+ // Execute the circuit on those initial witness values
30
+ //
31
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
32
+ const decodedBytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
33
+ //
34
+ // Execute the circuit
35
+ try {
36
+ const _witnessMap = await executeCircuit(
37
+ decodedBytecode,
38
+ input,
39
+ foreignCallHandler, // handle calls to debug_log
40
+ );
41
+ this.log.debug('execution successful', { hash: compiledCircuit.hash });
42
+ return _witnessMap;
43
+ } catch (err) {
44
+ // Typescript types catched errors as unknown or any, so we need to narrow its type to check if it has raw assertion payload.
45
+ if (typeof err === 'object' && err !== null && 'rawAssertionPayload' in err) {
46
+ const parsed = parseErrorPayload(compiledCircuit.abi, err as ExecutionError);
47
+ this.log.debug('execution failed', {
48
+ hash: compiledCircuit.hash,
49
+ error: parsed,
50
+ message: parsed.message,
51
+ });
52
+ throw parsed;
53
+ }
54
+ this.log.debug('execution failed', { hash: compiledCircuit.hash, error: err });
55
+ throw new Error(`Circuit execution failed: ${err}`);
56
+ }
57
+ }
58
+
59
+ async executeUserCircuit(acir: Buffer, initialWitness: ACVMWitness, callback: ACIRCallback) {
60
+ await this.init();
61
+ return acvm(acir, initialWitness, callback);
62
+ }
63
+ }
@@ -0,0 +1,50 @@
1
+ import { foreignCallHandler } from '@aztec/noir-protocol-circuits-types/server';
2
+ import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
3
+
4
+ import { type ExecutionError, executeCircuit } from '@noir-lang/acvm_js';
5
+ import type { WitnessMap } from '@noir-lang/types';
6
+
7
+ import type { ACIRCallback, ACIRExecutionResult } from '../acvm/acvm.js';
8
+ import type { ACVMWitness } from '../acvm/acvm_types.js';
9
+ import { type SimulationProvider, parseErrorPayload } from './simulation_provider.js';
10
+
11
+ /**
12
+ * A simulation provider that uses the WASM simulator with the ability to handle blobs via the foreign call handler.
13
+ * This class is temporary while brillig cannot handle the blob math, and it is kept separate
14
+ * because the zkg commitment library used in the blob code is not browser compatible.
15
+ *
16
+ * It is only used in the context of server-side code executing simulated protocol circuits.
17
+ */
18
+ export class WASMSimulatorWithBlobs implements SimulationProvider {
19
+ async executeProtocolCircuit(input: WitnessMap, compiledCircuit: NoirCompiledCircuit): Promise<WitnessMap> {
20
+ // Execute the circuit on those initial witness values
21
+ //
22
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
23
+ const decodedBytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
24
+ //
25
+ // Execute the circuit
26
+ try {
27
+ const _witnessMap = await executeCircuit(
28
+ decodedBytecode,
29
+ input,
30
+ foreignCallHandler, // handle calls to debug_log and evaluate_blobs mock
31
+ );
32
+
33
+ return _witnessMap;
34
+ } catch (err) {
35
+ // Typescript types catched errors as unknown or any, so we need to narrow its type to check if it has raw assertion payload.
36
+ if (typeof err === 'object' && err !== null && 'rawAssertionPayload' in err) {
37
+ throw parseErrorPayload(compiledCircuit.abi, err as ExecutionError);
38
+ }
39
+ throw new Error(`Circuit execution failed: ${err}`);
40
+ }
41
+ }
42
+
43
+ executeUserCircuit(
44
+ _acir: Buffer,
45
+ _initialWitness: ACVMWitness,
46
+ _callback: ACIRCallback,
47
+ ): Promise<ACIRExecutionResult> {
48
+ throw new Error('Not implemented');
49
+ }
50
+ }
@@ -0,0 +1,38 @@
1
+ import { type Logger, createLogger } from '@aztec/foundation/log';
2
+
3
+ import { promises as fs } from 'fs';
4
+
5
+ import { NativeACVMSimulator } from './acvm_native.js';
6
+ import { WASMSimulator } from './acvm_wasm.js';
7
+ import type { SimulationProvider } from './simulation_provider.js';
8
+
9
+ export type SimulationProviderConfig = {
10
+ acvmBinaryPath?: string;
11
+ acvmWorkingDirectory?: string;
12
+ };
13
+
14
+ export function getSimulationProviderConfigFromEnv() {
15
+ const { ACVM_BINARY_PATH, ACVM_WORKING_DIRECTORY } = process.env;
16
+ return {
17
+ acvmWorkingDirectory: ACVM_WORKING_DIRECTORY ? ACVM_WORKING_DIRECTORY : undefined,
18
+ acvmBinaryPath: ACVM_BINARY_PATH ? ACVM_BINARY_PATH : undefined,
19
+ };
20
+ }
21
+
22
+ export async function createSimulationProvider(
23
+ config: SimulationProviderConfig,
24
+ logger: Logger = createLogger('simulator'),
25
+ ): Promise<SimulationProvider> {
26
+ if (config.acvmBinaryPath && config.acvmWorkingDirectory) {
27
+ try {
28
+ await fs.access(config.acvmBinaryPath, fs.constants.R_OK);
29
+ await fs.mkdir(config.acvmWorkingDirectory, { recursive: true });
30
+ logger.info(`Using native ACVM at ${config.acvmBinaryPath} and working directory ${config.acvmWorkingDirectory}`);
31
+ return new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath);
32
+ } catch {
33
+ logger.warn(`Failed to access ACVM at ${config.acvmBinaryPath}, falling back to WASM`);
34
+ }
35
+ }
36
+ logger.info('Using WASM ACVM simulation');
37
+ return new WASMSimulator();
38
+ }
@@ -0,0 +1,45 @@
1
+ import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
2
+
3
+ import type { ExecutionError } from '@noir-lang/acvm_js';
4
+ import { abiDecodeError } from '@noir-lang/noirc_abi';
5
+ import type { Abi, WitnessMap } from '@noir-lang/types';
6
+
7
+ import type { ACIRCallback, ACIRExecutionResult } from '../acvm/acvm.js';
8
+ import type { ACVMWitness } from '../acvm/acvm_types.js';
9
+
10
+ /**
11
+ * Low level simulation interface
12
+ */
13
+ export interface SimulationProvider {
14
+ executeProtocolCircuit(input: WitnessMap, compiledCircuit: NoirCompiledCircuit): Promise<WitnessMap>;
15
+ executeUserCircuit(acir: Buffer, initialWitness: ACVMWitness, callback: ACIRCallback): Promise<ACIRExecutionResult>;
16
+ }
17
+
18
+ export type ErrorWithPayload = ExecutionError & { decodedAssertionPayload?: any };
19
+
20
+ // Error handling taken from noir/noir-repo/tooling/noir_js/src/witness_generation.ts.
21
+ // TODO: import this in isolation without having to import noir_js in its entirety.
22
+ export function parseErrorPayload(abi: Abi, originalError: ExecutionError): Error {
23
+ const payload = originalError.rawAssertionPayload;
24
+ if (!payload) {
25
+ return originalError;
26
+ }
27
+ const enrichedError = originalError as ErrorWithPayload;
28
+
29
+ try {
30
+ // Decode the payload
31
+ const decodedPayload = abiDecodeError(abi, payload);
32
+
33
+ if (typeof decodedPayload === 'string') {
34
+ // If it's a string, just add it to the error message
35
+ enrichedError.message = `Circuit execution failed: ${decodedPayload}`;
36
+ } else {
37
+ // If not, attach the payload to the original error
38
+ enrichedError.decodedAssertionPayload = decodedPayload;
39
+ }
40
+ } catch (_errorDecoding) {
41
+ // Ignore errors decoding the payload
42
+ }
43
+
44
+ return enrichedError;
45
+ }
@@ -0,0 +1,147 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import type { FunctionCall } from '@aztec/stdlib/abi';
4
+ import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
5
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
6
+ import { CallContext, PrivateExecutionResult, TxExecutionRequest } from '@aztec/stdlib/tx';
7
+
8
+ import { createSimulationError } from '../common/errors.js';
9
+ import type { ExecutionDataProvider } from './execution_data_provider.js';
10
+ import { ExecutionNoteCache } from './execution_note_cache.js';
11
+ import { HashedValuesCache } from './hashed_values_cache.js';
12
+ import { executePrivateFunction, verifyCurrentClassId } from './private_execution.js';
13
+ import { PrivateExecutionOracle } from './private_execution_oracle.js';
14
+ import type { SimulationProvider } from './providers/simulation_provider.js';
15
+ import { executeUnconstrainedFunction } from './unconstrained_execution.js';
16
+ import { UnconstrainedExecutionOracle } from './unconstrained_execution_oracle.js';
17
+
18
+ /**
19
+ * The ACIR simulator.
20
+ */
21
+ export class AcirSimulator {
22
+ private log: Logger;
23
+
24
+ constructor(private executionDataProvider: ExecutionDataProvider, private simulationProvider: SimulationProvider) {
25
+ this.log = createLogger('simulator');
26
+ }
27
+
28
+ /**
29
+ * Runs a private function.
30
+ * @param request - The transaction request.
31
+ * @param entryPointArtifact - The artifact of the entry point function.
32
+ * @param contractAddress - The address of the contract (should match request.origin)
33
+ * @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract or a specific account.
34
+ * @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
35
+ * @returns The result of the execution.
36
+ */
37
+ public async run(
38
+ request: TxExecutionRequest,
39
+ contractAddress: AztecAddress,
40
+ selector: FunctionSelector,
41
+ msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
42
+ scopes?: AztecAddress[],
43
+ ): Promise<PrivateExecutionResult> {
44
+ const header = await this.executionDataProvider.getBlockHeader();
45
+
46
+ await verifyCurrentClassId(contractAddress, this.executionDataProvider);
47
+ const entryPointArtifact = await this.executionDataProvider.getFunctionArtifact(contractAddress, selector);
48
+
49
+ if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
50
+ throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
51
+ }
52
+
53
+ if (request.origin !== contractAddress) {
54
+ this.log.warn(
55
+ `Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`,
56
+ );
57
+ }
58
+
59
+ // reserve the first side effect for the tx hash (inserted by the private kernel)
60
+ const startSideEffectCounter = 1;
61
+
62
+ const callContext = new CallContext(
63
+ msgSender,
64
+ contractAddress,
65
+ await FunctionSelector.fromNameAndParameters(entryPointArtifact.name, entryPointArtifact.parameters),
66
+ entryPointArtifact.isStatic,
67
+ );
68
+
69
+ const txRequestHash = await request.toTxRequest().hash();
70
+ const noteCache = new ExecutionNoteCache(txRequestHash);
71
+
72
+ const context = new PrivateExecutionOracle(
73
+ request.firstCallArgsHash,
74
+ request.txContext,
75
+ callContext,
76
+ header,
77
+ request.authWitnesses,
78
+ request.capsules,
79
+ HashedValuesCache.create(request.argsOfCalls),
80
+ noteCache,
81
+ this.executionDataProvider,
82
+ this.simulationProvider,
83
+ /*totalPublicArgsCount=*/ 0,
84
+ startSideEffectCounter,
85
+ undefined,
86
+ scopes,
87
+ );
88
+
89
+ try {
90
+ const executionResult = await executePrivateFunction(
91
+ this.simulationProvider,
92
+ context,
93
+ entryPointArtifact,
94
+ contractAddress,
95
+ request.functionSelector,
96
+ );
97
+ const { usedTxRequestHashForNonces } = noteCache.finish();
98
+ const firstNullifierHint = usedTxRequestHashForNonces ? Fr.ZERO : noteCache.getAllNullifiers()[0];
99
+ return new PrivateExecutionResult(executionResult, firstNullifierHint);
100
+ } catch (err) {
101
+ throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Runs an unconstrained function.
107
+ * @param request - The transaction request.
108
+ * @param entryPointArtifact - The artifact of the entry point function.
109
+ * @param contractAddress - The address of the contract.
110
+ * @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
111
+ */
112
+ public async runUnconstrained(
113
+ request: FunctionCall,
114
+ contractAddress: AztecAddress,
115
+ selector: FunctionSelector,
116
+ scopes?: AztecAddress[],
117
+ ) {
118
+ await verifyCurrentClassId(contractAddress, this.executionDataProvider);
119
+ const entryPointArtifact = await this.executionDataProvider.getFunctionArtifact(contractAddress, selector);
120
+
121
+ if (entryPointArtifact.functionType !== FunctionType.UNCONSTRAINED) {
122
+ throw new Error(`Cannot run ${entryPointArtifact.functionType} function as unconstrained`);
123
+ }
124
+
125
+ const context = new UnconstrainedExecutionOracle(
126
+ contractAddress,
127
+ [],
128
+ [],
129
+ this.executionDataProvider,
130
+ undefined,
131
+ scopes,
132
+ );
133
+
134
+ try {
135
+ return await executeUnconstrainedFunction(
136
+ this.simulationProvider,
137
+ context,
138
+ entryPointArtifact,
139
+ contractAddress,
140
+ request.selector,
141
+ request.args,
142
+ );
143
+ } catch (err) {
144
+ throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
145
+ }
146
+ }
147
+ }
@@ -0,0 +1,50 @@
1
+ import type { Fr } from '@aztec/foundation/fields';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { type AbiDecoded, type FunctionArtifact, type FunctionSelector, decodeFromAbi } from '@aztec/stdlib/abi';
4
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
+
6
+ import { ExecutionError, resolveAssertionMessageFromError } from '../common/errors.js';
7
+ import { witnessMapToFields } from './acvm/deserialize.js';
8
+ import { Oracle, extractCallStack, toACVMWitness } from './acvm/index.js';
9
+ import type { SimulationProvider } from './providers/simulation_provider.js';
10
+ import type { UnconstrainedExecutionOracle } from './unconstrained_execution_oracle.js';
11
+
12
+ // docs:start:execute_unconstrained_function
13
+ /**
14
+ * Execute an unconstrained function and return the decoded values.
15
+ */
16
+ export async function executeUnconstrainedFunction(
17
+ simulatorProvider: SimulationProvider,
18
+ oracle: UnconstrainedExecutionOracle,
19
+ artifact: FunctionArtifact,
20
+ contractAddress: AztecAddress,
21
+ functionSelector: FunctionSelector,
22
+ args: Fr[],
23
+ log = createLogger('simulator:unconstrained_execution'),
24
+ ): Promise<AbiDecoded> {
25
+ log.verbose(`Executing unconstrained function ${artifact.name}`, {
26
+ contract: contractAddress,
27
+ selector: functionSelector,
28
+ });
29
+
30
+ const acir = artifact.bytecode;
31
+ const initialWitness = toACVMWitness(0, args);
32
+ const acirExecutionResult = await simulatorProvider
33
+ .executeUserCircuit(acir, initialWitness, new Oracle(oracle))
34
+ .catch((err: Error) => {
35
+ err.message = resolveAssertionMessageFromError(err, artifact);
36
+ throw new ExecutionError(
37
+ err.message,
38
+ {
39
+ contractAddress,
40
+ functionSelector,
41
+ },
42
+ extractCallStack(err, artifact.debug),
43
+ { cause: err },
44
+ );
45
+ });
46
+
47
+ const returnWitness = witnessMapToFields(acirExecutionResult.returnWitness);
48
+ return decodeFromAbi(artifact.returnTypes, returnWitness);
49
+ }
50
+ // docs:end:execute_unconstrained_function