@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,69 @@
1
+ import { TypeTag, Uint1, Uint8 } from '../avm_memory_types.js';
2
+ import { InvalidToRadixInputsError } from '../errors.js';
3
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
4
+ import { Addressing } from './addressing_mode.js';
5
+ import { Instruction } from './instruction.js';
6
+ export class ToRadixBE extends Instruction {
7
+ indirect;
8
+ srcOffset;
9
+ radixOffset;
10
+ numLimbsOffset;
11
+ outputBitsOffset;
12
+ dstOffset;
13
+ static type = 'TORADIXBE';
14
+ static opcode = Opcode.TORADIXBE;
15
+ // Informs (de)serialization. See Instruction.deserialize.
16
+ static wireFormat = [
17
+ OperandType.UINT8,
18
+ OperandType.UINT16,
19
+ OperandType.UINT16,
20
+ OperandType.UINT16,
21
+ OperandType.UINT16,
22
+ OperandType.UINT16,
23
+ OperandType.UINT16
24
+ ];
25
+ constructor(indirect, srcOffset, radixOffset, numLimbsOffset, outputBitsOffset, dstOffset){
26
+ super(), this.indirect = indirect, this.srcOffset = srcOffset, this.radixOffset = radixOffset, this.numLimbsOffset = numLimbsOffset, this.outputBitsOffset = outputBitsOffset, this.dstOffset = dstOffset;
27
+ }
28
+ async execute(context) {
29
+ const memory = context.machineState.memory;
30
+ const operands = [
31
+ this.srcOffset,
32
+ this.radixOffset,
33
+ this.numLimbsOffset,
34
+ this.outputBitsOffset,
35
+ this.dstOffset
36
+ ];
37
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
38
+ const [srcOffset, radixOffset, numLimbsOffset, outputBitsOffset, dstOffset] = addressing.resolve(operands, memory);
39
+ // The radix gadget only takes in a Field
40
+ memory.checkTag(TypeTag.FIELD, srcOffset);
41
+ memory.checkTag(TypeTag.UINT32, radixOffset);
42
+ memory.checkTag(TypeTag.UINT32, numLimbsOffset);
43
+ memory.checkTag(TypeTag.UINT1, outputBitsOffset);
44
+ const numLimbs = memory.get(numLimbsOffset).toNumber();
45
+ context.machineState.consumeGas(this.gasCost(numLimbs));
46
+ const outputBits = memory.get(outputBitsOffset).toNumber();
47
+ let value = memory.get(srcOffset).toBigInt();
48
+ const radix = memory.get(radixOffset).toBigInt();
49
+ if (radix < 2 || radix > 256) {
50
+ throw new InvalidToRadixInputsError(`ToRadixBE instruction's radix should be in range [2,256] (was ${radix}).`);
51
+ }
52
+ if (numLimbs < 1 && value != BigInt(0n)) {
53
+ throw new InvalidToRadixInputsError(`ToRadixBE instruction's input value is not zero (was ${value}) but numLimbs zero.`);
54
+ }
55
+ if (outputBits != 0 && radix != BigInt(2n)) {
56
+ throw new InvalidToRadixInputsError(`Radix ${radix} is not equal to 2 and bit mode is activated.`);
57
+ }
58
+ const radixBN = BigInt(radix);
59
+ const limbArray = new Array(numLimbs);
60
+ for(let i = numLimbs - 1; i >= 0; i--){
61
+ const limb = value % radixBN;
62
+ limbArray[i] = limb;
63
+ value /= radixBN;
64
+ }
65
+ const outputType = outputBits != 0 ? Uint1 : Uint8;
66
+ const res = limbArray.map((byte)=>new outputType(byte));
67
+ memory.setSlice(dstOffset, res);
68
+ }
69
+ }
@@ -0,0 +1,19 @@
1
+ import type { AvmContext } from '../avm_context.js';
2
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
3
+ import { Instruction } from './instruction.js';
4
+ export declare class EcAdd extends Instruction {
5
+ private indirect;
6
+ private p1XOffset;
7
+ private p1YOffset;
8
+ private p1IsInfiniteOffset;
9
+ private p2XOffset;
10
+ private p2YOffset;
11
+ private p2IsInfiniteOffset;
12
+ private dstOffset;
13
+ static type: string;
14
+ static readonly opcode = Opcode.ECADD;
15
+ static readonly wireFormat: OperandType[];
16
+ constructor(indirect: number, p1XOffset: number, p1YOffset: number, p1IsInfiniteOffset: number, p2XOffset: number, p2YOffset: number, p2IsInfiniteOffset: number, dstOffset: number);
17
+ execute(context: AvmContext): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=ec_add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ec_add.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/ec_add.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,KAAM,SAAQ,WAAW;IAkBlC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IAxBnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAGtC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAUvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,MAAM;IAKd,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAqDzD"}
@@ -0,0 +1,84 @@
1
+ import { Grumpkin } from '@aztec/foundation/crypto';
2
+ import { Point } from '@aztec/foundation/fields';
3
+ import { Field, TypeTag, Uint1 } from '../avm_memory_types.js';
4
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
5
+ import { Addressing } from './addressing_mode.js';
6
+ import { Instruction } from './instruction.js';
7
+ export class EcAdd extends Instruction {
8
+ indirect;
9
+ p1XOffset;
10
+ p1YOffset;
11
+ p1IsInfiniteOffset;
12
+ p2XOffset;
13
+ p2YOffset;
14
+ p2IsInfiniteOffset;
15
+ dstOffset;
16
+ static type = 'ECADD';
17
+ static opcode = Opcode.ECADD;
18
+ // Informs (de)serialization. See Instruction.deserialize.
19
+ static wireFormat = [
20
+ OperandType.UINT8,
21
+ OperandType.UINT16,
22
+ OperandType.UINT16,
23
+ OperandType.UINT16,
24
+ OperandType.UINT16,
25
+ OperandType.UINT16,
26
+ OperandType.UINT16,
27
+ OperandType.UINT16,
28
+ OperandType.UINT16
29
+ ];
30
+ constructor(indirect, p1XOffset, p1YOffset, p1IsInfiniteOffset, p2XOffset, p2YOffset, p2IsInfiniteOffset, dstOffset){
31
+ super(), this.indirect = indirect, this.p1XOffset = p1XOffset, this.p1YOffset = p1YOffset, this.p1IsInfiniteOffset = p1IsInfiniteOffset, this.p2XOffset = p2XOffset, this.p2YOffset = p2YOffset, this.p2IsInfiniteOffset = p2IsInfiniteOffset, this.dstOffset = dstOffset;
32
+ }
33
+ async execute(context) {
34
+ const memory = context.machineState.memory;
35
+ context.machineState.consumeGas(this.gasCost());
36
+ const operands = [
37
+ this.p1XOffset,
38
+ this.p1YOffset,
39
+ this.p1IsInfiniteOffset,
40
+ this.p2XOffset,
41
+ this.p2YOffset,
42
+ this.p2IsInfiniteOffset,
43
+ this.dstOffset
44
+ ];
45
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
46
+ const [p1XOffset, p1YOffset, p1IsInfiniteOffset, p2XOffset, p2YOffset, p2IsInfiniteOffset, dstOffset] = addressing.resolve(operands, memory);
47
+ memory.checkTags(TypeTag.FIELD, p1XOffset, p1YOffset, p2XOffset, p2YOffset);
48
+ memory.checkTags(TypeTag.UINT1, p1IsInfiniteOffset, p2IsInfiniteOffset);
49
+ const p1X = memory.get(p1XOffset);
50
+ const p1Y = memory.get(p1YOffset);
51
+ const p1IsInfinite = memory.get(p1IsInfiniteOffset).toNumber() === 1;
52
+ const p1 = new Point(p1X.toFr(), p1Y.toFr(), p1IsInfinite);
53
+ if (!p1.isOnGrumpkin()) {
54
+ throw new Error(`Point1 is not on the curve`);
55
+ }
56
+ const p2X = memory.get(p2XOffset);
57
+ const p2Y = memory.get(p2YOffset);
58
+ // unused. Point doesn't store this information
59
+ const p2IsInfinite = memory.get(p2IsInfiniteOffset).toNumber() === 1;
60
+ const p2 = new Point(p2X.toFr(), p2Y.toFr(), p2IsInfinite);
61
+ if (!p2.isOnGrumpkin()) {
62
+ throw new Error(`Point1 is not on the curve`);
63
+ }
64
+ const grumpkin = new Grumpkin();
65
+ let dest;
66
+ if (p1IsInfinite) {
67
+ dest = p2;
68
+ } else if (p2IsInfinite) {
69
+ dest = p1;
70
+ } else {
71
+ dest = await grumpkin.add(p1, p2);
72
+ }
73
+ // Important to use setSlice() and not set() in the two following statements as
74
+ // this checks that the offsets lie within memory range.
75
+ memory.setSlice(dstOffset, [
76
+ new Field(dest.x),
77
+ new Field(dest.y)
78
+ ]);
79
+ // Check representation of infinity for grumpkin
80
+ memory.setSlice(dstOffset + 2, [
81
+ new Uint1(dest.equals(Point.ZERO) ? 1 : 0)
82
+ ]);
83
+ }
84
+ }
@@ -0,0 +1,28 @@
1
+ import type { AvmContext } from '../avm_context.js';
2
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
3
+ import { Instruction } from './instruction.js';
4
+ export declare enum EnvironmentVariable {
5
+ ADDRESS = 0,
6
+ SENDER = 1,
7
+ TRANSACTIONFEE = 2,
8
+ CHAINID = 3,
9
+ VERSION = 4,
10
+ BLOCKNUMBER = 5,
11
+ TIMESTAMP = 6,
12
+ FEEPERL2GAS = 7,
13
+ FEEPERDAGAS = 8,
14
+ ISSTATICCALL = 9,
15
+ L2GASLEFT = 10,
16
+ DAGASLEFT = 11
17
+ }
18
+ export declare class GetEnvVar extends Instruction {
19
+ private indirect;
20
+ private dstOffset;
21
+ private varEnum;
22
+ static readonly type: string;
23
+ static readonly opcode: Opcode;
24
+ static readonly wireFormat16: OperandType[];
25
+ constructor(indirect: number, dstOffset: number, varEnum: number);
26
+ execute(context: AvmContext): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=environment_getters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment_getters.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/environment_getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,mBAAmB;IAC7B,OAAO,IAAA;IACP,MAAM,IAAA;IACN,cAAc,IAAA;IACd,OAAO,IAAA;IACP,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,WAAW,IAAA;IACX,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,SAAS,KAAA;IACT,SAAS,KAAA;CACV;AAiCD,qBAAa,SAAU,SAAQ,WAAW;IAU5B,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,OAAO;IAThF,gBAAuB,IAAI,EAAE,MAAM,CAAe;IAClD,gBAAuB,MAAM,EAAE,MAAM,CAAuB;IAC5D,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAKzC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,EAAU,OAAO,EAAE,MAAM;IAI3E,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAczD"}
@@ -0,0 +1,79 @@
1
+ import { Field, Uint64 } from '../avm_memory_types.js';
2
+ import { InstructionExecutionError } from '../errors.js';
3
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
4
+ import { Addressing } from './addressing_mode.js';
5
+ import { Instruction } from './instruction.js';
6
+ export var EnvironmentVariable = /*#__PURE__*/ function(EnvironmentVariable) {
7
+ EnvironmentVariable[EnvironmentVariable["ADDRESS"] = 0] = "ADDRESS";
8
+ EnvironmentVariable[EnvironmentVariable["SENDER"] = 1] = "SENDER";
9
+ EnvironmentVariable[EnvironmentVariable["TRANSACTIONFEE"] = 2] = "TRANSACTIONFEE";
10
+ EnvironmentVariable[EnvironmentVariable["CHAINID"] = 3] = "CHAINID";
11
+ EnvironmentVariable[EnvironmentVariable["VERSION"] = 4] = "VERSION";
12
+ EnvironmentVariable[EnvironmentVariable["BLOCKNUMBER"] = 5] = "BLOCKNUMBER";
13
+ EnvironmentVariable[EnvironmentVariable["TIMESTAMP"] = 6] = "TIMESTAMP";
14
+ EnvironmentVariable[EnvironmentVariable["FEEPERL2GAS"] = 7] = "FEEPERL2GAS";
15
+ EnvironmentVariable[EnvironmentVariable["FEEPERDAGAS"] = 8] = "FEEPERDAGAS";
16
+ EnvironmentVariable[EnvironmentVariable["ISSTATICCALL"] = 9] = "ISSTATICCALL";
17
+ EnvironmentVariable[EnvironmentVariable["L2GASLEFT"] = 10] = "L2GASLEFT";
18
+ EnvironmentVariable[EnvironmentVariable["DAGASLEFT"] = 11] = "DAGASLEFT";
19
+ return EnvironmentVariable;
20
+ }({});
21
+ function getValue(e, ctx) {
22
+ switch(e){
23
+ case 0:
24
+ return new Field(ctx.environment.address.toField());
25
+ case 1:
26
+ return new Field(ctx.environment.sender.toField());
27
+ case 2:
28
+ return new Field(ctx.environment.transactionFee);
29
+ case 3:
30
+ return new Field(ctx.environment.globals.chainId);
31
+ case 4:
32
+ return new Field(ctx.environment.globals.version);
33
+ case 5:
34
+ return new Field(ctx.environment.globals.blockNumber);
35
+ case 6:
36
+ return new Uint64(ctx.environment.globals.timestamp.toBigInt());
37
+ case 7:
38
+ return new Field(ctx.environment.globals.gasFees.feePerL2Gas);
39
+ case 8:
40
+ return new Field(ctx.environment.globals.gasFees.feePerDaGas);
41
+ case 9:
42
+ return new Field(ctx.environment.isStaticCall ? 1 : 0);
43
+ case 10:
44
+ return new Field(ctx.machineState.l2GasLeft);
45
+ case 11:
46
+ return new Field(ctx.machineState.daGasLeft);
47
+ default:
48
+ throw new Error(`Unknown environment variable ${e}`);
49
+ }
50
+ }
51
+ export class GetEnvVar extends Instruction {
52
+ indirect;
53
+ dstOffset;
54
+ varEnum;
55
+ static type = 'GETENVVAR';
56
+ static opcode = Opcode.GETENVVAR_16;
57
+ static wireFormat16 = [
58
+ OperandType.UINT8,
59
+ OperandType.UINT8,
60
+ OperandType.UINT16,
61
+ OperandType.UINT8
62
+ ];
63
+ constructor(indirect, dstOffset, varEnum){
64
+ super(), this.indirect = indirect, this.dstOffset = dstOffset, this.varEnum = varEnum;
65
+ }
66
+ async execute(context) {
67
+ const memory = context.machineState.memory;
68
+ context.machineState.consumeGas(this.gasCost());
69
+ if (!(this.varEnum in EnvironmentVariable)) {
70
+ throw new InstructionExecutionError(`Invalid GETENVVAR var enum ${this.varEnum}`);
71
+ }
72
+ const operands = [
73
+ this.dstOffset
74
+ ];
75
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
76
+ const [dstOffset] = addressing.resolve(operands, memory);
77
+ memory.set(dstOffset, getValue(this.varEnum, context));
78
+ }
79
+ }
@@ -0,0 +1,58 @@
1
+ import type { AvmContext } from '../avm_context.js';
2
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
3
+ import { Instruction } from './instruction.js';
4
+ declare abstract class ExternalCall extends Instruction {
5
+ private indirect;
6
+ private gasOffset;
7
+ private addrOffset;
8
+ private argsOffset;
9
+ private argsSizeOffset;
10
+ static readonly wireFormat: OperandType[];
11
+ constructor(indirect: number, gasOffset: number, addrOffset: number, argsOffset: number, argsSizeOffset: number);
12
+ execute(context: AvmContext): Promise<void>;
13
+ abstract get type(): 'CALL' | 'STATICCALL';
14
+ }
15
+ export declare class Call extends ExternalCall {
16
+ static type: "CALL";
17
+ static readonly opcode: Opcode;
18
+ get type(): "CALL";
19
+ }
20
+ export declare class StaticCall extends ExternalCall {
21
+ static type: "STATICCALL";
22
+ static readonly opcode: Opcode;
23
+ get type(): "STATICCALL";
24
+ }
25
+ export declare class SuccessCopy extends Instruction {
26
+ private indirect;
27
+ private dstOffset;
28
+ static type: string;
29
+ static readonly opcode: Opcode;
30
+ static readonly wireFormat: OperandType[];
31
+ constructor(indirect: number, dstOffset: number);
32
+ execute(context: AvmContext): Promise<void>;
33
+ }
34
+ export declare class Return extends Instruction {
35
+ private indirect;
36
+ private returnOffset;
37
+ private returnSizeOffset;
38
+ static type: string;
39
+ static readonly opcode: Opcode;
40
+ static readonly wireFormat: OperandType[];
41
+ constructor(indirect: number, returnOffset: number, returnSizeOffset: number);
42
+ execute(context: AvmContext): Promise<void>;
43
+ handlesPC(): boolean;
44
+ }
45
+ export declare class Revert extends Instruction {
46
+ private indirect;
47
+ private returnOffset;
48
+ private retSizeOffset;
49
+ static type: string;
50
+ static readonly opcode: Opcode;
51
+ static readonly wireFormat8: OperandType[];
52
+ static readonly wireFormat16: OperandType[];
53
+ constructor(indirect: number, returnOffset: number, retSizeOffset: number);
54
+ execute(context: AvmContext): Promise<void>;
55
+ handlesPC(): boolean;
56
+ }
57
+ export {};
58
+ //# sourceMappingURL=external_calls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external_calls.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/external_calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,YAAa,SAAQ,WAAW;IAY3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IAdxB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAOvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM;IAKnB,OAAO,CAAC,OAAO,EAAE,UAAU;IAmExC,aAA6B,IAAI,IAAI,MAAM,GAAG,YAAY,CAAC;CAC5D;AAED,qBAAa,IAAK,SAAQ,YAAY;IACpC,MAAM,CAAC,IAAI,SAAmB;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAe;IAE7C,IAAW,IAAI,WAEd;CACF;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,MAAM,CAAC,IAAI,eAAyB;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAqB;IAEnD,IAAW,IAAI,iBAEd;CACF;AAED,qBAAa,WAAY,SAAQ,WAAW;IAU9B,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,SAAS;IATvD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAiB;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsB;IAEpD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAIvC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM;IAIlD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAazD;AAED,qBAAa,MAAO,SAAQ,WAAW;IAWzB,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,YAAY;IAAU,OAAO,CAAC,gBAAgB;IAV5F,MAAM,CAAC,IAAI,EAAE,MAAM,CAAY;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAiB;IAE/C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,YAAY,EAAE,MAAM,EAAU,gBAAgB,EAAE,MAAM;IAIvF,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,MAAO,SAAQ,WAAW;IAiBzB,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,YAAY;IAAU,OAAO,CAAC,aAAa;IAhBzF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAY;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAEjD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,CAKxC;IACF,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAKzC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,YAAY,EAAE,MAAM,EAAU,aAAa,EAAE,MAAM;IAIpF,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxC,SAAS,IAAI,OAAO;CAGrC"}
@@ -0,0 +1,204 @@
1
+ import { TypeTag, Uint1 } from '../avm_memory_types.js';
2
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
3
+ import { Addressing } from './addressing_mode.js';
4
+ import { Instruction } from './instruction.js';
5
+ class ExternalCall extends Instruction {
6
+ indirect;
7
+ gasOffset;
8
+ addrOffset;
9
+ argsOffset;
10
+ argsSizeOffset;
11
+ // Informs (de)serialization. See Instruction.deserialize.
12
+ static wireFormat = [
13
+ OperandType.UINT8,
14
+ OperandType.UINT8,
15
+ OperandType.UINT16,
16
+ OperandType.UINT16,
17
+ OperandType.UINT16,
18
+ OperandType.UINT16
19
+ ];
20
+ constructor(indirect, gasOffset, addrOffset, argsOffset, argsSizeOffset){
21
+ super(), this.indirect = indirect, this.gasOffset = gasOffset, this.addrOffset = addrOffset, this.argsOffset = argsOffset, this.argsSizeOffset = argsSizeOffset;
22
+ }
23
+ async execute(context) {
24
+ const memory = context.machineState.memory;
25
+ const operands = [
26
+ this.gasOffset,
27
+ this.addrOffset,
28
+ this.argsOffset,
29
+ this.argsSizeOffset
30
+ ];
31
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
32
+ const [gasOffset, addrOffset, argsOffset, argsSizeOffset] = addressing.resolve(operands, memory);
33
+ memory.checkTags(TypeTag.FIELD, gasOffset, gasOffset + 1);
34
+ memory.checkTag(TypeTag.FIELD, addrOffset);
35
+ memory.checkTag(TypeTag.UINT32, argsSizeOffset);
36
+ const calldataSize = memory.get(argsSizeOffset).toNumber();
37
+ const calldata = memory.getSlice(argsOffset, calldataSize).map((f)=>f.toFr());
38
+ memory.checkTagsRange(TypeTag.FIELD, argsOffset, calldataSize);
39
+ const callAddress = memory.getAs(addrOffset);
40
+ // If we are already in a static call, we propagate the environment.
41
+ const callType = context.environment.isStaticCall ? 'STATICCALL' : this.type;
42
+ // First we consume the gas for this operation.
43
+ context.machineState.consumeGas(this.gasCost(calldataSize));
44
+ // Then we consume the gas allocated for the nested call. The excess will be refunded later.
45
+ // Gas allocation is capped by the amount of gas left in the current context.
46
+ // We have to do some dancing here because the gas allocation is a field,
47
+ // but in the machine state we track gas as a number.
48
+ const allocatedL2Gas = Number(BigIntMin(memory.get(gasOffset).toBigInt(), BigInt(context.machineState.l2GasLeft)));
49
+ const allocatedDaGas = Number(BigIntMin(memory.get(gasOffset + 1).toBigInt(), BigInt(context.machineState.daGasLeft)));
50
+ const allocatedGas = {
51
+ l2Gas: allocatedL2Gas,
52
+ daGas: allocatedDaGas
53
+ };
54
+ context.machineState.consumeGas(allocatedGas);
55
+ const aztecAddress = callAddress.toAztecAddress();
56
+ const nestedContext = await context.createNestedContractCallContext(aztecAddress, calldata, allocatedGas, callType);
57
+ const simulator = await context.provideSimulator(nestedContext);
58
+ const nestedCallResults = await simulator.execute();
59
+ const success = !nestedCallResults.reverted;
60
+ // Save return/revert data for later.
61
+ const fullReturnData = nestedCallResults.output;
62
+ context.machineState.nestedReturndata = fullReturnData;
63
+ // Track the success status directly
64
+ context.machineState.nestedCallSuccess = success;
65
+ // If the nested call reverted, we try to save the reason and the revert data.
66
+ // This will be used by the caller to try to reconstruct the call stack.
67
+ // This is only a heuristic and may not always work. It is intended to work
68
+ // for the case where a nested call reverts and the caller always rethrows
69
+ // (in Noir code).
70
+ if (!success) {
71
+ context.machineState.collectedRevertInfo = {
72
+ revertDataRepresentative: fullReturnData,
73
+ recursiveRevertReason: nestedCallResults.revertReason
74
+ };
75
+ }
76
+ // Refund unused gas
77
+ context.machineState.refundGas(nestedCallResults.gasLeft);
78
+ // Merge nested call's state and trace based on whether it succeeded.
79
+ if (success) {
80
+ await context.persistableState.merge(nestedContext.persistableState);
81
+ } else {
82
+ await context.persistableState.reject(nestedContext.persistableState);
83
+ }
84
+ }
85
+ }
86
+ export class Call extends ExternalCall {
87
+ static type = 'CALL';
88
+ static opcode = Opcode.CALL;
89
+ get type() {
90
+ return Call.type;
91
+ }
92
+ }
93
+ export class StaticCall extends ExternalCall {
94
+ static type = 'STATICCALL';
95
+ static opcode = Opcode.STATICCALL;
96
+ get type() {
97
+ return StaticCall.type;
98
+ }
99
+ }
100
+ export class SuccessCopy extends Instruction {
101
+ indirect;
102
+ dstOffset;
103
+ static type = 'SUCCESSCOPY';
104
+ static opcode = Opcode.SUCCESSCOPY;
105
+ // Informs (de)serialization. See Instruction.deserialize.
106
+ static wireFormat = [
107
+ OperandType.UINT8,
108
+ OperandType.UINT8,
109
+ OperandType.UINT16
110
+ ];
111
+ constructor(indirect, dstOffset){
112
+ super(), this.indirect = indirect, this.dstOffset = dstOffset;
113
+ }
114
+ async execute(context) {
115
+ const memory = context.machineState.memory;
116
+ const operands = [
117
+ this.dstOffset
118
+ ];
119
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
120
+ const [dstOffset] = addressing.resolve(operands, memory);
121
+ // Use the direct success tracking property
122
+ const success = context.machineState.nestedCallSuccess;
123
+ // Write the success flag to the provided memory location
124
+ memory.set(dstOffset, new Uint1(success ? 1 : 0));
125
+ }
126
+ }
127
+ export class Return extends Instruction {
128
+ indirect;
129
+ returnOffset;
130
+ returnSizeOffset;
131
+ static type = 'RETURN';
132
+ static opcode = Opcode.RETURN;
133
+ // Informs (de)serialization. See Instruction.deserialize.
134
+ static wireFormat = [
135
+ OperandType.UINT8,
136
+ OperandType.UINT8,
137
+ OperandType.UINT16,
138
+ OperandType.UINT16
139
+ ];
140
+ constructor(indirect, returnOffset, returnSizeOffset){
141
+ super(), this.indirect = indirect, this.returnOffset = returnOffset, this.returnSizeOffset = returnSizeOffset;
142
+ }
143
+ async execute(context) {
144
+ const memory = context.machineState.memory;
145
+ const operands = [
146
+ this.returnOffset,
147
+ this.returnSizeOffset
148
+ ];
149
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
150
+ const [returnOffset, returnSizeOffset] = addressing.resolve(operands, memory);
151
+ memory.checkTag(TypeTag.UINT32, returnSizeOffset);
152
+ const returnSize = memory.get(returnSizeOffset).toNumber();
153
+ context.machineState.consumeGas(this.gasCost(returnSize));
154
+ const output = memory.getSlice(returnOffset, returnSize).map((word)=>word.toFr());
155
+ context.machineState.return(output);
156
+ }
157
+ handlesPC() {
158
+ return true;
159
+ }
160
+ }
161
+ export class Revert extends Instruction {
162
+ indirect;
163
+ returnOffset;
164
+ retSizeOffset;
165
+ static type = 'REVERT';
166
+ static opcode = Opcode.REVERT_8;
167
+ static wireFormat8 = [
168
+ OperandType.UINT8,
169
+ OperandType.UINT8,
170
+ OperandType.UINT8,
171
+ OperandType.UINT8
172
+ ];
173
+ static wireFormat16 = [
174
+ OperandType.UINT8,
175
+ OperandType.UINT8,
176
+ OperandType.UINT16,
177
+ OperandType.UINT16
178
+ ];
179
+ constructor(indirect, returnOffset, retSizeOffset){
180
+ super(), this.indirect = indirect, this.returnOffset = returnOffset, this.retSizeOffset = retSizeOffset;
181
+ }
182
+ async execute(context) {
183
+ const memory = context.machineState.memory;
184
+ const operands = [
185
+ this.returnOffset,
186
+ this.retSizeOffset
187
+ ];
188
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
189
+ const [returnOffset, retSizeOffset] = addressing.resolve(operands, memory);
190
+ memory.checkTag(TypeTag.UINT32, retSizeOffset);
191
+ const retSize = memory.get(retSizeOffset).toNumber();
192
+ context.machineState.consumeGas(this.gasCost(retSize));
193
+ const output = memory.getSlice(returnOffset, retSize).map((word)=>word.toFr());
194
+ context.machineState.revert(output);
195
+ }
196
+ // We don't want to increase the PC after reverting because it breaks messages.
197
+ // Maybe we can remove this once messages don't depend on PCs.
198
+ handlesPC() {
199
+ return true;
200
+ }
201
+ }
202
+ /** Returns the smaller of two bigints. */ function BigIntMin(a, b) {
203
+ return a < b ? a : b;
204
+ }
@@ -0,0 +1,36 @@
1
+ import type { AvmContext } from '../avm_context.js';
2
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
3
+ import { Instruction } from './instruction.js';
4
+ export declare class Poseidon2 extends Instruction {
5
+ private indirect;
6
+ private inputStateOffset;
7
+ private outputStateOffset;
8
+ static type: string;
9
+ static readonly opcode: Opcode;
10
+ static readonly stateSize = 4;
11
+ static readonly wireFormat: OperandType[];
12
+ constructor(indirect: number, inputStateOffset: number, outputStateOffset: number);
13
+ execute(context: AvmContext): Promise<void>;
14
+ }
15
+ export declare class KeccakF1600 extends Instruction {
16
+ private indirect;
17
+ private dstOffset;
18
+ private inputOffset;
19
+ static type: string;
20
+ static readonly opcode: Opcode;
21
+ static readonly wireFormat: OperandType[];
22
+ constructor(indirect: number, dstOffset: number, inputOffset: number);
23
+ execute(context: AvmContext): Promise<void>;
24
+ }
25
+ export declare class Sha256Compression extends Instruction {
26
+ private indirect;
27
+ private outputOffset;
28
+ private stateOffset;
29
+ private inputsOffset;
30
+ static type: string;
31
+ static readonly opcode: Opcode;
32
+ static readonly wireFormat: OperandType[];
33
+ constructor(indirect: number, outputOffset: number, stateOffset: number, inputsOffset: number);
34
+ execute(context: AvmContext): Promise<void>;
35
+ }
36
+ //# sourceMappingURL=hashing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/hashing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,SAAU,SAAQ,WAAW;IAa5B,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,gBAAgB;IAAU,OAAO,CAAC,iBAAiB;IAZjG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK;IAG9B,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,gBAAgB,EAAE,MAAM,EAAU,iBAAiB,EAAE,MAAM;IAI5F,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzD;AAED,qBAAa,WAAY,SAAQ,WAAW;IAY9B,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,WAAW;IAXpF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAiB;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsB;IAGpD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,EAAU,WAAW,EAAE,MAAM;IAK/E,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBzD;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAc9C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,YAAY;IAhBtB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAuB;IAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA4B;IAG1D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAMvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBzD"}