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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/README.md +3 -3
  2. package/dest/client.d.ts +5 -0
  3. package/dest/client.d.ts.map +1 -0
  4. package/dest/client.js +3 -0
  5. package/dest/{public → common}/db_interfaces.d.ts +8 -33
  6. package/dest/common/db_interfaces.d.ts.map +1 -0
  7. package/dest/common/db_interfaces.js +1 -0
  8. package/dest/common/debug_fn_name.d.ts +3 -2
  9. package/dest/common/debug_fn_name.d.ts.map +1 -1
  10. package/dest/common/debug_fn_name.js +2 -5
  11. package/dest/common/errors.d.ts +4 -4
  12. package/dest/common/errors.d.ts.map +1 -1
  13. package/dest/common/errors.js +30 -39
  14. package/dest/common/index.d.ts +2 -1
  15. package/dest/common/index.d.ts.map +1 -1
  16. package/dest/common/index.js +2 -2
  17. package/dest/common/message_load_oracle_inputs.d.ts +2 -2
  18. package/dest/common/message_load_oracle_inputs.d.ts.map +1 -1
  19. package/dest/common/message_load_oracle_inputs.js +8 -8
  20. package/dest/common/stats/index.d.ts.map +1 -0
  21. package/dest/{stats → common/stats}/stats.d.ts +2 -2
  22. package/dest/common/stats/stats.d.ts.map +1 -0
  23. package/dest/common/stats/stats.js +10 -0
  24. package/dest/{acvm → private/acvm}/acvm.d.ts +4 -4
  25. package/dest/private/acvm/acvm.d.ts.map +1 -0
  26. package/dest/private/acvm/acvm.js +70 -0
  27. package/dest/{acvm → private/acvm}/acvm_types.d.ts +1 -1
  28. package/dest/private/acvm/acvm_types.d.ts.map +1 -0
  29. package/dest/private/acvm/acvm_types.js +3 -0
  30. package/dest/{acvm → private/acvm}/deserialize.d.ts +2 -2
  31. package/dest/private/acvm/deserialize.d.ts.map +1 -0
  32. package/dest/private/acvm/deserialize.js +42 -0
  33. package/dest/private/acvm/index.d.ts.map +1 -0
  34. package/dest/private/acvm/index.js +5 -0
  35. package/dest/{acvm → private/acvm}/oracle/index.d.ts +1 -1
  36. package/dest/private/acvm/oracle/index.d.ts.map +1 -0
  37. package/dest/private/acvm/oracle/index.js +2 -0
  38. package/dest/{acvm → private/acvm}/oracle/oracle.d.ts +4 -3
  39. package/dest/private/acvm/oracle/oracle.d.ts.map +1 -0
  40. package/dest/private/acvm/oracle/oracle.js +263 -0
  41. package/dest/{acvm → private/acvm}/oracle/typed_oracle.d.ts +12 -6
  42. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -0
  43. package/dest/private/acvm/oracle/typed_oracle.js +132 -0
  44. package/dest/{acvm → private/acvm}/serialize.d.ts +7 -3
  45. package/dest/private/acvm/serialize.d.ts.map +1 -0
  46. package/dest/private/acvm/serialize.js +46 -0
  47. package/dest/{client → private}/client_execution_context.d.ts +20 -17
  48. package/dest/private/client_execution_context.d.ts.map +1 -0
  49. package/dest/private/client_execution_context.js +378 -0
  50. package/dest/{client → private}/db_oracle.d.ts +19 -7
  51. package/dest/private/db_oracle.d.ts.map +1 -0
  52. package/dest/private/db_oracle.js +14 -0
  53. package/dest/{client → private}/execution_note_cache.d.ts +2 -2
  54. package/dest/private/execution_note_cache.d.ts.map +1 -0
  55. package/dest/private/execution_note_cache.js +180 -0
  56. package/dest/{common → private}/hashed_values_cache.d.ts +2 -2
  57. package/dest/private/hashed_values_cache.d.ts.map +1 -0
  58. package/dest/private/hashed_values_cache.js +46 -0
  59. package/dest/private/index.d.ts +13 -0
  60. package/dest/private/index.d.ts.map +1 -0
  61. package/dest/private/index.js +12 -0
  62. package/dest/{client → private}/pick_notes.d.ts +1 -1
  63. package/dest/private/pick_notes.d.ts.map +1 -0
  64. package/dest/private/pick_notes.js +51 -0
  65. package/dest/private/private_execution.d.ts +24 -0
  66. package/dest/private/private_execution.d.ts.map +1 -0
  67. package/dest/private/private_execution.js +90 -0
  68. package/dest/{providers → private/providers}/acvm_native.d.ts +5 -5
  69. package/dest/private/providers/acvm_native.d.ts.map +1 -0
  70. package/dest/private/providers/acvm_native.js +139 -0
  71. package/dest/{providers → private/providers}/acvm_wasm.d.ts +4 -4
  72. package/dest/private/providers/acvm_wasm.d.ts.map +1 -0
  73. package/dest/private/providers/acvm_wasm.js +62 -0
  74. package/dest/{providers → private/providers}/acvm_wasm_with_blobs.d.ts +5 -5
  75. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +1 -0
  76. package/dest/{providers → private/providers}/acvm_wasm_with_blobs.js +3 -6
  77. package/dest/{providers → private/providers}/factory.d.ts +1 -1
  78. package/dest/private/providers/factory.d.ts.map +1 -0
  79. package/dest/private/providers/factory.js +27 -0
  80. package/dest/{common → private/providers}/simulation_provider.d.ts +5 -5
  81. package/dest/private/providers/simulation_provider.d.ts.map +1 -0
  82. package/dest/private/providers/simulation_provider.js +24 -0
  83. package/dest/private/simulator.d.ts +36 -0
  84. package/dest/private/simulator.d.ts.map +1 -0
  85. package/dest/private/simulator.js +78 -0
  86. package/dest/{client → private}/unconstrained_execution.d.ts +5 -5
  87. package/dest/private/unconstrained_execution.d.ts.map +1 -0
  88. package/dest/private/unconstrained_execution.js +27 -0
  89. package/dest/{client → private}/view_data_oracle.d.ts +15 -7
  90. package/dest/private/view_data_oracle.d.ts.map +1 -0
  91. package/dest/private/view_data_oracle.js +260 -0
  92. package/dest/{avm → public/avm}/avm_context.d.ts +7 -5
  93. package/dest/public/avm/avm_context.d.ts.map +1 -0
  94. package/dest/public/avm/avm_context.js +44 -0
  95. package/dest/{avm → public/avm}/avm_contract_call_result.d.ts +5 -5
  96. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -0
  97. package/dest/public/avm/avm_contract_call_result.js +50 -0
  98. package/dest/{avm → public/avm}/avm_execution_environment.d.ts +2 -2
  99. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -0
  100. package/dest/public/avm/avm_execution_environment.js +31 -0
  101. package/dest/public/avm/avm_gas.d.ts.map +1 -0
  102. package/dest/public/avm/avm_gas.js +202 -0
  103. package/dest/{avm → public/avm}/avm_machine_state.d.ts +2 -2
  104. package/dest/public/avm/avm_machine_state.d.ts.map +1 -0
  105. package/dest/public/avm/avm_machine_state.js +106 -0
  106. package/dest/{avm → public/avm}/avm_memory_types.d.ts +2 -2
  107. package/dest/public/avm/avm_memory_types.d.ts.map +1 -0
  108. package/dest/public/avm/avm_memory_types.js +340 -0
  109. package/dest/{avm → public/avm}/avm_simulator.d.ts +5 -3
  110. package/dest/public/avm/avm_simulator.d.ts.map +1 -0
  111. package/dest/public/avm/avm_simulator.js +202 -0
  112. package/dest/public/avm/bytecode_utils.d.ts.map +1 -0
  113. package/dest/public/avm/bytecode_utils.js +17 -0
  114. package/dest/{avm → public/avm}/errors.d.ts +5 -4
  115. package/dest/public/avm/errors.d.ts.map +1 -0
  116. package/dest/public/avm/errors.js +179 -0
  117. package/dest/{avm → public/avm}/fixtures/avm_simulation_tester.d.ts +6 -6
  118. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
  119. package/dest/public/avm/fixtures/avm_simulation_tester.js +76 -0
  120. package/dest/{avm → public/avm}/fixtures/base_avm_simulation_tester.d.ts +13 -12
  121. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
  122. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +83 -0
  123. package/dest/{avm → public/avm}/fixtures/index.d.ts +24 -7
  124. package/dest/public/avm/fixtures/index.d.ts.map +1 -0
  125. package/dest/public/avm/fixtures/index.js +175 -0
  126. package/dest/{avm → public/avm}/fixtures/simple_contract_data_source.d.ts +10 -6
  127. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
  128. package/dest/public/avm/fixtures/simple_contract_data_source.js +74 -0
  129. package/dest/public/avm/index.d.ts +4 -0
  130. package/dest/public/avm/index.d.ts.map +1 -0
  131. package/dest/{avm/index.d.ts → public/avm/index.js} +1 -2
  132. package/dest/public/avm/journal/index.d.ts.map +1 -0
  133. package/dest/{avm → public/avm}/journal/journal.d.ts +51 -18
  134. package/dest/public/avm/journal/journal.d.ts.map +1 -0
  135. package/dest/public/avm/journal/journal.js +486 -0
  136. package/dest/{avm → public/avm}/journal/nullifiers.d.ts +8 -6
  137. package/dest/public/avm/journal/nullifiers.d.ts.map +1 -0
  138. package/dest/public/avm/journal/nullifiers.js +97 -0
  139. package/dest/{avm → public/avm}/journal/public_storage.d.ts +2 -2
  140. package/dest/public/avm/journal/public_storage.d.ts.map +1 -0
  141. package/dest/public/avm/journal/public_storage.js +145 -0
  142. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -0
  143. package/dest/public/avm/opcodes/accrued_substate.js +252 -0
  144. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -0
  145. package/dest/public/avm/opcodes/addressing_mode.js +74 -0
  146. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -0
  147. package/dest/public/avm/opcodes/arithmetic.js +73 -0
  148. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -0
  149. package/dest/public/avm/opcodes/bitwise.js +106 -0
  150. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -0
  151. package/dest/public/avm/opcodes/comparators.js +43 -0
  152. package/dest/public/avm/opcodes/contract.d.ts.map +1 -0
  153. package/dest/public/avm/opcodes/contract.js +66 -0
  154. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -0
  155. package/dest/public/avm/opcodes/control_flow.js +105 -0
  156. package/dest/{avm → public/avm}/opcodes/conversion.d.ts +1 -1
  157. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -0
  158. package/dest/public/avm/opcodes/conversion.js +69 -0
  159. package/dest/{avm → public/avm}/opcodes/ec_add.d.ts +1 -1
  160. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -0
  161. package/dest/public/avm/opcodes/ec_add.js +84 -0
  162. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -0
  163. package/dest/public/avm/opcodes/environment_getters.js +79 -0
  164. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -0
  165. package/dest/public/avm/opcodes/external_calls.js +180 -0
  166. package/dest/{avm → public/avm}/opcodes/hashing.d.ts +1 -1
  167. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -0
  168. package/dest/public/avm/opcodes/hashing.js +114 -0
  169. package/dest/public/avm/opcodes/index.d.ts.map +1 -0
  170. package/dest/{avm → public/avm}/opcodes/instruction.d.ts +2 -2
  171. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -0
  172. package/dest/public/avm/opcodes/instruction.js +91 -0
  173. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -0
  174. package/dest/public/avm/opcodes/instruction_impl.js +30 -0
  175. package/dest/public/avm/opcodes/memory.d.ts.map +1 -0
  176. package/dest/public/avm/opcodes/memory.js +253 -0
  177. package/dest/{avm → public/avm}/opcodes/misc.d.ts +1 -1
  178. package/dest/public/avm/opcodes/misc.d.ts.map +1 -0
  179. package/dest/public/avm/opcodes/misc.js +48 -0
  180. package/dest/public/avm/opcodes/storage.d.ts.map +1 -0
  181. package/dest/public/avm/opcodes/storage.js +66 -0
  182. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -0
  183. package/dest/public/avm/serialization/buffer_cursor.js +99 -0
  184. package/dest/{avm → public/avm}/serialization/bytecode_serialization.d.ts +1 -1
  185. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -0
  186. package/dest/public/avm/serialization/bytecode_serialization.js +328 -0
  187. package/dest/{avm → public/avm}/serialization/instruction_serialization.d.ts +1 -2
  188. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -0
  189. package/dest/public/avm/serialization/instruction_serialization.js +225 -0
  190. package/dest/{avm → public/avm}/test_utils.d.ts +6 -4
  191. package/dest/public/avm/test_utils.d.ts.map +1 -0
  192. package/dest/public/avm/test_utils.js +52 -0
  193. package/dest/public/bytecode_errors.js +1 -2
  194. package/dest/public/execution.d.ts +8 -2
  195. package/dest/public/execution.d.ts.map +1 -1
  196. package/dest/public/execution.js +4 -5
  197. package/dest/public/executor_metrics.js +16 -12
  198. package/dest/public/fixtures/index.js +0 -1
  199. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +15 -9
  200. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  201. package/dest/public/fixtures/public_tx_simulation_tester.js +54 -53
  202. package/dest/public/fixtures/utils.d.ts +7 -11
  203. package/dest/public/fixtures/utils.d.ts.map +1 -1
  204. package/dest/public/fixtures/utils.js +92 -32
  205. package/dest/public/index.d.ts +5 -4
  206. package/dest/public/index.d.ts.map +1 -1
  207. package/dest/public/index.js +5 -5
  208. package/dest/public/public_db_sources.d.ts +82 -34
  209. package/dest/public/public_db_sources.d.ts.map +1 -1
  210. package/dest/public/public_db_sources.js +171 -196
  211. package/dest/public/{public_processor.d.ts → public_processor/public_processor.d.ts} +10 -8
  212. package/dest/public/public_processor/public_processor.d.ts.map +1 -0
  213. package/dest/public/public_processor/public_processor.js +379 -0
  214. package/dest/public/{public_processor_metrics.d.ts → public_processor/public_processor_metrics.d.ts} +3 -3
  215. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -0
  216. package/dest/public/public_processor/public_processor_metrics.js +125 -0
  217. package/dest/public/{public_tx_context.d.ts → public_tx_simulator/public_tx_context.d.ts} +14 -8
  218. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -0
  219. package/dest/public/public_tx_simulator/public_tx_context.js +320 -0
  220. package/dest/public/{public_tx_simulator.d.ts → public_tx_simulator/public_tx_simulator.d.ts} +10 -7
  221. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -0
  222. package/dest/public/public_tx_simulator/public_tx_simulator.js +325 -0
  223. package/dest/public/side_effect_errors.js +1 -2
  224. package/dest/public/side_effect_trace.d.ts +16 -10
  225. package/dest/public/side_effect_trace.d.ts.map +1 -1
  226. package/dest/public/side_effect_trace.js +82 -149
  227. package/dest/public/side_effect_trace_interface.d.ts +9 -7
  228. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  229. package/dest/public/side_effect_trace_interface.js +1 -2
  230. package/dest/public/tx_contract_cache.d.ts +41 -0
  231. package/dest/public/tx_contract_cache.d.ts.map +1 -0
  232. package/dest/public/tx_contract_cache.js +49 -0
  233. package/dest/public/unique_class_ids.js +23 -28
  234. package/dest/public/utils.d.ts +2 -2
  235. package/dest/public/utils.d.ts.map +1 -1
  236. package/dest/public/utils.js +17 -12
  237. package/dest/server.d.ts +4 -4
  238. package/dest/server.d.ts.map +1 -1
  239. package/dest/server.js +3 -5
  240. package/dest/test/utils.d.ts +3 -2
  241. package/dest/test/utils.d.ts.map +1 -1
  242. package/dest/test/utils.js +9 -7
  243. package/package.json +19 -21
  244. package/src/client.ts +4 -0
  245. package/src/{public → common}/db_interfaces.ts +8 -40
  246. package/src/common/debug_fn_name.ts +4 -2
  247. package/src/common/errors.ts +5 -5
  248. package/src/common/index.ts +2 -1
  249. package/src/common/message_load_oracle_inputs.ts +2 -2
  250. package/src/common/stats/index.ts +1 -0
  251. package/src/{stats → common/stats}/stats.ts +2 -2
  252. package/src/{acvm → private/acvm}/acvm.ts +5 -5
  253. package/src/{acvm → private/acvm}/acvm_types.ts +1 -1
  254. package/src/{acvm → private/acvm}/deserialize.ts +2 -2
  255. package/src/{acvm → private/acvm}/oracle/index.ts +1 -1
  256. package/src/{acvm → private/acvm}/oracle/oracle.ts +22 -12
  257. package/src/{acvm → private/acvm}/oracle/typed_oracle.ts +50 -55
  258. package/src/{acvm → private/acvm}/serialize.ts +10 -3
  259. package/src/{client → private}/client_execution_context.ts +54 -37
  260. package/src/{client → private}/db_oracle.ts +20 -20
  261. package/src/{client → private}/execution_note_cache.ts +3 -3
  262. package/src/{common → private}/hashed_values_cache.ts +2 -2
  263. package/src/private/index.ts +12 -0
  264. package/src/{client → private}/pick_notes.ts +1 -1
  265. package/src/{client → private}/private_execution.ts +46 -14
  266. package/src/{providers → private/providers}/acvm_native.ts +6 -6
  267. package/src/{providers → private/providers}/acvm_wasm.ts +4 -4
  268. package/src/{providers → private/providers}/acvm_wasm_with_blobs.ts +5 -5
  269. package/src/{providers → private/providers}/factory.ts +1 -1
  270. package/src/{common → private/providers}/simulation_provider.ts +5 -5
  271. package/src/{client → private}/simulator.ts +31 -123
  272. package/src/{client → private}/unconstrained_execution.ts +7 -7
  273. package/src/{client → private}/view_data_oracle.ts +25 -28
  274. package/src/{avm → public/avm}/avm_context.ts +12 -7
  275. package/src/{avm → public/avm}/avm_contract_call_result.ts +6 -6
  276. package/src/{avm → public/avm}/avm_execution_environment.ts +2 -2
  277. package/src/{avm → public/avm}/avm_gas.ts +1 -3
  278. package/src/{avm → public/avm}/avm_machine_state.ts +2 -2
  279. package/src/{avm → public/avm}/avm_memory_types.ts +4 -4
  280. package/src/{avm → public/avm}/avm_simulator.ts +12 -6
  281. package/src/{avm → public/avm}/errors.ts +5 -4
  282. package/src/{avm → public/avm}/fixtures/avm_simulation_tester.ts +16 -15
  283. package/src/{avm → public/avm}/fixtures/base_avm_simulation_tester.ts +45 -40
  284. package/src/{avm → public/avm}/fixtures/index.ts +77 -12
  285. package/src/{avm → public/avm}/fixtures/simple_contract_data_source.ts +26 -19
  286. package/src/{avm → public/avm}/index.ts +1 -1
  287. package/src/public/avm/journal/index.ts +1 -0
  288. package/src/{avm → public/avm}/journal/journal.ts +330 -305
  289. package/src/{avm → public/avm}/journal/nullifiers.ts +20 -19
  290. package/src/{avm → public/avm}/journal/public_storage.ts +2 -2
  291. package/src/{avm → public/avm}/opcodes/contract.ts +1 -1
  292. package/src/{avm → public/avm}/opcodes/control_flow.ts +1 -1
  293. package/src/{avm → public/avm}/opcodes/conversion.ts +1 -1
  294. package/src/{avm → public/avm}/opcodes/ec_add.ts +2 -2
  295. package/src/{avm → public/avm}/opcodes/external_calls.ts +5 -6
  296. package/src/{avm → public/avm}/opcodes/hashing.ts +1 -1
  297. package/src/public/avm/opcodes/index.ts +15 -0
  298. package/src/{avm → public/avm}/opcodes/instruction.ts +2 -2
  299. package/src/{avm → public/avm}/opcodes/misc.ts +1 -1
  300. package/src/public/avm/serialization/bytecode_serialization.ts +204 -0
  301. package/src/{avm → public/avm}/serialization/instruction_serialization.ts +0 -1
  302. package/src/{avm → public/avm}/test_utils.ts +10 -7
  303. package/src/public/execution.ts +9 -12
  304. package/src/public/fixtures/public_tx_simulation_tester.ts +66 -72
  305. package/src/public/fixtures/utils.ts +122 -33
  306. package/src/public/index.ts +5 -4
  307. package/src/public/public_db_sources.ts +216 -222
  308. package/src/public/{public_processor.ts → public_processor/public_processor.ts} +78 -53
  309. package/src/public/{public_processor_metrics.ts → public_processor/public_processor_metrics.ts} +3 -3
  310. package/src/public/{public_tx_context.ts → public_tx_simulator/public_tx_context.ts} +70 -75
  311. package/src/public/{public_tx_simulator.ts → public_tx_simulator/public_tx_simulator.ts} +104 -91
  312. package/src/public/side_effect_trace.ts +85 -160
  313. package/src/public/side_effect_trace_interface.ts +10 -23
  314. package/src/public/tx_contract_cache.ts +69 -0
  315. package/src/public/unique_class_ids.ts +1 -1
  316. package/src/public/utils.ts +2 -2
  317. package/src/server.ts +4 -4
  318. package/src/test/utils.ts +5 -3
  319. package/dest/acvm/acvm.d.ts.map +0 -1
  320. package/dest/acvm/acvm.js +0 -73
  321. package/dest/acvm/acvm_types.d.ts.map +0 -1
  322. package/dest/acvm/acvm_types.js +0 -2
  323. package/dest/acvm/deserialize.d.ts.map +0 -1
  324. package/dest/acvm/deserialize.js +0 -46
  325. package/dest/acvm/index.d.ts.map +0 -1
  326. package/dest/acvm/index.js +0 -6
  327. package/dest/acvm/oracle/index.d.ts.map +0 -1
  328. package/dest/acvm/oracle/index.js +0 -3
  329. package/dest/acvm/oracle/oracle.d.ts.map +0 -1
  330. package/dest/acvm/oracle/oracle.js +0 -230
  331. package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
  332. package/dest/acvm/oracle/typed_oracle.js +0 -131
  333. package/dest/acvm/serialize.d.ts.map +0 -1
  334. package/dest/acvm/serialize.js +0 -48
  335. package/dest/avm/avm_context.d.ts.map +0 -1
  336. package/dest/avm/avm_context.js +0 -44
  337. package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
  338. package/dest/avm/avm_contract_call_result.js +0 -45
  339. package/dest/avm/avm_execution_environment.d.ts.map +0 -1
  340. package/dest/avm/avm_execution_environment.js +0 -28
  341. package/dest/avm/avm_gas.d.ts.map +0 -1
  342. package/dest/avm/avm_gas.js +0 -170
  343. package/dest/avm/avm_machine_state.d.ts.map +0 -1
  344. package/dest/avm/avm_machine_state.js +0 -112
  345. package/dest/avm/avm_memory_types.d.ts.map +0 -1
  346. package/dest/avm/avm_memory_types.js +0 -327
  347. package/dest/avm/avm_simulator.d.ts.map +0 -1
  348. package/dest/avm/avm_simulator.js +0 -193
  349. package/dest/avm/avm_tree.d.ts +0 -282
  350. package/dest/avm/avm_tree.d.ts.map +0 -1
  351. package/dest/avm/avm_tree.js +0 -684
  352. package/dest/avm/bytecode_utils.d.ts.map +0 -1
  353. package/dest/avm/bytecode_utils.js +0 -15
  354. package/dest/avm/errors.d.ts.map +0 -1
  355. package/dest/avm/errors.js +0 -196
  356. package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  357. package/dest/avm/fixtures/avm_simulation_tester.js +0 -73
  358. package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  359. package/dest/avm/fixtures/base_avm_simulation_tester.js +0 -76
  360. package/dest/avm/fixtures/index.d.ts.map +0 -1
  361. package/dest/avm/fixtures/index.js +0 -134
  362. package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  363. package/dest/avm/fixtures/simple_contract_data_source.js +0 -75
  364. package/dest/avm/index.d.ts.map +0 -1
  365. package/dest/avm/index.js +0 -4
  366. package/dest/avm/journal/index.d.ts.map +0 -1
  367. package/dest/avm/journal/index.js +0 -2
  368. package/dest/avm/journal/journal.d.ts.map +0 -1
  369. package/dest/avm/journal/journal.js +0 -499
  370. package/dest/avm/journal/nullifiers.d.ts.map +0 -1
  371. package/dest/avm/journal/nullifiers.js +0 -99
  372. package/dest/avm/journal/public_storage.d.ts.map +0 -1
  373. package/dest/avm/journal/public_storage.js +0 -159
  374. package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
  375. package/dest/avm/opcodes/accrued_substate.js +0 -215
  376. package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
  377. package/dest/avm/opcodes/addressing_mode.js +0 -81
  378. package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
  379. package/dest/avm/opcodes/arithmetic.js +0 -70
  380. package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
  381. package/dest/avm/opcodes/bitwise.js +0 -90
  382. package/dest/avm/opcodes/comparators.d.ts.map +0 -1
  383. package/dest/avm/opcodes/comparators.js +0 -40
  384. package/dest/avm/opcodes/contract.d.ts.map +0 -1
  385. package/dest/avm/opcodes/contract.js +0 -63
  386. package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
  387. package/dest/avm/opcodes/control_flow.js +0 -97
  388. package/dest/avm/opcodes/conversion.d.ts.map +0 -1
  389. package/dest/avm/opcodes/conversion.js +0 -64
  390. package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
  391. package/dest/avm/opcodes/ec_add.js +0 -82
  392. package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
  393. package/dest/avm/opcodes/environment_getters.js +0 -78
  394. package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
  395. package/dest/avm/opcodes/external_calls.js +0 -169
  396. package/dest/avm/opcodes/hashing.d.ts.map +0 -1
  397. package/dest/avm/opcodes/hashing.js +0 -103
  398. package/dest/avm/opcodes/index.d.ts.map +0 -1
  399. package/dest/avm/opcodes/index.js +0 -16
  400. package/dest/avm/opcodes/instruction.d.ts.map +0 -1
  401. package/dest/avm/opcodes/instruction.js +0 -100
  402. package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
  403. package/dest/avm/opcodes/instruction_impl.js +0 -33
  404. package/dest/avm/opcodes/memory.d.ts.map +0 -1
  405. package/dest/avm/opcodes/memory.js +0 -226
  406. package/dest/avm/opcodes/misc.d.ts.map +0 -1
  407. package/dest/avm/opcodes/misc.js +0 -45
  408. package/dest/avm/opcodes/multi_scalar_mul.d.ts +0 -16
  409. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +0 -1
  410. package/dest/avm/opcodes/multi_scalar_mul.js +0 -112
  411. package/dest/avm/opcodes/storage.d.ts.map +0 -1
  412. package/dest/avm/opcodes/storage.js +0 -61
  413. package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
  414. package/dest/avm/serialization/buffer_cursor.js +0 -99
  415. package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  416. package/dest/avm/serialization/bytecode_serialization.js +0 -132
  417. package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
  418. package/dest/avm/serialization/instruction_serialization.js +0 -187
  419. package/dest/avm/test_utils.d.ts.map +0 -1
  420. package/dest/avm/test_utils.js +0 -52
  421. package/dest/client/client_execution_context.d.ts.map +0 -1
  422. package/dest/client/client_execution_context.js +0 -392
  423. package/dest/client/db_oracle.d.ts.map +0 -1
  424. package/dest/client/db_oracle.js +0 -17
  425. package/dest/client/execution_note_cache.d.ts.map +0 -1
  426. package/dest/client/execution_note_cache.js +0 -181
  427. package/dest/client/index.d.ts +0 -16
  428. package/dest/client/index.d.ts.map +0 -1
  429. package/dest/client/index.js +0 -15
  430. package/dest/client/pick_notes.d.ts.map +0 -1
  431. package/dest/client/pick_notes.js +0 -54
  432. package/dest/client/private_execution.d.ts +0 -19
  433. package/dest/client/private_execution.d.ts.map +0 -1
  434. package/dest/client/private_execution.js +0 -72
  435. package/dest/client/simulator.d.ts +0 -60
  436. package/dest/client/simulator.d.ts.map +0 -1
  437. package/dest/client/simulator.js +0 -136
  438. package/dest/client/unconstrained_execution.d.ts.map +0 -1
  439. package/dest/client/unconstrained_execution.js +0 -30
  440. package/dest/client/view_data_oracle.d.ts.map +0 -1
  441. package/dest/client/view_data_oracle.js +0 -268
  442. package/dest/common/hashed_values_cache.d.ts.map +0 -1
  443. package/dest/common/hashed_values_cache.js +0 -50
  444. package/dest/common/simulation_provider.d.ts.map +0 -1
  445. package/dest/common/simulation_provider.js +0 -27
  446. package/dest/common.d.ts +0 -2
  447. package/dest/common.d.ts.map +0 -1
  448. package/dest/common.js +0 -2
  449. package/dest/providers/acvm_native.d.ts.map +0 -1
  450. package/dest/providers/acvm_native.js +0 -125
  451. package/dest/providers/acvm_wasm.d.ts.map +0 -1
  452. package/dest/providers/acvm_wasm.js +0 -54
  453. package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  454. package/dest/providers/factory.d.ts.map +0 -1
  455. package/dest/providers/factory.js +0 -27
  456. package/dest/providers/index.d.ts +0 -5
  457. package/dest/providers/index.d.ts.map +0 -1
  458. package/dest/providers/index.js +0 -5
  459. package/dest/public/db_interfaces.d.ts.map +0 -1
  460. package/dest/public/db_interfaces.js +0 -2
  461. package/dest/public/fee_payment.d.ts +0 -11
  462. package/dest/public/fee_payment.d.ts.map +0 -1
  463. package/dest/public/fee_payment.js +0 -21
  464. package/dest/public/public_processor.d.ts.map +0 -1
  465. package/dest/public/public_processor.js +0 -352
  466. package/dest/public/public_processor_metrics.d.ts.map +0 -1
  467. package/dest/public/public_processor_metrics.js +0 -106
  468. package/dest/public/public_tx_context.d.ts.map +0 -1
  469. package/dest/public/public_tx_context.js +0 -341
  470. package/dest/public/public_tx_simulator.d.ts.map +0 -1
  471. package/dest/public/public_tx_simulator.js +0 -333
  472. package/dest/stats/index.d.ts.map +0 -1
  473. package/dest/stats/index.js +0 -2
  474. package/dest/stats/stats.d.ts.map +0 -1
  475. package/dest/stats/stats.js +0 -11
  476. package/src/avm/avm_tree.ts +0 -887
  477. package/src/avm/opcodes/multi_scalar_mul.ts +0 -121
  478. package/src/avm/serialization/bytecode_serialization.ts +0 -212
  479. package/src/client/index.ts +0 -15
  480. package/src/common.ts +0 -1
  481. package/src/providers/index.ts +0 -4
  482. package/src/public/fee_payment.ts +0 -23
  483. /package/dest/{stats → common/stats}/index.d.ts +0 -0
  484. /package/{src/stats/index.ts → dest/common/stats/index.js} +0 -0
  485. /package/dest/{acvm → private/acvm}/index.d.ts +0 -0
  486. /package/dest/{avm → public/avm}/avm_gas.d.ts +0 -0
  487. /package/dest/{avm → public/avm}/bytecode_utils.d.ts +0 -0
  488. /package/dest/{avm → public/avm}/journal/index.d.ts +0 -0
  489. /package/{src/avm/journal/index.ts → dest/public/avm/journal/index.js} +0 -0
  490. /package/dest/{avm → public/avm}/opcodes/accrued_substate.d.ts +0 -0
  491. /package/dest/{avm → public/avm}/opcodes/addressing_mode.d.ts +0 -0
  492. /package/dest/{avm → public/avm}/opcodes/arithmetic.d.ts +0 -0
  493. /package/dest/{avm → public/avm}/opcodes/bitwise.d.ts +0 -0
  494. /package/dest/{avm → public/avm}/opcodes/comparators.d.ts +0 -0
  495. /package/dest/{avm → public/avm}/opcodes/contract.d.ts +0 -0
  496. /package/dest/{avm → public/avm}/opcodes/control_flow.d.ts +0 -0
  497. /package/dest/{avm → public/avm}/opcodes/environment_getters.d.ts +0 -0
  498. /package/dest/{avm → public/avm}/opcodes/external_calls.d.ts +0 -0
  499. /package/dest/{avm → public/avm}/opcodes/index.d.ts +0 -0
  500. /package/{src/avm/opcodes/index.ts → dest/public/avm/opcodes/index.js} +0 -0
  501. /package/dest/{avm → public/avm}/opcodes/instruction_impl.d.ts +0 -0
  502. /package/dest/{avm → public/avm}/opcodes/memory.d.ts +0 -0
  503. /package/dest/{avm → public/avm}/opcodes/storage.d.ts +0 -0
  504. /package/dest/{avm → public/avm}/serialization/buffer_cursor.d.ts +0 -0
  505. /package/src/{acvm → private/acvm}/index.ts +0 -0
  506. /package/src/{avm → public/avm}/bytecode_utils.ts +0 -0
  507. /package/src/{avm → public/avm}/opcodes/.eslintrc.cjs +0 -0
  508. /package/src/{avm → public/avm}/opcodes/accrued_substate.ts +0 -0
  509. /package/src/{avm → public/avm}/opcodes/addressing_mode.ts +0 -0
  510. /package/src/{avm → public/avm}/opcodes/arithmetic.ts +0 -0
  511. /package/src/{avm → public/avm}/opcodes/bitwise.ts +0 -0
  512. /package/src/{avm → public/avm}/opcodes/comparators.ts +0 -0
  513. /package/src/{avm → public/avm}/opcodes/environment_getters.ts +0 -0
  514. /package/src/{avm → public/avm}/opcodes/instruction_impl.ts +0 -0
  515. /package/src/{avm → public/avm}/opcodes/memory.ts +0 -0
  516. /package/src/{avm → public/avm}/opcodes/storage.ts +0 -0
  517. /package/src/{avm → public/avm}/serialization/buffer_cursor.ts +0 -0
@@ -0,0 +1,145 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ /**
3
+ * A class to manage public storage reads and writes during a contract call's AVM simulation.
4
+ * Maintains a storage write cache, and ensures that reads fall back to the correct source.
5
+ * When a contract call completes, its storage cache can be merged into its parent's.
6
+ */ export class PublicStorage {
7
+ hostPublicStorage;
8
+ parent;
9
+ /** Cached storage writes. */ cache;
10
+ constructor(/** Reference to node storage. Checked on parent cache-miss. */ hostPublicStorage, /** Parent's storage. Checked on this' cache-miss. */ parent){
11
+ this.hostPublicStorage = hostPublicStorage;
12
+ this.parent = parent;
13
+ this.cache = new PublicStorageCache();
14
+ }
15
+ /**
16
+ * Create a new public storage manager forked from this one
17
+ */ fork() {
18
+ return new PublicStorage(this.hostPublicStorage, this);
19
+ }
20
+ /**
21
+ * Read a storage value from this' cache or parent's (recursively).
22
+ * DOES NOT CHECK HOST STORAGE!
23
+ *
24
+ * @param contractAddress - the address of the contract whose storage is being read from
25
+ * @param slot - the slot in the contract's storage being read from
26
+ * @returns value: the latest value written according to this cache or the parent's. undefined on cache miss.
27
+ */ readHereOrParent(contractAddress, slot) {
28
+ // First try check this storage cache
29
+ let value = this.cache.read(contractAddress, slot);
30
+ // Then try parent's storage cache
31
+ if (!value && this.parent) {
32
+ // Note: this will recurse to grandparent/etc until a cache-hit is encountered.
33
+ value = this.parent.readHereOrParent(contractAddress, slot);
34
+ }
35
+ return value;
36
+ }
37
+ /**
38
+ * Read a value from storage.
39
+ * 1. Check cache.
40
+ * 2. Check parent cache.
41
+ * 3. Fall back to the host state.
42
+ * 4. Not found! Value has never been written to before. Flag it as non-existent and return value zero.
43
+ *
44
+ * @param contractAddress - the address of the contract whose storage is being read from
45
+ * @param slot - the slot in the contract's storage being read from
46
+ * @returns exists: whether the slot has EVER been written to before, value: the latest value written to slot, or 0 if never written to before
47
+ */ async read(contractAddress, slot) {
48
+ let cached = false;
49
+ // Check this cache and parent's (recursively)
50
+ let value = this.readHereOrParent(contractAddress, slot);
51
+ // Finally try the host's Aztec state (a trip to the database)
52
+ if (!value) {
53
+ // This functions returns Fr.ZERO if it has never been written to before
54
+ // we explicity coalesce to Fr.ZERO in case we have some implementations that cause this to return undefined
55
+ value = await this.hostPublicStorage.storageRead(contractAddress, slot) ?? Fr.ZERO;
56
+ // TODO(dbanks12): if value retrieved from host storage, we can cache it here
57
+ // any future reads to the same slot can read from cache instead of more expensive
58
+ // DB access
59
+ } else {
60
+ cached = true;
61
+ }
62
+ // if value is Fr.ZERO here, it that means this slot has never been written to!
63
+ return Promise.resolve({
64
+ value,
65
+ cached
66
+ });
67
+ }
68
+ /**
69
+ * Stage a storage write.
70
+ *
71
+ * @param contractAddress - the address of the contract whose storage is being written to
72
+ * @param slot - the slot in the contract's storage being written to
73
+ * @param value - the value being written to the slot
74
+ */ write(contractAddress, slot, value) {
75
+ this.cache.write(contractAddress, slot, value);
76
+ }
77
+ /**
78
+ * Merges another PublicStorage's cache (pending writes) into this one.
79
+ *
80
+ * @param incomingPublicStorage - the incoming public storage to merge into this instance's
81
+ */ acceptAndMerge(incomingPublicStorage) {
82
+ this.cache.acceptAndMerge(incomingPublicStorage.cache);
83
+ }
84
+ }
85
+ /**
86
+ * A class to cache writes to public storage during a contract call's AVM simulation.
87
+ * "Writes" update a map, "reads" check that map or return undefined.
88
+ * An instance of this class can merge another instance's staged writes into its own.
89
+ */ class PublicStorageCache {
90
+ /**
91
+ * Map for staging storage writes.
92
+ * One inner-map per contract storage address,
93
+ * mapping storage slot to latest staged write value.
94
+ */ cachePerContract = new Map();
95
+ /**
96
+ * Read a staged value from storage, if it has been previously written to.
97
+ *
98
+ * @param contractAddress - the address of the contract whose storage is being read from
99
+ * @param slot - the slot in the contract's storage being read from
100
+ * @returns the latest value written to slot, or undefined if no value has been written
101
+ */ read(contractAddress, slot) {
102
+ return this.cachePerContract.get(contractAddress.toBigInt())?.get(slot.toBigInt());
103
+ }
104
+ /**
105
+ * Stage a storage write.
106
+ *
107
+ * @param contractAddress - the address of the contract whose storage is being written to
108
+ * @param slot - the slot in the contract's storage being written to
109
+ * @param value - the value being written to the slot
110
+ */ write(contractAddress, slot, value) {
111
+ let cacheAtContract = this.cachePerContract.get(contractAddress.toBigInt());
112
+ if (!cacheAtContract) {
113
+ // If this contract's storage has no staged modifications, create a new inner map to store them
114
+ cacheAtContract = new Map();
115
+ this.cachePerContract.set(contractAddress.toBigInt(), cacheAtContract);
116
+ }
117
+ cacheAtContract.set(slot.toBigInt(), value);
118
+ }
119
+ /**
120
+ * Merges another cache's staged writes into this instance's cache.
121
+ *
122
+ * Staged modifications in "incoming" take precedence over those
123
+ * present in "this" as they are assumed to occur after this' writes.
124
+ *
125
+ * In practice, "this" is a parent call's storage cache, and "incoming" is a nested call's.
126
+ *
127
+ * @param incomingStorageCache - the incoming storage write cache to merge into this instance's
128
+ */ acceptAndMerge(incomingStorageCache) {
129
+ // Iterate over all incoming contracts with staged writes.
130
+ for (const [incomingAddress, incomingCacheAtContract] of incomingStorageCache.cachePerContract){
131
+ const thisCacheAtContract = this.cachePerContract.get(incomingAddress);
132
+ if (!thisCacheAtContract) {
133
+ // The contract has no storage writes staged here
134
+ // so just accept the incoming cache as-is for this contract.
135
+ this.cachePerContract.set(incomingAddress, incomingCacheAtContract);
136
+ } else {
137
+ // "Incoming" and "this" both have staged writes for this contract.
138
+ // Merge in incoming staged writes, giving them precedence over this'.
139
+ for (const [slot, value] of incomingCacheAtContract){
140
+ thisCacheAtContract.set(slot, value);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accrued_substate.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/accrued_substate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,cAAe,SAAQ,WAAW;IAa3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,YAAY;IAftB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAoB;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAyB;IAEvD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAMxB;gBAGQ,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAezD;AAED,qBAAa,YAAa,SAAQ,WAAW;IAM/B,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,cAAc;IAL5D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAkB;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAuB;IAErD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAA8D;gBAEpE,QAAQ,EAAE,MAAM,EAAU,cAAc,EAAE,MAAM;IAIvD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBzD;AAED,qBAAa,eAAgB,SAAQ,WAAW;IAa5C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IAftB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAqB;IACxC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA0B;IAExD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAMxB;gBAGQ,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAezD;AAED,qBAAa,aAAc,SAAQ,WAAW;IAMhC,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,eAAe;IAL7D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAmB;IACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAwB;IAEtD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAA8D;gBAEpE,QAAQ,EAAE,MAAM,EAAU,eAAe,EAAE,MAAM;IAIxD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BzD;AAED,qBAAa,mBAAoB,SAAQ,WAAW;IAahD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IAftB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAqB;IACxC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA0B;IAExD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAMxB;gBAGQ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBzD;AAED,qBAAa,kBAAmB,SAAQ,WAAW;IAOrC,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,aAAa;IALtF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAwB;IAC3C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA6B;IAE3D,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAkF;gBAExF,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,EAAU,aAAa,EAAE,MAAM;IAIjF,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBzD;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAMpC,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,eAAe;IAAU,OAAO,CAAC,aAAa;IAL5F,MAAM,CAAC,IAAI,EAAE,MAAM,CAAmB;IACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAwB;IAEtD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAkF;gBAExF,QAAQ,EAAE,MAAM,EAAU,eAAe,EAAE,MAAM,EAAU,aAAa,EAAE,MAAM;IAIvF,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzD"}
@@ -0,0 +1,252 @@
1
+ import { TypeTag, Uint1 } from '../avm_memory_types.js';
2
+ import { InstructionExecutionError, StaticCallAlterationError } from '../errors.js';
3
+ import { NullifierCollisionError } from '../journal/nullifiers.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 NoteHashExists extends Instruction {
8
+ indirect;
9
+ noteHashOffset;
10
+ leafIndexOffset;
11
+ existsOffset;
12
+ static type = 'NOTEHASHEXISTS';
13
+ static opcode = Opcode.NOTEHASHEXISTS;
14
+ // Informs (de)serialization. See Instruction.deserialize.
15
+ static wireFormat = [
16
+ OperandType.UINT8,
17
+ OperandType.UINT8,
18
+ OperandType.UINT16,
19
+ OperandType.UINT16,
20
+ OperandType.UINT16
21
+ ];
22
+ constructor(indirect, noteHashOffset, leafIndexOffset, existsOffset){
23
+ super(), this.indirect = indirect, this.noteHashOffset = noteHashOffset, this.leafIndexOffset = leafIndexOffset, this.existsOffset = existsOffset;
24
+ }
25
+ async execute(context) {
26
+ const memory = context.machineState.memory;
27
+ context.machineState.consumeGas(this.gasCost());
28
+ const operands = [
29
+ this.noteHashOffset,
30
+ this.leafIndexOffset,
31
+ this.existsOffset
32
+ ];
33
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
34
+ const [noteHashOffset, leafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
35
+ memory.checkTags(TypeTag.FIELD, noteHashOffset, leafIndexOffset);
36
+ // Note that this instruction accepts any type in memory, and converts to Field.
37
+ const noteHash = memory.get(noteHashOffset).toFr();
38
+ const leafIndex = memory.get(leafIndexOffset).toFr();
39
+ const exists = await context.persistableState.checkNoteHashExists(context.environment.address, noteHash, leafIndex);
40
+ memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
41
+ }
42
+ }
43
+ export class EmitNoteHash extends Instruction {
44
+ indirect;
45
+ noteHashOffset;
46
+ static type = 'EMITNOTEHASH';
47
+ static opcode = Opcode.EMITNOTEHASH;
48
+ // Informs (de)serialization. See Instruction.deserialize.
49
+ static wireFormat = [
50
+ OperandType.UINT8,
51
+ OperandType.UINT8,
52
+ OperandType.UINT16
53
+ ];
54
+ constructor(indirect, noteHashOffset){
55
+ super(), this.indirect = indirect, this.noteHashOffset = noteHashOffset;
56
+ }
57
+ async execute(context) {
58
+ const memory = context.machineState.memory;
59
+ context.machineState.consumeGas(this.gasCost());
60
+ const operands = [
61
+ this.noteHashOffset
62
+ ];
63
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
64
+ const [noteHashOffset] = addressing.resolve(operands, memory);
65
+ memory.checkTag(TypeTag.FIELD, noteHashOffset);
66
+ if (context.environment.isStaticCall) {
67
+ throw new StaticCallAlterationError();
68
+ }
69
+ const noteHash = memory.get(noteHashOffset).toFr();
70
+ await context.persistableState.writeNoteHash(context.environment.address, noteHash);
71
+ }
72
+ }
73
+ export class NullifierExists extends Instruction {
74
+ indirect;
75
+ nullifierOffset;
76
+ addressOffset;
77
+ existsOffset;
78
+ static type = 'NULLIFIEREXISTS';
79
+ static opcode = Opcode.NULLIFIEREXISTS;
80
+ // Informs (de)serialization. See Instruction.deserialize.
81
+ static wireFormat = [
82
+ OperandType.UINT8,
83
+ OperandType.UINT8,
84
+ OperandType.UINT16,
85
+ OperandType.UINT16,
86
+ OperandType.UINT16
87
+ ];
88
+ constructor(indirect, nullifierOffset, addressOffset, existsOffset){
89
+ super(), this.indirect = indirect, this.nullifierOffset = nullifierOffset, this.addressOffset = addressOffset, this.existsOffset = existsOffset;
90
+ }
91
+ async execute(context) {
92
+ const memory = context.machineState.memory;
93
+ context.machineState.consumeGas(this.gasCost());
94
+ const operands = [
95
+ this.nullifierOffset,
96
+ this.addressOffset,
97
+ this.existsOffset
98
+ ];
99
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
100
+ const [nullifierOffset, addressOffset, existsOffset] = addressing.resolve(operands, memory);
101
+ memory.checkTags(TypeTag.FIELD, nullifierOffset, addressOffset);
102
+ const nullifier = memory.get(nullifierOffset).toFr();
103
+ const address = memory.get(addressOffset).toAztecAddress();
104
+ const exists = await context.persistableState.checkNullifierExists(address, nullifier);
105
+ memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
106
+ }
107
+ }
108
+ export class EmitNullifier extends Instruction {
109
+ indirect;
110
+ nullifierOffset;
111
+ static type = 'EMITNULLIFIER';
112
+ static opcode = Opcode.EMITNULLIFIER;
113
+ // Informs (de)serialization. See Instruction.deserialize.
114
+ static wireFormat = [
115
+ OperandType.UINT8,
116
+ OperandType.UINT8,
117
+ OperandType.UINT16
118
+ ];
119
+ constructor(indirect, nullifierOffset){
120
+ super(), this.indirect = indirect, this.nullifierOffset = nullifierOffset;
121
+ }
122
+ async execute(context) {
123
+ if (context.environment.isStaticCall) {
124
+ throw new StaticCallAlterationError();
125
+ }
126
+ const memory = context.machineState.memory;
127
+ context.machineState.consumeGas(this.gasCost());
128
+ const operands = [
129
+ this.nullifierOffset
130
+ ];
131
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
132
+ const [nullifierOffset] = addressing.resolve(operands, memory);
133
+ memory.checkTag(TypeTag.FIELD, nullifierOffset);
134
+ const nullifier = memory.get(nullifierOffset).toFr();
135
+ try {
136
+ await context.persistableState.writeNullifier(context.environment.address, nullifier);
137
+ } catch (e) {
138
+ if (e instanceof NullifierCollisionError) {
139
+ // Error is known/expected, raise as InstructionExecutionError that the will lead the simulator to revert this call
140
+ throw new InstructionExecutionError(`Attempted to emit duplicate nullifier ${nullifier} (contract address: ${context.environment.address}).`);
141
+ } else {
142
+ throw e;
143
+ }
144
+ }
145
+ }
146
+ }
147
+ export class L1ToL2MessageExists extends Instruction {
148
+ indirect;
149
+ msgHashOffset;
150
+ msgLeafIndexOffset;
151
+ existsOffset;
152
+ static type = 'L1TOL2MSGEXISTS';
153
+ static opcode = Opcode.L1TOL2MSGEXISTS;
154
+ // Informs (de)serialization. See Instruction.deserialize.
155
+ static wireFormat = [
156
+ OperandType.UINT8,
157
+ OperandType.UINT8,
158
+ OperandType.UINT16,
159
+ OperandType.UINT16,
160
+ OperandType.UINT16
161
+ ];
162
+ constructor(indirect, msgHashOffset, msgLeafIndexOffset, existsOffset){
163
+ super(), this.indirect = indirect, this.msgHashOffset = msgHashOffset, this.msgLeafIndexOffset = msgLeafIndexOffset, this.existsOffset = existsOffset;
164
+ }
165
+ async execute(context) {
166
+ const memory = context.machineState.memory;
167
+ context.machineState.consumeGas(this.gasCost());
168
+ const operands = [
169
+ this.msgHashOffset,
170
+ this.msgLeafIndexOffset,
171
+ this.existsOffset
172
+ ];
173
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
174
+ const [msgHashOffset, msgLeafIndexOffset, existsOffset] = addressing.resolve(operands, memory);
175
+ memory.checkTags(TypeTag.FIELD, msgHashOffset, msgLeafIndexOffset);
176
+ const msgHash = memory.get(msgHashOffset).toFr();
177
+ const msgLeafIndex = memory.get(msgLeafIndexOffset).toFr();
178
+ const exists = await context.persistableState.checkL1ToL2MessageExists(context.environment.address, msgHash, msgLeafIndex);
179
+ memory.set(existsOffset, exists ? new Uint1(1) : new Uint1(0));
180
+ }
181
+ }
182
+ export class EmitUnencryptedLog extends Instruction {
183
+ indirect;
184
+ logOffset;
185
+ logSizeOffset;
186
+ // TODO(#11124): rename unencrypted -> public
187
+ static type = 'EMITUNENCRYPTEDLOG';
188
+ static opcode = Opcode.EMITUNENCRYPTEDLOG;
189
+ // Informs (de)serialization. See Instruction.deserialize.
190
+ static wireFormat = [
191
+ OperandType.UINT8,
192
+ OperandType.UINT8,
193
+ OperandType.UINT16,
194
+ OperandType.UINT16
195
+ ];
196
+ constructor(indirect, logOffset, logSizeOffset){
197
+ super(), this.indirect = indirect, this.logOffset = logOffset, this.logSizeOffset = logSizeOffset;
198
+ }
199
+ async execute(context) {
200
+ if (context.environment.isStaticCall) {
201
+ throw new StaticCallAlterationError();
202
+ }
203
+ const memory = context.machineState.memory;
204
+ const operands = [
205
+ this.logOffset,
206
+ this.logSizeOffset
207
+ ];
208
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
209
+ const [logOffset, logSizeOffset] = addressing.resolve(operands, memory);
210
+ memory.checkTag(TypeTag.UINT32, logSizeOffset);
211
+ const logSize = memory.get(logSizeOffset).toNumber();
212
+ memory.checkTagsRange(TypeTag.FIELD, logOffset, logSize);
213
+ const contractAddress = context.environment.address;
214
+ context.machineState.consumeGas(this.gasCost(logSize));
215
+ const log = memory.getSlice(logOffset, logSize).map((f)=>f.toFr());
216
+ context.persistableState.writePublicLog(contractAddress, log);
217
+ }
218
+ }
219
+ export class SendL2ToL1Message extends Instruction {
220
+ indirect;
221
+ recipientOffset;
222
+ contentOffset;
223
+ static type = 'SENDL2TOL1MSG';
224
+ static opcode = Opcode.SENDL2TOL1MSG;
225
+ // Informs (de)serialization. See Instruction.deserialize.
226
+ static wireFormat = [
227
+ OperandType.UINT8,
228
+ OperandType.UINT8,
229
+ OperandType.UINT16,
230
+ OperandType.UINT16
231
+ ];
232
+ constructor(indirect, recipientOffset, contentOffset){
233
+ super(), this.indirect = indirect, this.recipientOffset = recipientOffset, this.contentOffset = contentOffset;
234
+ }
235
+ async execute(context) {
236
+ if (context.environment.isStaticCall) {
237
+ throw new StaticCallAlterationError();
238
+ }
239
+ const memory = context.machineState.memory;
240
+ context.machineState.consumeGas(this.gasCost());
241
+ const operands = [
242
+ this.recipientOffset,
243
+ this.contentOffset
244
+ ];
245
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
246
+ const [recipientOffset, contentOffset] = addressing.resolve(operands, memory);
247
+ memory.checkTags(TypeTag.FIELD, recipientOffset, contentOffset);
248
+ const recipient = memory.get(recipientOffset).toFr();
249
+ const content = memory.get(contentOffset).toFr();
250
+ context.persistableState.writeL2ToL1Message(context.environment.address, recipient, content);
251
+ }
252
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressing_mode.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/addressing_mode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGlF,oBAAY,cAAc;IACxB,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,iBAAiB,IAAI;CACtB;AAED,kEAAkE;AAClE,qBAAa,UAAU;IAEnB,mHAAmH;IACnH,OAAO,CAAC,QAAQ,CAAC,cAAc;;IAD/B,mHAAmH;IAClG,cAAc,EAAE,cAAc,EAAE;WAIrC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,GAAE,MAAU,GAAG,UAAU;IAYvE,MAAM,IAAI,MAAM;IAevB,+DAA+D;IACxD,KAAK,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAI1C;;;;;OAKG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,qBAAqB,GAAG,MAAM,EAAE;CA4BxE"}
@@ -0,0 +1,74 @@
1
+ import { strict as assert } from 'assert';
2
+ import { TaggedMemory } from '../avm_memory_types.js';
3
+ import { RelativeAddressOutOfRangeError } from '../errors.js';
4
+ export var AddressingMode = /*#__PURE__*/ function(AddressingMode) {
5
+ AddressingMode[AddressingMode["DIRECT"] = 0] = "DIRECT";
6
+ AddressingMode[AddressingMode["INDIRECT"] = 1] = "INDIRECT";
7
+ AddressingMode[AddressingMode["RELATIVE"] = 2] = "RELATIVE";
8
+ AddressingMode[AddressingMode["INDIRECT_RELATIVE"] = 3] = "INDIRECT_RELATIVE";
9
+ return AddressingMode;
10
+ }({});
11
+ /** A class to represent the addressing mode of an instruction. */ export class Addressing {
12
+ modePerOperand;
13
+ constructor(/** The addressing mode for each operand. The length of this array is the number of operands of the instruction. */ modePerOperand){
14
+ this.modePerOperand = modePerOperand;
15
+ }
16
+ // TODO(facundo): 8 for backwards compatibility.
17
+ static fromWire(wireModes, numOperands = 8) {
18
+ // The modes are stored in the wire format as a byte, with each bit representing the mode for an operand.
19
+ // The least significant bit represents the zeroth operand, and the most significant bit represents the last operand.
20
+ const modes = new Array(numOperands);
21
+ for(let i = 0; i < numOperands; i++){
22
+ modes[i] = (wireModes >> i & 1) * 1 | (wireModes >> i + numOperands & 1) * 2;
23
+ }
24
+ return new Addressing(modes);
25
+ }
26
+ toWire() {
27
+ // The modes are stored in the wire format as a byte, with each bit representing the mode for an operand.
28
+ // The least significant bit represents the zeroth operand, and the least significant bit represents the last operand.
29
+ let wire = 0;
30
+ for(let i = 0; i < this.modePerOperand.length; i++){
31
+ if (this.modePerOperand[i] & 1) {
32
+ wire |= 1 << i;
33
+ }
34
+ if (this.modePerOperand[i] & 2) {
35
+ wire |= 1 << this.modePerOperand.length + i;
36
+ }
37
+ }
38
+ return wire;
39
+ }
40
+ /** Returns how many operands use the given addressing mode. */ count(mode) {
41
+ return this.modePerOperand.filter((m)=>(m & mode) !== 0).length;
42
+ }
43
+ /**
44
+ * Resolves the offsets using the addressing mode.
45
+ * @param offsets The offsets to resolve.
46
+ * @param mem The memory to use for resolution.
47
+ * @returns The resolved offsets. The length of the returned array is the same as the length of the input array.
48
+ */ resolve(offsets, mem) {
49
+ assert(offsets.length <= this.modePerOperand.length);
50
+ const resolved = new Array(offsets.length);
51
+ let didRelativeOnce = false;
52
+ let baseAddr = 0;
53
+ for (const [i, offset] of offsets.entries()){
54
+ const mode = this.modePerOperand[i];
55
+ resolved[i] = offset;
56
+ if (mode & 2) {
57
+ if (!didRelativeOnce) {
58
+ mem.checkIsValidMemoryOffsetTag(0);
59
+ baseAddr = Number(mem.get(0).toBigInt());
60
+ didRelativeOnce = true;
61
+ }
62
+ resolved[i] += baseAddr;
63
+ if (resolved[i] >= TaggedMemory.MAX_MEMORY_SIZE) {
64
+ throw new RelativeAddressOutOfRangeError(baseAddr, offset);
65
+ }
66
+ }
67
+ if (mode & 1) {
68
+ mem.checkIsValidMemoryOffsetTag(resolved[i]);
69
+ resolved[i] = Number(mem.get(resolved[i]).toBigInt());
70
+ }
71
+ }
72
+ return resolved;
73
+ }
74
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/arithmetic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,WAAW,EAEhB,KAAK,qBAAqB,EAE3B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,8BAAsB,iCAAkC,SAAQ,uBAAuB;IACxE,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW;IACvE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGpF;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW;CAG/D;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW;CAG/D;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW;CAG/D;AAED,qBAAa,GAAI,SAAQ,iCAAiC;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW;cAQ3C,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI7F;AAED,qBAAa,QAAS,SAAQ,iCAAiC;IAC7D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,iBAAiB;IAEvC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK;cAKzB,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI7F"}
@@ -0,0 +1,73 @@
1
+ import { TaggedMemory, TypeTag } from '../avm_memory_types.js';
2
+ import { ArithmeticError } from '../errors.js';
3
+ import { Opcode } from '../serialization/instruction_serialization.js';
4
+ import { Addressing } from './addressing_mode.js';
5
+ import { ThreeOperandInstruction } from './instruction_impl.js';
6
+ export class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
7
+ async execute(context) {
8
+ const memory = context.machineState.memory;
9
+ context.machineState.consumeGas(this.gasCost());
10
+ const operands = [
11
+ this.aOffset,
12
+ this.bOffset,
13
+ this.dstOffset
14
+ ];
15
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
16
+ const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
17
+ this.checkTags(memory, aOffset, bOffset);
18
+ const a = memory.get(aOffset);
19
+ const b = memory.get(bOffset);
20
+ const dest = this.compute(a, b);
21
+ memory.set(dstOffset, dest);
22
+ }
23
+ checkTags(memory, aOffset, bOffset) {
24
+ memory.checkTagsAreSame(aOffset, bOffset);
25
+ }
26
+ }
27
+ export class Add extends ThreeOperandArithmeticInstruction {
28
+ static type = 'ADD';
29
+ static opcode = Opcode.ADD_8;
30
+ compute(a, b) {
31
+ return a.add(b);
32
+ }
33
+ }
34
+ export class Sub extends ThreeOperandArithmeticInstruction {
35
+ static type = 'SUB';
36
+ static opcode = Opcode.SUB_8;
37
+ compute(a, b) {
38
+ return a.sub(b);
39
+ }
40
+ }
41
+ export class Mul extends ThreeOperandArithmeticInstruction {
42
+ static type = 'MUL';
43
+ static opcode = Opcode.MUL_8;
44
+ compute(a, b) {
45
+ return a.mul(b);
46
+ }
47
+ }
48
+ export class Div extends ThreeOperandArithmeticInstruction {
49
+ static type = 'DIV';
50
+ static opcode = Opcode.DIV_8;
51
+ compute(a, b) {
52
+ if (b.toBigInt() === 0n) {
53
+ throw new ArithmeticError('Division by zero');
54
+ }
55
+ return a.div(b);
56
+ }
57
+ checkTags(memory, aOffset, bOffset) {
58
+ memory.checkTagsAreSame(aOffset, bOffset);
59
+ TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
60
+ }
61
+ }
62
+ export class FieldDiv extends ThreeOperandArithmeticInstruction {
63
+ static type = 'FDIV';
64
+ static opcode = Opcode.FDIV_8;
65
+ compute(a, b) {
66
+ // return (a as Field).fdiv(b as Field);
67
+ return a.fdiv(b);
68
+ }
69
+ checkTags(memory, aOffset, bOffset) {
70
+ memory.checkTagsAreSame(aOffset, bOffset);
71
+ memory.checkTag(TypeTag.FIELD, aOffset); // Follows that bOffset has also tag of type Field
72
+ }
73
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitwise.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/bitwise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,aAAa,EAAgB,KAAK,qBAAqB,EAAW,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,uBAAe,8BAA+B,SAAQ,uBAAuB;IAC9D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;IAC7E,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIpF;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;cAEnB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAG9E;AAED,qBAAa,EAAG,SAAQ,8BAA8B;IACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,eAAe;cAElB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAG9E;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;cAEnB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAG9E;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;cAEnB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;cAG1D,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI7F;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;cAEnB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;cAG1D,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI7F;AAED,qBAAa,GAAI,SAAQ,WAAW;IAOtB,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,SAAS;IANlF,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,MAAM,CAAC,QAAQ,CAAC,WAAW,gBAAgF;IAC3G,MAAM,CAAC,QAAQ,CAAC,YAAY,gBAAkF;gBAE1F,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM;IAI7E,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAazD"}
@@ -0,0 +1,106 @@
1
+ import { TaggedMemory, TypeTag } 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
+ import { ThreeOperandInstruction } from './instruction_impl.js';
6
+ class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
7
+ async execute(context) {
8
+ const memory = context.machineState.memory;
9
+ context.machineState.consumeGas(this.gasCost());
10
+ const operands = [
11
+ this.aOffset,
12
+ this.bOffset,
13
+ this.dstOffset
14
+ ];
15
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
16
+ const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
17
+ this.checkTags(memory, aOffset, bOffset);
18
+ const a = memory.getAs(aOffset);
19
+ const b = memory.getAs(bOffset);
20
+ const res = this.compute(a, b);
21
+ memory.set(dstOffset, res);
22
+ }
23
+ checkTags(memory, aOffset, bOffset) {
24
+ TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
25
+ memory.checkTagsAreSame(aOffset, bOffset);
26
+ }
27
+ }
28
+ export class And extends ThreeOperandBitwiseInstruction {
29
+ static type = 'AND';
30
+ static opcode = Opcode.AND_8;
31
+ compute(a, b) {
32
+ return a.and(b);
33
+ }
34
+ }
35
+ export class Or extends ThreeOperandBitwiseInstruction {
36
+ static type = 'OR';
37
+ static opcode = Opcode.OR_8;
38
+ compute(a, b) {
39
+ return a.or(b);
40
+ }
41
+ }
42
+ export class Xor extends ThreeOperandBitwiseInstruction {
43
+ static type = 'XOR';
44
+ static opcode = Opcode.XOR_8;
45
+ compute(a, b) {
46
+ return a.xor(b);
47
+ }
48
+ }
49
+ export class Shl extends ThreeOperandBitwiseInstruction {
50
+ static type = 'SHL';
51
+ static opcode = Opcode.SHL_8;
52
+ compute(a, b) {
53
+ return a.shl(b);
54
+ }
55
+ checkTags(memory, aOffset, bOffset) {
56
+ TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
57
+ memory.checkTag(TypeTag.UINT8, bOffset);
58
+ }
59
+ }
60
+ export class Shr extends ThreeOperandBitwiseInstruction {
61
+ static type = 'SHR';
62
+ static opcode = Opcode.SHR_8;
63
+ compute(a, b) {
64
+ return a.shr(b);
65
+ }
66
+ checkTags(memory, aOffset, bOffset) {
67
+ TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
68
+ memory.checkTag(TypeTag.UINT8, bOffset);
69
+ }
70
+ }
71
+ export class Not extends Instruction {
72
+ indirect;
73
+ srcOffset;
74
+ dstOffset;
75
+ static type = 'NOT';
76
+ static opcode = Opcode.NOT_8;
77
+ static wireFormat8 = [
78
+ OperandType.UINT8,
79
+ OperandType.UINT8,
80
+ OperandType.UINT8,
81
+ OperandType.UINT8
82
+ ];
83
+ static wireFormat16 = [
84
+ OperandType.UINT8,
85
+ OperandType.UINT8,
86
+ OperandType.UINT16,
87
+ OperandType.UINT16
88
+ ];
89
+ constructor(indirect, srcOffset, dstOffset){
90
+ super(), this.indirect = indirect, this.srcOffset = srcOffset, this.dstOffset = dstOffset;
91
+ }
92
+ async execute(context) {
93
+ const memory = context.machineState.memory;
94
+ context.machineState.consumeGas(this.gasCost());
95
+ const operands = [
96
+ this.srcOffset,
97
+ this.dstOffset
98
+ ];
99
+ const addressing = Addressing.fromWire(this.indirect, operands.length);
100
+ const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
101
+ TaggedMemory.checkIsIntegralTag(memory.getTag(srcOffset));
102
+ const value = memory.getAs(srcOffset);
103
+ const res = value.not();
104
+ memory.set(dstOffset, res);
105
+ }
106
+ }