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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (505) hide show
  1. package/README.md +3 -3
  2. package/dest/client.d.ts +5 -0
  3. package/dest/client.d.ts.map +1 -0
  4. package/dest/client.js +3 -0
  5. package/dest/{public → common}/db_interfaces.d.ts +8 -33
  6. package/dest/common/db_interfaces.d.ts.map +1 -0
  7. package/dest/common/db_interfaces.js +1 -0
  8. package/dest/common/debug_fn_name.d.ts +3 -2
  9. package/dest/common/debug_fn_name.d.ts.map +1 -1
  10. package/dest/common/debug_fn_name.js +2 -5
  11. package/dest/common/errors.d.ts +4 -4
  12. package/dest/common/errors.d.ts.map +1 -1
  13. package/dest/common/errors.js +30 -39
  14. package/dest/common/index.d.ts +2 -1
  15. package/dest/common/index.d.ts.map +1 -1
  16. package/dest/common/index.js +2 -2
  17. package/dest/common/message_load_oracle_inputs.d.ts +2 -2
  18. package/dest/common/message_load_oracle_inputs.d.ts.map +1 -1
  19. package/dest/common/message_load_oracle_inputs.js +8 -8
  20. package/dest/common/stats/index.d.ts.map +1 -0
  21. package/dest/{stats → common/stats}/stats.d.ts +2 -2
  22. package/dest/common/stats/stats.d.ts.map +1 -0
  23. package/dest/common/stats/stats.js +10 -0
  24. package/dest/{acvm → private/acvm}/acvm.d.ts +4 -4
  25. package/dest/private/acvm/acvm.d.ts.map +1 -0
  26. package/dest/private/acvm/acvm.js +70 -0
  27. package/dest/{acvm → private/acvm}/acvm_types.d.ts +1 -1
  28. package/dest/private/acvm/acvm_types.d.ts.map +1 -0
  29. package/dest/private/acvm/acvm_types.js +3 -0
  30. package/dest/{acvm → private/acvm}/deserialize.d.ts +2 -2
  31. package/dest/private/acvm/deserialize.d.ts.map +1 -0
  32. package/dest/private/acvm/deserialize.js +42 -0
  33. package/dest/private/acvm/index.d.ts.map +1 -0
  34. package/dest/private/acvm/index.js +5 -0
  35. package/dest/{acvm → private/acvm}/oracle/index.d.ts +1 -1
  36. package/dest/private/acvm/oracle/index.d.ts.map +1 -0
  37. package/dest/private/acvm/oracle/index.js +2 -0
  38. package/dest/{acvm → private/acvm}/oracle/oracle.d.ts +4 -3
  39. package/dest/private/acvm/oracle/oracle.d.ts.map +1 -0
  40. package/dest/private/acvm/oracle/oracle.js +263 -0
  41. package/dest/{acvm → private/acvm}/oracle/typed_oracle.d.ts +12 -6
  42. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -0
  43. package/dest/private/acvm/oracle/typed_oracle.js +132 -0
  44. package/dest/{acvm → private/acvm}/serialize.d.ts +7 -3
  45. package/dest/private/acvm/serialize.d.ts.map +1 -0
  46. package/dest/private/acvm/serialize.js +46 -0
  47. package/dest/{client → private}/client_execution_context.d.ts +20 -17
  48. package/dest/private/client_execution_context.d.ts.map +1 -0
  49. package/dest/private/client_execution_context.js +378 -0
  50. package/dest/{client → private}/db_oracle.d.ts +19 -7
  51. package/dest/private/db_oracle.d.ts.map +1 -0
  52. package/dest/private/db_oracle.js +14 -0
  53. package/dest/{client → private}/execution_note_cache.d.ts +2 -2
  54. package/dest/private/execution_note_cache.d.ts.map +1 -0
  55. package/dest/private/execution_note_cache.js +180 -0
  56. package/dest/{common → private}/hashed_values_cache.d.ts +2 -2
  57. package/dest/private/hashed_values_cache.d.ts.map +1 -0
  58. package/dest/private/hashed_values_cache.js +46 -0
  59. package/dest/private/index.d.ts +13 -0
  60. package/dest/private/index.d.ts.map +1 -0
  61. package/dest/private/index.js +12 -0
  62. package/dest/{client → private}/pick_notes.d.ts +1 -1
  63. package/dest/private/pick_notes.d.ts.map +1 -0
  64. package/dest/private/pick_notes.js +51 -0
  65. package/dest/private/private_execution.d.ts +24 -0
  66. package/dest/private/private_execution.d.ts.map +1 -0
  67. package/dest/private/private_execution.js +90 -0
  68. package/dest/{providers → private/providers}/acvm_native.d.ts +5 -5
  69. package/dest/private/providers/acvm_native.d.ts.map +1 -0
  70. package/dest/private/providers/acvm_native.js +139 -0
  71. package/dest/{providers → private/providers}/acvm_wasm.d.ts +4 -4
  72. package/dest/private/providers/acvm_wasm.d.ts.map +1 -0
  73. package/dest/private/providers/acvm_wasm.js +62 -0
  74. package/dest/{providers → private/providers}/acvm_wasm_with_blobs.d.ts +5 -5
  75. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +1 -0
  76. package/dest/{providers → private/providers}/acvm_wasm_with_blobs.js +3 -6
  77. package/dest/{providers → private/providers}/factory.d.ts +1 -1
  78. package/dest/private/providers/factory.d.ts.map +1 -0
  79. package/dest/private/providers/factory.js +27 -0
  80. package/dest/{common → private/providers}/simulation_provider.d.ts +5 -5
  81. package/dest/private/providers/simulation_provider.d.ts.map +1 -0
  82. package/dest/private/providers/simulation_provider.js +24 -0
  83. package/dest/private/simulator.d.ts +36 -0
  84. package/dest/private/simulator.d.ts.map +1 -0
  85. package/dest/private/simulator.js +78 -0
  86. package/dest/{client → private}/unconstrained_execution.d.ts +5 -5
  87. package/dest/private/unconstrained_execution.d.ts.map +1 -0
  88. package/dest/private/unconstrained_execution.js +27 -0
  89. package/dest/{client → private}/view_data_oracle.d.ts +15 -7
  90. package/dest/private/view_data_oracle.d.ts.map +1 -0
  91. package/dest/private/view_data_oracle.js +260 -0
  92. package/dest/{avm → public/avm}/avm_context.d.ts +7 -5
  93. package/dest/public/avm/avm_context.d.ts.map +1 -0
  94. package/dest/public/avm/avm_context.js +44 -0
  95. package/dest/{avm → public/avm}/avm_contract_call_result.d.ts +5 -5
  96. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -0
  97. package/dest/public/avm/avm_contract_call_result.js +50 -0
  98. package/dest/{avm → public/avm}/avm_execution_environment.d.ts +2 -2
  99. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -0
  100. package/dest/public/avm/avm_execution_environment.js +31 -0
  101. package/dest/public/avm/avm_gas.d.ts.map +1 -0
  102. package/dest/public/avm/avm_gas.js +202 -0
  103. package/dest/{avm → public/avm}/avm_machine_state.d.ts +2 -2
  104. package/dest/public/avm/avm_machine_state.d.ts.map +1 -0
  105. package/dest/public/avm/avm_machine_state.js +106 -0
  106. package/dest/{avm → public/avm}/avm_memory_types.d.ts +2 -2
  107. package/dest/public/avm/avm_memory_types.d.ts.map +1 -0
  108. package/dest/public/avm/avm_memory_types.js +340 -0
  109. package/dest/{avm → public/avm}/avm_simulator.d.ts +5 -3
  110. package/dest/public/avm/avm_simulator.d.ts.map +1 -0
  111. package/dest/public/avm/avm_simulator.js +202 -0
  112. package/dest/public/avm/bytecode_utils.d.ts.map +1 -0
  113. package/dest/public/avm/bytecode_utils.js +17 -0
  114. package/dest/{avm → public/avm}/errors.d.ts +5 -4
  115. package/dest/public/avm/errors.d.ts.map +1 -0
  116. package/dest/public/avm/errors.js +179 -0
  117. package/dest/{avm → public/avm}/fixtures/avm_simulation_tester.d.ts +6 -6
  118. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
  119. package/dest/public/avm/fixtures/avm_simulation_tester.js +76 -0
  120. package/dest/{avm → public/avm}/fixtures/base_avm_simulation_tester.d.ts +13 -11
  121. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
  122. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +77 -0
  123. package/dest/{avm → public/avm}/fixtures/index.d.ts +7 -7
  124. package/dest/public/avm/fixtures/index.d.ts.map +1 -0
  125. package/dest/public/avm/fixtures/index.js +140 -0
  126. package/dest/{avm → public/avm}/fixtures/simple_contract_data_source.d.ts +10 -4
  127. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
  128. package/dest/public/avm/fixtures/simple_contract_data_source.js +112 -0
  129. package/dest/public/avm/index.d.ts +4 -0
  130. package/dest/public/avm/index.d.ts.map +1 -0
  131. package/dest/{avm/index.d.ts → public/avm/index.js} +1 -2
  132. package/dest/public/avm/journal/index.d.ts.map +1 -0
  133. package/dest/{avm → public/avm}/journal/journal.d.ts +51 -18
  134. package/dest/public/avm/journal/journal.d.ts.map +1 -0
  135. package/dest/public/avm/journal/journal.js +488 -0
  136. package/dest/{avm → public/avm}/journal/nullifiers.d.ts +8 -6
  137. package/dest/public/avm/journal/nullifiers.d.ts.map +1 -0
  138. package/dest/public/avm/journal/nullifiers.js +97 -0
  139. package/dest/{avm → public/avm}/journal/public_storage.d.ts +2 -2
  140. package/dest/public/avm/journal/public_storage.d.ts.map +1 -0
  141. package/dest/public/avm/journal/public_storage.js +145 -0
  142. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -0
  143. package/dest/public/avm/opcodes/accrued_substate.js +252 -0
  144. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -0
  145. package/dest/public/avm/opcodes/addressing_mode.js +74 -0
  146. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -0
  147. package/dest/public/avm/opcodes/arithmetic.js +73 -0
  148. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -0
  149. package/dest/public/avm/opcodes/bitwise.js +106 -0
  150. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -0
  151. package/dest/public/avm/opcodes/comparators.js +43 -0
  152. package/dest/public/avm/opcodes/contract.d.ts.map +1 -0
  153. package/dest/public/avm/opcodes/contract.js +66 -0
  154. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -0
  155. package/dest/public/avm/opcodes/control_flow.js +105 -0
  156. package/dest/{avm → public/avm}/opcodes/conversion.d.ts +1 -1
  157. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -0
  158. package/dest/public/avm/opcodes/conversion.js +69 -0
  159. package/dest/{avm → public/avm}/opcodes/ec_add.d.ts +1 -1
  160. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -0
  161. package/dest/public/avm/opcodes/ec_add.js +84 -0
  162. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -0
  163. package/dest/public/avm/opcodes/environment_getters.js +79 -0
  164. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -0
  165. package/dest/public/avm/opcodes/external_calls.js +180 -0
  166. package/dest/{avm → public/avm}/opcodes/hashing.d.ts +1 -1
  167. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -0
  168. package/dest/public/avm/opcodes/hashing.js +114 -0
  169. package/dest/public/avm/opcodes/index.d.ts.map +1 -0
  170. package/dest/{avm → public/avm}/opcodes/instruction.d.ts +2 -2
  171. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -0
  172. package/dest/public/avm/opcodes/instruction.js +91 -0
  173. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -0
  174. package/dest/public/avm/opcodes/instruction_impl.js +30 -0
  175. package/dest/public/avm/opcodes/memory.d.ts.map +1 -0
  176. package/dest/public/avm/opcodes/memory.js +253 -0
  177. package/dest/{avm → public/avm}/opcodes/misc.d.ts +1 -1
  178. package/dest/public/avm/opcodes/misc.d.ts.map +1 -0
  179. package/dest/public/avm/opcodes/misc.js +48 -0
  180. package/dest/public/avm/opcodes/storage.d.ts.map +1 -0
  181. package/dest/public/avm/opcodes/storage.js +66 -0
  182. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -0
  183. package/dest/public/avm/serialization/buffer_cursor.js +99 -0
  184. package/dest/{avm → public/avm}/serialization/bytecode_serialization.d.ts +1 -1
  185. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -0
  186. package/dest/public/avm/serialization/bytecode_serialization.js +328 -0
  187. package/dest/{avm → public/avm}/serialization/instruction_serialization.d.ts +1 -2
  188. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -0
  189. package/dest/public/avm/serialization/instruction_serialization.js +225 -0
  190. package/dest/{avm → public/avm}/test_utils.d.ts +6 -4
  191. package/dest/public/avm/test_utils.d.ts.map +1 -0
  192. package/dest/public/avm/test_utils.js +52 -0
  193. package/dest/public/bytecode_errors.js +1 -2
  194. package/dest/public/execution.d.ts +8 -2
  195. package/dest/public/execution.d.ts.map +1 -1
  196. package/dest/public/execution.js +4 -5
  197. package/dest/public/executor_metrics.js +16 -12
  198. package/dest/public/fixtures/index.js +0 -1
  199. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +12 -8
  200. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  201. package/dest/public/fixtures/public_tx_simulation_tester.js +37 -44
  202. package/dest/public/fixtures/utils.d.ts +3 -11
  203. package/dest/public/fixtures/utils.d.ts.map +1 -1
  204. package/dest/public/fixtures/utils.js +15 -35
  205. package/dest/public/index.d.ts +3 -2
  206. package/dest/public/index.d.ts.map +1 -1
  207. package/dest/public/index.js +3 -3
  208. package/dest/public/public_db_sources.d.ts +22 -28
  209. package/dest/public/public_db_sources.d.ts.map +1 -1
  210. package/dest/public/public_db_sources.js +75 -181
  211. package/dest/public/public_processor.d.ts +8 -6
  212. package/dest/public/public_processor.d.ts.map +1 -1
  213. package/dest/public/public_processor.js +329 -308
  214. package/dest/public/public_processor_metrics.d.ts +3 -3
  215. package/dest/public/public_processor_metrics.d.ts.map +1 -1
  216. package/dest/public/public_processor_metrics.js +46 -27
  217. package/dest/public/public_tx_context.d.ts +14 -8
  218. package/dest/public/public_tx_context.d.ts.map +1 -1
  219. package/dest/public/public_tx_context.js +122 -143
  220. package/dest/public/public_tx_simulator.d.ts +8 -5
  221. package/dest/public/public_tx_simulator.d.ts.map +1 -1
  222. package/dest/public/public_tx_simulator.js +306 -317
  223. package/dest/public/side_effect_errors.js +1 -2
  224. package/dest/public/side_effect_trace.d.ts +16 -10
  225. package/dest/public/side_effect_trace.d.ts.map +1 -1
  226. package/dest/public/side_effect_trace.js +65 -132
  227. package/dest/public/side_effect_trace_interface.d.ts +9 -7
  228. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  229. package/dest/public/side_effect_trace_interface.js +1 -2
  230. package/dest/public/unique_class_ids.js +23 -28
  231. package/dest/public/utils.d.ts +2 -2
  232. package/dest/public/utils.d.ts.map +1 -1
  233. package/dest/public/utils.js +17 -12
  234. package/dest/server.d.ts +4 -4
  235. package/dest/server.d.ts.map +1 -1
  236. package/dest/server.js +3 -5
  237. package/dest/test/utils.d.ts +3 -2
  238. package/dest/test/utils.d.ts.map +1 -1
  239. package/dest/test/utils.js +9 -7
  240. package/package.json +16 -18
  241. package/src/client.ts +4 -0
  242. package/src/{public → common}/db_interfaces.ts +8 -40
  243. package/src/common/debug_fn_name.ts +4 -2
  244. package/src/common/errors.ts +5 -5
  245. package/src/common/index.ts +2 -1
  246. package/src/common/message_load_oracle_inputs.ts +2 -2
  247. package/src/common/stats/index.ts +1 -0
  248. package/src/{stats → common/stats}/stats.ts +2 -2
  249. package/src/{acvm → private/acvm}/acvm.ts +5 -5
  250. package/src/{acvm → private/acvm}/acvm_types.ts +1 -1
  251. package/src/{acvm → private/acvm}/deserialize.ts +2 -2
  252. package/src/{acvm → private/acvm}/oracle/index.ts +1 -1
  253. package/src/{acvm → private/acvm}/oracle/oracle.ts +22 -12
  254. package/src/{acvm → private/acvm}/oracle/typed_oracle.ts +50 -55
  255. package/src/{acvm → private/acvm}/serialize.ts +10 -3
  256. package/src/{client → private}/client_execution_context.ts +54 -37
  257. package/src/{client → private}/db_oracle.ts +20 -20
  258. package/src/{client → private}/execution_note_cache.ts +3 -3
  259. package/src/{common → private}/hashed_values_cache.ts +2 -2
  260. package/src/private/index.ts +12 -0
  261. package/src/{client → private}/pick_notes.ts +1 -1
  262. package/src/{client → private}/private_execution.ts +46 -14
  263. package/src/{providers → private/providers}/acvm_native.ts +6 -6
  264. package/src/{providers → private/providers}/acvm_wasm.ts +4 -4
  265. package/src/{providers → private/providers}/acvm_wasm_with_blobs.ts +5 -5
  266. package/src/{providers → private/providers}/factory.ts +1 -1
  267. package/src/{common → private/providers}/simulation_provider.ts +5 -5
  268. package/src/{client → private}/simulator.ts +31 -123
  269. package/src/{client → private}/unconstrained_execution.ts +7 -7
  270. package/src/{client → private}/view_data_oracle.ts +25 -28
  271. package/src/{avm → public/avm}/avm_context.ts +12 -7
  272. package/src/{avm → public/avm}/avm_contract_call_result.ts +6 -6
  273. package/src/{avm → public/avm}/avm_execution_environment.ts +2 -2
  274. package/src/{avm → public/avm}/avm_gas.ts +1 -3
  275. package/src/{avm → public/avm}/avm_machine_state.ts +2 -2
  276. package/src/{avm → public/avm}/avm_memory_types.ts +4 -4
  277. package/src/{avm → public/avm}/avm_simulator.ts +12 -6
  278. package/src/{avm → public/avm}/errors.ts +5 -4
  279. package/src/{avm → public/avm}/fixtures/avm_simulation_tester.ts +16 -15
  280. package/src/{avm → public/avm}/fixtures/base_avm_simulation_tester.ts +38 -40
  281. package/src/{avm → public/avm}/fixtures/index.ts +17 -12
  282. package/src/{avm → public/avm}/fixtures/simple_contract_data_source.ts +64 -9
  283. package/src/{avm → public/avm}/index.ts +1 -1
  284. package/src/public/avm/journal/index.ts +1 -0
  285. package/src/{avm → public/avm}/journal/journal.ts +332 -305
  286. package/src/{avm → public/avm}/journal/nullifiers.ts +20 -19
  287. package/src/{avm → public/avm}/journal/public_storage.ts +2 -2
  288. package/src/{avm → public/avm}/opcodes/contract.ts +1 -1
  289. package/src/{avm → public/avm}/opcodes/control_flow.ts +1 -1
  290. package/src/{avm → public/avm}/opcodes/conversion.ts +1 -1
  291. package/src/{avm → public/avm}/opcodes/ec_add.ts +2 -2
  292. package/src/{avm → public/avm}/opcodes/external_calls.ts +5 -6
  293. package/src/{avm → public/avm}/opcodes/hashing.ts +1 -1
  294. package/src/public/avm/opcodes/index.ts +15 -0
  295. package/src/{avm → public/avm}/opcodes/instruction.ts +2 -2
  296. package/src/{avm → public/avm}/opcodes/misc.ts +1 -1
  297. package/src/public/avm/serialization/bytecode_serialization.ts +204 -0
  298. package/src/{avm → public/avm}/serialization/instruction_serialization.ts +0 -1
  299. package/src/{avm → public/avm}/test_utils.ts +10 -7
  300. package/src/public/execution.ts +9 -12
  301. package/src/public/fixtures/public_tx_simulation_tester.ts +45 -63
  302. package/src/public/fixtures/utils.ts +8 -43
  303. package/src/public/index.ts +3 -2
  304. package/src/public/public_db_sources.ts +55 -188
  305. package/src/public/public_processor.ts +66 -47
  306. package/src/public/public_processor_metrics.ts +3 -3
  307. package/src/public/public_tx_context.ts +69 -74
  308. package/src/public/public_tx_simulator.ts +35 -27
  309. package/src/public/side_effect_trace.ts +67 -140
  310. package/src/public/side_effect_trace_interface.ts +10 -23
  311. package/src/public/unique_class_ids.ts +1 -1
  312. package/src/public/utils.ts +2 -2
  313. package/src/server.ts +4 -4
  314. package/src/test/utils.ts +5 -3
  315. package/dest/acvm/acvm.d.ts.map +0 -1
  316. package/dest/acvm/acvm.js +0 -73
  317. package/dest/acvm/acvm_types.d.ts.map +0 -1
  318. package/dest/acvm/acvm_types.js +0 -2
  319. package/dest/acvm/deserialize.d.ts.map +0 -1
  320. package/dest/acvm/deserialize.js +0 -46
  321. package/dest/acvm/index.d.ts.map +0 -1
  322. package/dest/acvm/index.js +0 -6
  323. package/dest/acvm/oracle/index.d.ts.map +0 -1
  324. package/dest/acvm/oracle/index.js +0 -3
  325. package/dest/acvm/oracle/oracle.d.ts.map +0 -1
  326. package/dest/acvm/oracle/oracle.js +0 -230
  327. package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
  328. package/dest/acvm/oracle/typed_oracle.js +0 -131
  329. package/dest/acvm/serialize.d.ts.map +0 -1
  330. package/dest/acvm/serialize.js +0 -48
  331. package/dest/avm/avm_context.d.ts.map +0 -1
  332. package/dest/avm/avm_context.js +0 -44
  333. package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
  334. package/dest/avm/avm_contract_call_result.js +0 -45
  335. package/dest/avm/avm_execution_environment.d.ts.map +0 -1
  336. package/dest/avm/avm_execution_environment.js +0 -28
  337. package/dest/avm/avm_gas.d.ts.map +0 -1
  338. package/dest/avm/avm_gas.js +0 -170
  339. package/dest/avm/avm_machine_state.d.ts.map +0 -1
  340. package/dest/avm/avm_machine_state.js +0 -112
  341. package/dest/avm/avm_memory_types.d.ts.map +0 -1
  342. package/dest/avm/avm_memory_types.js +0 -327
  343. package/dest/avm/avm_simulator.d.ts.map +0 -1
  344. package/dest/avm/avm_simulator.js +0 -193
  345. package/dest/avm/avm_tree.d.ts +0 -282
  346. package/dest/avm/avm_tree.d.ts.map +0 -1
  347. package/dest/avm/avm_tree.js +0 -684
  348. package/dest/avm/bytecode_utils.d.ts.map +0 -1
  349. package/dest/avm/bytecode_utils.js +0 -15
  350. package/dest/avm/errors.d.ts.map +0 -1
  351. package/dest/avm/errors.js +0 -196
  352. package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  353. package/dest/avm/fixtures/avm_simulation_tester.js +0 -73
  354. package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  355. package/dest/avm/fixtures/base_avm_simulation_tester.js +0 -76
  356. package/dest/avm/fixtures/index.d.ts.map +0 -1
  357. package/dest/avm/fixtures/index.js +0 -134
  358. package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  359. package/dest/avm/fixtures/simple_contract_data_source.js +0 -75
  360. package/dest/avm/index.d.ts.map +0 -1
  361. package/dest/avm/index.js +0 -4
  362. package/dest/avm/journal/index.d.ts.map +0 -1
  363. package/dest/avm/journal/index.js +0 -2
  364. package/dest/avm/journal/journal.d.ts.map +0 -1
  365. package/dest/avm/journal/journal.js +0 -499
  366. package/dest/avm/journal/nullifiers.d.ts.map +0 -1
  367. package/dest/avm/journal/nullifiers.js +0 -99
  368. package/dest/avm/journal/public_storage.d.ts.map +0 -1
  369. package/dest/avm/journal/public_storage.js +0 -159
  370. package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
  371. package/dest/avm/opcodes/accrued_substate.js +0 -215
  372. package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
  373. package/dest/avm/opcodes/addressing_mode.js +0 -81
  374. package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
  375. package/dest/avm/opcodes/arithmetic.js +0 -70
  376. package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
  377. package/dest/avm/opcodes/bitwise.js +0 -90
  378. package/dest/avm/opcodes/comparators.d.ts.map +0 -1
  379. package/dest/avm/opcodes/comparators.js +0 -40
  380. package/dest/avm/opcodes/contract.d.ts.map +0 -1
  381. package/dest/avm/opcodes/contract.js +0 -63
  382. package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
  383. package/dest/avm/opcodes/control_flow.js +0 -97
  384. package/dest/avm/opcodes/conversion.d.ts.map +0 -1
  385. package/dest/avm/opcodes/conversion.js +0 -64
  386. package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
  387. package/dest/avm/opcodes/ec_add.js +0 -82
  388. package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
  389. package/dest/avm/opcodes/environment_getters.js +0 -78
  390. package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
  391. package/dest/avm/opcodes/external_calls.js +0 -169
  392. package/dest/avm/opcodes/hashing.d.ts.map +0 -1
  393. package/dest/avm/opcodes/hashing.js +0 -103
  394. package/dest/avm/opcodes/index.d.ts.map +0 -1
  395. package/dest/avm/opcodes/index.js +0 -16
  396. package/dest/avm/opcodes/instruction.d.ts.map +0 -1
  397. package/dest/avm/opcodes/instruction.js +0 -100
  398. package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
  399. package/dest/avm/opcodes/instruction_impl.js +0 -33
  400. package/dest/avm/opcodes/memory.d.ts.map +0 -1
  401. package/dest/avm/opcodes/memory.js +0 -226
  402. package/dest/avm/opcodes/misc.d.ts.map +0 -1
  403. package/dest/avm/opcodes/misc.js +0 -45
  404. package/dest/avm/opcodes/multi_scalar_mul.d.ts +0 -16
  405. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +0 -1
  406. package/dest/avm/opcodes/multi_scalar_mul.js +0 -112
  407. package/dest/avm/opcodes/storage.d.ts.map +0 -1
  408. package/dest/avm/opcodes/storage.js +0 -61
  409. package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
  410. package/dest/avm/serialization/buffer_cursor.js +0 -99
  411. package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  412. package/dest/avm/serialization/bytecode_serialization.js +0 -132
  413. package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
  414. package/dest/avm/serialization/instruction_serialization.js +0 -187
  415. package/dest/avm/test_utils.d.ts.map +0 -1
  416. package/dest/avm/test_utils.js +0 -52
  417. package/dest/client/client_execution_context.d.ts.map +0 -1
  418. package/dest/client/client_execution_context.js +0 -392
  419. package/dest/client/db_oracle.d.ts.map +0 -1
  420. package/dest/client/db_oracle.js +0 -17
  421. package/dest/client/execution_note_cache.d.ts.map +0 -1
  422. package/dest/client/execution_note_cache.js +0 -181
  423. package/dest/client/index.d.ts +0 -16
  424. package/dest/client/index.d.ts.map +0 -1
  425. package/dest/client/index.js +0 -15
  426. package/dest/client/pick_notes.d.ts.map +0 -1
  427. package/dest/client/pick_notes.js +0 -54
  428. package/dest/client/private_execution.d.ts +0 -19
  429. package/dest/client/private_execution.d.ts.map +0 -1
  430. package/dest/client/private_execution.js +0 -72
  431. package/dest/client/simulator.d.ts +0 -60
  432. package/dest/client/simulator.d.ts.map +0 -1
  433. package/dest/client/simulator.js +0 -136
  434. package/dest/client/unconstrained_execution.d.ts.map +0 -1
  435. package/dest/client/unconstrained_execution.js +0 -30
  436. package/dest/client/view_data_oracle.d.ts.map +0 -1
  437. package/dest/client/view_data_oracle.js +0 -268
  438. package/dest/common/hashed_values_cache.d.ts.map +0 -1
  439. package/dest/common/hashed_values_cache.js +0 -50
  440. package/dest/common/simulation_provider.d.ts.map +0 -1
  441. package/dest/common/simulation_provider.js +0 -27
  442. package/dest/common.d.ts +0 -2
  443. package/dest/common.d.ts.map +0 -1
  444. package/dest/common.js +0 -2
  445. package/dest/providers/acvm_native.d.ts.map +0 -1
  446. package/dest/providers/acvm_native.js +0 -125
  447. package/dest/providers/acvm_wasm.d.ts.map +0 -1
  448. package/dest/providers/acvm_wasm.js +0 -54
  449. package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  450. package/dest/providers/factory.d.ts.map +0 -1
  451. package/dest/providers/factory.js +0 -27
  452. package/dest/providers/index.d.ts +0 -5
  453. package/dest/providers/index.d.ts.map +0 -1
  454. package/dest/providers/index.js +0 -5
  455. package/dest/public/db_interfaces.d.ts.map +0 -1
  456. package/dest/public/db_interfaces.js +0 -2
  457. package/dest/public/fee_payment.d.ts +0 -11
  458. package/dest/public/fee_payment.d.ts.map +0 -1
  459. package/dest/public/fee_payment.js +0 -21
  460. package/dest/stats/index.d.ts.map +0 -1
  461. package/dest/stats/index.js +0 -2
  462. package/dest/stats/stats.d.ts.map +0 -1
  463. package/dest/stats/stats.js +0 -11
  464. package/src/avm/avm_tree.ts +0 -887
  465. package/src/avm/opcodes/multi_scalar_mul.ts +0 -121
  466. package/src/avm/serialization/bytecode_serialization.ts +0 -212
  467. package/src/client/index.ts +0 -15
  468. package/src/common.ts +0 -1
  469. package/src/providers/index.ts +0 -4
  470. package/src/public/fee_payment.ts +0 -23
  471. /package/dest/{stats → common/stats}/index.d.ts +0 -0
  472. /package/{src/stats/index.ts → dest/common/stats/index.js} +0 -0
  473. /package/dest/{acvm → private/acvm}/index.d.ts +0 -0
  474. /package/dest/{avm → public/avm}/avm_gas.d.ts +0 -0
  475. /package/dest/{avm → public/avm}/bytecode_utils.d.ts +0 -0
  476. /package/dest/{avm → public/avm}/journal/index.d.ts +0 -0
  477. /package/{src/avm/journal/index.ts → dest/public/avm/journal/index.js} +0 -0
  478. /package/dest/{avm → public/avm}/opcodes/accrued_substate.d.ts +0 -0
  479. /package/dest/{avm → public/avm}/opcodes/addressing_mode.d.ts +0 -0
  480. /package/dest/{avm → public/avm}/opcodes/arithmetic.d.ts +0 -0
  481. /package/dest/{avm → public/avm}/opcodes/bitwise.d.ts +0 -0
  482. /package/dest/{avm → public/avm}/opcodes/comparators.d.ts +0 -0
  483. /package/dest/{avm → public/avm}/opcodes/contract.d.ts +0 -0
  484. /package/dest/{avm → public/avm}/opcodes/control_flow.d.ts +0 -0
  485. /package/dest/{avm → public/avm}/opcodes/environment_getters.d.ts +0 -0
  486. /package/dest/{avm → public/avm}/opcodes/external_calls.d.ts +0 -0
  487. /package/dest/{avm → public/avm}/opcodes/index.d.ts +0 -0
  488. /package/{src/avm/opcodes/index.ts → dest/public/avm/opcodes/index.js} +0 -0
  489. /package/dest/{avm → public/avm}/opcodes/instruction_impl.d.ts +0 -0
  490. /package/dest/{avm → public/avm}/opcodes/memory.d.ts +0 -0
  491. /package/dest/{avm → public/avm}/opcodes/storage.d.ts +0 -0
  492. /package/dest/{avm → public/avm}/serialization/buffer_cursor.d.ts +0 -0
  493. /package/src/{acvm → private/acvm}/index.ts +0 -0
  494. /package/src/{avm → public/avm}/bytecode_utils.ts +0 -0
  495. /package/src/{avm → public/avm}/opcodes/.eslintrc.cjs +0 -0
  496. /package/src/{avm → public/avm}/opcodes/accrued_substate.ts +0 -0
  497. /package/src/{avm → public/avm}/opcodes/addressing_mode.ts +0 -0
  498. /package/src/{avm → public/avm}/opcodes/arithmetic.ts +0 -0
  499. /package/src/{avm → public/avm}/opcodes/bitwise.ts +0 -0
  500. /package/src/{avm → public/avm}/opcodes/comparators.ts +0 -0
  501. /package/src/{avm → public/avm}/opcodes/environment_getters.ts +0 -0
  502. /package/src/{avm → public/avm}/opcodes/instruction_impl.ts +0 -0
  503. /package/src/{avm → public/avm}/opcodes/memory.ts +0 -0
  504. /package/src/{avm → public/avm}/opcodes/storage.ts +0 -0
  505. /package/src/{avm → public/avm}/serialization/buffer_cursor.ts +0 -0
@@ -0,0 +1,180 @@
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
+ successOffset;
12
+ // Informs (de)serialization. See Instruction.deserialize.
13
+ static wireFormat = [
14
+ OperandType.UINT8,
15
+ OperandType.UINT16,
16
+ OperandType.UINT16,
17
+ OperandType.UINT16,
18
+ OperandType.UINT16,
19
+ OperandType.UINT16,
20
+ OperandType.UINT16
21
+ ];
22
+ constructor(indirect, gasOffset, addrOffset, argsOffset, argsSizeOffset, successOffset){
23
+ super(), this.indirect = indirect, this.gasOffset = gasOffset, this.addrOffset = addrOffset, this.argsOffset = argsOffset, this.argsSizeOffset = argsSizeOffset, this.successOffset = successOffset;
24
+ }
25
+ async execute(context) {
26
+ const memory = context.machineState.memory;
27
+ const operands = [
28
+ this.gasOffset,
29
+ this.addrOffset,
30
+ this.argsOffset,
31
+ this.argsSizeOffset,
32
+ this.successOffset
33
+ ];
34
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
35
+ const [gasOffset, addrOffset, argsOffset, argsSizeOffset, successOffset] = addressing.resolve(operands, memory);
36
+ memory.checkTags(TypeTag.FIELD, gasOffset, gasOffset + 1);
37
+ memory.checkTag(TypeTag.FIELD, addrOffset);
38
+ memory.checkTag(TypeTag.UINT32, argsSizeOffset);
39
+ const calldataSize = memory.get(argsSizeOffset).toNumber();
40
+ const calldata = memory.getSlice(argsOffset, calldataSize).map((f)=>f.toFr());
41
+ memory.checkTagsRange(TypeTag.FIELD, argsOffset, calldataSize);
42
+ const callAddress = memory.getAs(addrOffset);
43
+ // If we are already in a static call, we propagate the environment.
44
+ const callType = context.environment.isStaticCall ? 'STATICCALL' : this.type;
45
+ // First we consume the gas for this operation.
46
+ context.machineState.consumeGas(this.gasCost(calldataSize));
47
+ // Then we consume the gas allocated for the nested call. The excess will be refunded later.
48
+ // Gas allocation is capped by the amount of gas left in the current context.
49
+ // We have to do some dancing here because the gas allocation is a field,
50
+ // but in the machine state we track gas as a number.
51
+ const allocatedL2Gas = Number(BigIntMin(memory.get(gasOffset).toBigInt(), BigInt(context.machineState.l2GasLeft)));
52
+ const allocatedDaGas = Number(BigIntMin(memory.get(gasOffset + 1).toBigInt(), BigInt(context.machineState.daGasLeft)));
53
+ const allocatedGas = {
54
+ l2Gas: allocatedL2Gas,
55
+ daGas: allocatedDaGas
56
+ };
57
+ context.machineState.consumeGas(allocatedGas);
58
+ const aztecAddress = callAddress.toAztecAddress();
59
+ const nestedContext = await context.createNestedContractCallContext(aztecAddress, calldata, allocatedGas, callType);
60
+ const simulator = await context.provideSimulator(nestedContext);
61
+ const nestedCallResults = await simulator.execute();
62
+ const success = !nestedCallResults.reverted;
63
+ // Save return/revert data for later.
64
+ const fullReturnData = nestedCallResults.output;
65
+ context.machineState.nestedReturndata = fullReturnData;
66
+ // If the nested call reverted, we try to save the reason and the revert data.
67
+ // This will be used by the caller to try to reconstruct the call stack.
68
+ // This is only a heuristic and may not always work. It is intended to work
69
+ // for the case where a nested call reverts and the caller always rethrows
70
+ // (in Noir code).
71
+ if (!success) {
72
+ context.machineState.collectedRevertInfo = {
73
+ revertDataRepresentative: fullReturnData,
74
+ recursiveRevertReason: nestedCallResults.revertReason
75
+ };
76
+ }
77
+ // Write our success flag into memory.
78
+ memory.set(successOffset, new Uint1(success ? 1 : 0));
79
+ // Refund unused gas
80
+ context.machineState.refundGas(nestedCallResults.gasLeft);
81
+ // Merge nested call's state and trace based on whether it succeeded.
82
+ if (success) {
83
+ await context.persistableState.merge(nestedContext.persistableState);
84
+ } else {
85
+ await context.persistableState.reject(nestedContext.persistableState);
86
+ }
87
+ }
88
+ }
89
+ export class Call extends ExternalCall {
90
+ static type = 'CALL';
91
+ static opcode = Opcode.CALL;
92
+ get type() {
93
+ return Call.type;
94
+ }
95
+ }
96
+ export class StaticCall extends ExternalCall {
97
+ static type = 'STATICCALL';
98
+ static opcode = Opcode.STATICCALL;
99
+ get type() {
100
+ return StaticCall.type;
101
+ }
102
+ }
103
+ export class Return extends Instruction {
104
+ indirect;
105
+ returnOffset;
106
+ returnSizeOffset;
107
+ static type = 'RETURN';
108
+ static opcode = Opcode.RETURN;
109
+ // Informs (de)serialization. See Instruction.deserialize.
110
+ static wireFormat = [
111
+ OperandType.UINT8,
112
+ OperandType.UINT8,
113
+ OperandType.UINT16,
114
+ OperandType.UINT16
115
+ ];
116
+ constructor(indirect, returnOffset, returnSizeOffset){
117
+ super(), this.indirect = indirect, this.returnOffset = returnOffset, this.returnSizeOffset = returnSizeOffset;
118
+ }
119
+ async execute(context) {
120
+ const memory = context.machineState.memory;
121
+ const operands = [
122
+ this.returnOffset,
123
+ this.returnSizeOffset
124
+ ];
125
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
126
+ const [returnOffset, returnSizeOffset] = addressing.resolve(operands, memory);
127
+ memory.checkTag(TypeTag.UINT32, returnSizeOffset);
128
+ const returnSize = memory.get(returnSizeOffset).toNumber();
129
+ context.machineState.consumeGas(this.gasCost(returnSize));
130
+ const output = memory.getSlice(returnOffset, returnSize).map((word)=>word.toFr());
131
+ context.machineState.return(output);
132
+ }
133
+ handlesPC() {
134
+ return true;
135
+ }
136
+ }
137
+ export class Revert extends Instruction {
138
+ indirect;
139
+ returnOffset;
140
+ retSizeOffset;
141
+ static type = 'REVERT';
142
+ static opcode = Opcode.REVERT_8;
143
+ static wireFormat8 = [
144
+ OperandType.UINT8,
145
+ OperandType.UINT8,
146
+ OperandType.UINT8,
147
+ OperandType.UINT8
148
+ ];
149
+ static wireFormat16 = [
150
+ OperandType.UINT8,
151
+ OperandType.UINT8,
152
+ OperandType.UINT16,
153
+ OperandType.UINT16
154
+ ];
155
+ constructor(indirect, returnOffset, retSizeOffset){
156
+ super(), this.indirect = indirect, this.returnOffset = returnOffset, this.retSizeOffset = retSizeOffset;
157
+ }
158
+ async execute(context) {
159
+ const memory = context.machineState.memory;
160
+ const operands = [
161
+ this.returnOffset,
162
+ this.retSizeOffset
163
+ ];
164
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
165
+ const [returnOffset, retSizeOffset] = addressing.resolve(operands, memory);
166
+ memory.checkTag(TypeTag.UINT32, retSizeOffset);
167
+ const retSize = memory.get(retSizeOffset).toNumber();
168
+ context.machineState.consumeGas(this.gasCost(retSize));
169
+ const output = memory.getSlice(returnOffset, retSize).map((word)=>word.toFr());
170
+ context.machineState.revert(output);
171
+ }
172
+ // We don't want to increase the PC after reverting because it breaks messages.
173
+ // Maybe we can remove this once messages don't depend on PCs.
174
+ handlesPC() {
175
+ return true;
176
+ }
177
+ }
178
+ /** Returns the smaller of two bigints. */ function BigIntMin(a, b) {
179
+ return a < b ? a : b;
180
+ }
@@ -1,4 +1,4 @@
1
- import { type AvmContext } from '../avm_context.js';
1
+ import type { AvmContext } from '../avm_context.js';
2
2
  import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
3
3
  import { Instruction } from './instruction.js';
4
4
  export declare class Poseidon2 extends Instruction {
@@ -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"}
@@ -0,0 +1,114 @@
1
+ import { keccakf1600, poseidon2Permutation, sha256Compression } from '@aztec/foundation/crypto';
2
+ import { Field, TypeTag, Uint32, Uint64 } from '../avm_memory_types.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 Poseidon2 extends Instruction {
7
+ indirect;
8
+ inputStateOffset;
9
+ outputStateOffset;
10
+ static type = 'POSEIDON2';
11
+ static opcode = Opcode.POSEIDON2;
12
+ static stateSize = 4;
13
+ // Informs (de)serialization. See Instruction.deserialize.
14
+ static wireFormat = [
15
+ OperandType.UINT8,
16
+ OperandType.UINT8,
17
+ OperandType.UINT16,
18
+ OperandType.UINT16
19
+ ];
20
+ constructor(indirect, inputStateOffset, outputStateOffset){
21
+ super(), this.indirect = indirect, this.inputStateOffset = inputStateOffset, this.outputStateOffset = outputStateOffset;
22
+ }
23
+ async execute(context) {
24
+ const memory = context.machineState.memory;
25
+ context.machineState.consumeGas(this.gasCost());
26
+ const operands = [
27
+ this.inputStateOffset,
28
+ this.outputStateOffset
29
+ ];
30
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
31
+ const [inputOffset, outputOffset] = addressing.resolve(operands, memory);
32
+ const inputState = memory.getSlice(inputOffset, Poseidon2.stateSize);
33
+ memory.checkTagsRange(TypeTag.FIELD, inputOffset, Poseidon2.stateSize);
34
+ const outputState = await poseidon2Permutation(inputState);
35
+ memory.setSlice(outputOffset, outputState.map((word)=>new Field(word)));
36
+ }
37
+ }
38
+ export class KeccakF1600 extends Instruction {
39
+ indirect;
40
+ dstOffset;
41
+ inputOffset;
42
+ static type = 'KECCAKF1600';
43
+ static opcode = Opcode.KECCAKF1600;
44
+ // Informs (de)serialization. See Instruction.deserialize.
45
+ static wireFormat = [
46
+ OperandType.UINT8,
47
+ OperandType.UINT8,
48
+ OperandType.UINT16,
49
+ OperandType.UINT16
50
+ ];
51
+ constructor(indirect, dstOffset, inputOffset){
52
+ super(), this.indirect = indirect, this.dstOffset = dstOffset, this.inputOffset = inputOffset;
53
+ }
54
+ // pub fn keccakf1600(input: [u64; 25]) -> [u64; 25]
55
+ async execute(context) {
56
+ const inputSize = 25;
57
+ const memory = context.machineState.memory;
58
+ const operands = [
59
+ this.dstOffset,
60
+ this.inputOffset
61
+ ];
62
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
63
+ const [dstOffset, inputOffset] = addressing.resolve(operands, memory);
64
+ context.machineState.consumeGas(this.gasCost());
65
+ const stateData = memory.getSlice(inputOffset, inputSize).map((word)=>word.toBigInt());
66
+ memory.checkTagsRange(TypeTag.UINT64, inputOffset, inputSize);
67
+ const updatedState = keccakf1600(stateData);
68
+ const res = updatedState.map((word)=>new Uint64(word));
69
+ memory.setSlice(dstOffset, res);
70
+ }
71
+ }
72
+ export class Sha256Compression extends Instruction {
73
+ indirect;
74
+ outputOffset;
75
+ stateOffset;
76
+ inputsOffset;
77
+ static type = 'SHA256COMPRESSION';
78
+ static opcode = Opcode.SHA256COMPRESSION;
79
+ // Informs (de)serialization. See Instruction.deserialize.
80
+ static wireFormat = [
81
+ OperandType.UINT8,
82
+ OperandType.UINT8,
83
+ OperandType.UINT16,
84
+ OperandType.UINT16,
85
+ OperandType.UINT16
86
+ ];
87
+ constructor(indirect, outputOffset, stateOffset, inputsOffset){
88
+ super(), this.indirect = indirect, this.outputOffset = outputOffset, this.stateOffset = stateOffset, this.inputsOffset = inputsOffset;
89
+ }
90
+ async execute(context) {
91
+ const STATE_SIZE = 8;
92
+ const INPUTS_SIZE = 16;
93
+ const memory = context.machineState.memory;
94
+ const operands = [
95
+ this.outputOffset,
96
+ this.stateOffset,
97
+ this.inputsOffset
98
+ ];
99
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
100
+ const [outputOffset, stateOffset, inputsOffset] = addressing.resolve(operands, memory);
101
+ // Note: size of output is same as size of state
102
+ context.machineState.consumeGas(this.gasCost());
103
+ const inputs = Uint32Array.from(memory.getSlice(inputsOffset, INPUTS_SIZE).map((word)=>word.toNumber()));
104
+ const state = Uint32Array.from(memory.getSlice(stateOffset, STATE_SIZE).map((word)=>word.toNumber()));
105
+ memory.checkTagsRange(TypeTag.UINT32, inputsOffset, INPUTS_SIZE);
106
+ memory.checkTagsRange(TypeTag.UINT32, stateOffset, STATE_SIZE);
107
+ const output = sha256Compression(state, inputs);
108
+ // Conversion required from Uint32Array to Uint32[] (can't map directly, need `...`)
109
+ const res = [
110
+ ...output
111
+ ].map((word)=>new Uint32(word));
112
+ memory.setSlice(outputOffset, res);
113
+ }
114
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -2,8 +2,8 @@
2
2
  /// <reference types="node" resolution-mode="require"/>
3
3
  import type { AvmContext } from '../avm_context.js';
4
4
  import { type Gas } from '../avm_gas.js';
5
- import { type BufferCursor } from '../serialization/buffer_cursor.js';
6
- import { type Serializable } from '../serialization/bytecode_serialization.js';
5
+ import type { BufferCursor } from '../serialization/buffer_cursor.js';
6
+ import type { Serializable } from '../serialization/bytecode_serialization.js';
7
7
  import { Opcode, type OperandType } from '../serialization/instruction_serialization.js';
8
8
  type InstructionConstructor = {
9
9
  new (...args: any[]): Instruction;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/instruction.ts"],"names":[],"mappings":";;AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,GAAG,EAAqD,MAAM,eAAe,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAA4B,MAAM,+CAA+C,CAAC;AAEnH,KAAK,sBAAsB,GAAG;IAC5B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,8BAAsB,WAAW;IAC/B;;;;OAIG;aACa,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3D;;OAEG;IACI,SAAS,IAAI,OAAO;IAI3B;;;;OAIG;IACI,QAAQ,IAAI,MAAM;WAUX,WAAW,CACvB,IAAI,EAAE,sBAAsB,GAAG;QAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QAAC,EAAE,EAAE,GAAG,CAAA;KAAE,EACrE,GAAG,EAAE,YAAY,GAAG,MAAM,GACzB,WAAW;IAKP,SAAS,IAAI,MAAM;IAO1B;;;;;OAKG;IACI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,GAAG,YAAY;IAShF;;;;;OAKG;WACW,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE;2BAEjD,YAAY,GAAG,MAAM,KAAG,WAAW;;IAQ1D;;;OAGG;IACH,SAAS,CAAC,OAAO,CAAC,aAAa,GAAE,MAAU,GAAG,GAAG;IAMjD;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAMxB;IAED;;;OAGG;IACH,IAAW,MAAM,IAAI,MAAM,CAM1B;CACF"}
@@ -0,0 +1,91 @@
1
+ import { strict as assert } from 'assert';
2
+ import { getBaseGasCost, getDynamicGasCost, mulGas, sumGas } from '../avm_gas.js';
3
+ import { Opcode, deserialize, serializeAs } from '../serialization/instruction_serialization.js';
4
+ /**
5
+ * Parent class for all AVM instructions.
6
+ * It's most important aspects are execute and (de)serialize.
7
+ */ export class Instruction {
8
+ /**
9
+ * Whether the instruction will modify the PC itself.
10
+ */ handlesPC() {
11
+ return false;
12
+ }
13
+ /**
14
+ * Generate a string representation of the instruction including
15
+ * the instruction sub-class name all of its flags and operands.
16
+ * @returns Thee string representation.
17
+ */ toString() {
18
+ let instructionStr = this.constructor.name + ': ';
19
+ // assumes that all properties are flags or operands
20
+ for (const prop of Object.getOwnPropertyNames(this)){
21
+ instructionStr += `${prop}:${this[prop].toString()}, `;
22
+ }
23
+ return instructionStr;
24
+ }
25
+ // Default deserialization which uses Class.opcode and Class.wireFormat.
26
+ static deserialize(buf) {
27
+ return this.as(this.wireFormat).deserialize(buf);
28
+ }
29
+ // Default serialization which uses Class.opcode and Class.wireFormat.
30
+ serialize() {
31
+ const klass = this.constructor;
32
+ assert(klass.opcode !== undefined && klass.opcode !== null);
33
+ assert(klass.wireFormat !== undefined && klass.wireFormat !== null);
34
+ return this.as(klass.opcode, klass.wireFormat).serialize();
35
+ }
36
+ /**
37
+ * Returns a new instruction instance that can be serialized with the given opcode and wire format.
38
+ * @param opcode The opcode of the instruction.
39
+ * @param wireFormat The wire format of the instruction.
40
+ * @returns The new instruction instance.
41
+ */ as(opcode, wireFormat) {
42
+ return Object.defineProperty(this, 'serialize', {
43
+ value: ()=>{
44
+ return serializeAs(wireFormat, opcode, this);
45
+ },
46
+ enumerable: false
47
+ });
48
+ }
49
+ /**
50
+ * Returns a new instruction class that can be deserialized with the given opcode and wire format.
51
+ * @param opcode The opcode of the instruction.
52
+ * @param wireFormat The wire format of the instruction.
53
+ * @returns The new instruction class.
54
+ */ static as(wireFormat) {
55
+ return Object.assign(this, {
56
+ deserialize: (buf)=>{
57
+ const res = deserialize(buf, wireFormat);
58
+ const args = res.slice(1); // Remove opcode.
59
+ return new this(...args);
60
+ }
61
+ });
62
+ }
63
+ /**
64
+ * Computes gas cost for the instruction based on its base cost and memory operations.
65
+ * @returns Gas cost.
66
+ */ gasCost(dynMultiplier = 0) {
67
+ const baseGasCost = getBaseGasCost(this.opcode);
68
+ const dynGasCost = mulGas(getDynamicGasCost(this.opcode), dynMultiplier);
69
+ return sumGas(baseGasCost, dynGasCost);
70
+ }
71
+ /**
72
+ * Returns the stringified type of the instruction.
73
+ * Instruction sub-classes should have a static `type` property.
74
+ */ get type() {
75
+ const type = 'type' in this.constructor && this.constructor.type;
76
+ if (!type) {
77
+ throw new Error(`Instruction class ${this.constructor.name} does not have a static 'type' property defined.`);
78
+ }
79
+ return type;
80
+ }
81
+ /**
82
+ * Returns the opcode of the instruction.
83
+ * Instruction sub-classes should have a static `opcode` property.
84
+ */ get opcode() {
85
+ const opcode = 'opcode' in this.constructor ? this.constructor.opcode : undefined;
86
+ if (opcode === undefined || Opcode[opcode] === undefined) {
87
+ throw new Error(`Instruction class ${this.constructor.name} does not have a static 'opcode' property defined.`);
88
+ }
89
+ return opcode;
90
+ }
91
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction_impl.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/instruction_impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qFAAqF;AACrF,eAAO,MAAM,uBAAuB,eAMnC,CAAC;AACF,eAAO,MAAM,wBAAwB,eAMpC,CAAC;AAEF;;;GAGG;AACH,8BAAsB,uBAAwB,SAAQ,WAAW;IAK7D,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,OAAO,EAAE,MAAM;IACzB,SAAS,CAAC,OAAO,EAAE,MAAM;IACzB,SAAS,CAAC,SAAS,EAAE,MAAM;IAP7B,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,CAA2B;IACrE,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAA4B;gBAG3D,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM;CAI9B"}
@@ -0,0 +1,30 @@
1
+ import { OperandType } from '../serialization/instruction_serialization.js';
2
+ import { Instruction } from './instruction.js';
3
+ /** Wire format that informs deserialization for instructions with three operands. */ export const ThreeOperandWireFormat8 = [
4
+ OperandType.UINT8,
5
+ OperandType.UINT8,
6
+ OperandType.UINT8,
7
+ OperandType.UINT8,
8
+ OperandType.UINT8
9
+ ];
10
+ export const ThreeOperandWireFormat16 = [
11
+ OperandType.UINT8,
12
+ OperandType.UINT8,
13
+ OperandType.UINT16,
14
+ OperandType.UINT16,
15
+ OperandType.UINT16
16
+ ];
17
+ /**
18
+ * Covers (de)serialization for an instruction with:
19
+ * indirect, inTag, and three operands.
20
+ */ export class ThreeOperandInstruction extends Instruction {
21
+ indirect;
22
+ aOffset;
23
+ bOffset;
24
+ dstOffset;
25
+ static wireFormat8 = ThreeOperandWireFormat8;
26
+ static wireFormat16 = ThreeOperandWireFormat16;
27
+ constructor(indirect, aOffset, bOffset, dstOffset){
28
+ super(), this.indirect = indirect, this.aOffset = aOffset, this.bOffset = bOffset, this.dstOffset = dstOffset;
29
+ }
30
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/memory.ts"],"names":[],"mappings":"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"}