@aztec/simulator 0.0.1-commit.3469e52 → 0.0.1-commit.350e0a4d

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 (352) hide show
  1. package/README.md +4 -4
  2. package/dest/client.d.ts +1 -3
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +0 -2
  5. package/dest/private/acvm/acvm.d.ts +4 -2
  6. package/dest/private/acvm/acvm.d.ts.map +1 -1
  7. package/dest/private/acvm/acvm.js +4 -3
  8. package/dest/private/acvm_native.d.ts +5 -3
  9. package/dest/private/acvm_native.d.ts.map +1 -1
  10. package/dest/private/acvm_native.js +8 -6
  11. package/dest/private/acvm_wasm.d.ts +4 -3
  12. package/dest/private/acvm_wasm.d.ts.map +1 -1
  13. package/dest/private/acvm_wasm.js +7 -5
  14. package/dest/private/circuit_recording/circuit_recorder.d.ts +39 -25
  15. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  16. package/dest/private/circuit_recording/circuit_recorder.js +70 -72
  17. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +9 -20
  18. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  19. package/dest/private/circuit_recording/file_circuit_recorder.js +39 -43
  20. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
  21. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
  22. package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
  23. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
  24. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  25. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +11 -14
  26. package/dest/private/factory.d.ts +3 -3
  27. package/dest/private/factory.d.ts.map +1 -1
  28. package/dest/private/factory.js +7 -4
  29. package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
  30. package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
  31. package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
  32. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +2 -1
  33. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
  34. package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +18 -3
  35. package/dest/public/avm/testing/utils.d.ts +32 -0
  36. package/dest/public/avm/testing/utils.d.ts.map +1 -0
  37. package/dest/public/avm/{fixtures → testing}/utils.js +4 -34
  38. package/dest/public/contracts_db_checkpoint.d.ts +2 -2
  39. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
  40. package/dest/public/contracts_db_checkpoint.js +1 -1
  41. package/dest/public/executor_metrics.d.ts +1 -1
  42. package/dest/public/executor_metrics.d.ts.map +1 -1
  43. package/dest/public/executor_metrics.js +7 -2
  44. package/dest/public/fixtures/amm_test.js +4 -4
  45. package/dest/public/fixtures/bulk_test.d.ts +1 -1
  46. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  47. package/dest/public/fixtures/bulk_test.js +33 -6
  48. package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
  49. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
  50. package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
  51. package/dest/public/fixtures/index.d.ts +1 -4
  52. package/dest/public/fixtures/index.d.ts.map +1 -1
  53. package/dest/public/fixtures/index.js +0 -3
  54. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +8 -7
  55. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  56. package/dest/public/fixtures/public_tx_simulation_tester.js +17 -16
  57. package/dest/public/fixtures/simple_contract_data_source.js +1 -1
  58. package/dest/public/fixtures/token_test.js +3 -3
  59. package/dest/public/fixtures/utils.d.ts +2 -2
  60. package/dest/public/fixtures/utils.d.ts.map +1 -1
  61. package/dest/public/fixtures/utils.js +21 -20
  62. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +6 -4
  63. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  64. package/dest/public/fuzzing/avm_fuzzer_simulator.js +12 -7
  65. package/dest/public/fuzzing/avm_simulator_bin.js +11 -8
  66. package/dest/public/index.d.ts +2 -2
  67. package/dest/public/index.d.ts.map +1 -1
  68. package/dest/public/index.js +1 -1
  69. package/dest/public/public_db_sources.d.ts +9 -5
  70. package/dest/public/public_db_sources.d.ts.map +1 -1
  71. package/dest/public/public_db_sources.js +20 -14
  72. package/dest/public/public_processor/guarded_merkle_tree.d.ts +8 -7
  73. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  74. package/dest/public/public_processor/guarded_merkle_tree.js +8 -5
  75. package/dest/public/public_processor/public_processor.d.ts +11 -6
  76. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  77. package/dest/public/public_processor/public_processor.js +112 -74
  78. package/dest/public/public_processor/public_processor_metrics.d.ts +5 -2
  79. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  80. package/dest/public/public_processor/public_processor_metrics.js +28 -4
  81. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +3 -2
  82. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -1
  83. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +7 -6
  84. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +23 -0
  85. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  86. package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +4 -4
  87. package/dest/public/public_tx_simulator/factories.d.ts +7 -6
  88. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
  89. package/dest/public/public_tx_simulator/factories.js +8 -8
  90. package/dest/public/public_tx_simulator/index.d.ts +3 -5
  91. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  92. package/dest/public/public_tx_simulator/index.js +2 -4
  93. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -70
  94. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  95. package/dest/public/public_tx_simulator/public_tx_simulator.js +99 -317
  96. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +22 -0
  97. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  98. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +28 -0
  99. package/dest/public/test_executor_metrics.d.ts +3 -2
  100. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  101. package/dest/public/test_executor_metrics.js +2 -2
  102. package/package.json +17 -18
  103. package/src/client.ts +0 -2
  104. package/src/private/acvm/acvm.ts +4 -3
  105. package/src/private/acvm_native.ts +11 -5
  106. package/src/private/acvm_wasm.ts +11 -4
  107. package/src/private/circuit_recording/circuit_recorder.ts +89 -81
  108. package/src/private/circuit_recording/file_circuit_recorder.ts +45 -50
  109. package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
  110. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
  111. package/src/private/factory.ts +7 -4
  112. package/src/public/avm/testing/account_proof.json +553 -0
  113. package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
  114. package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
  115. package/src/public/avm/{fixtures → testing}/utils.ts +4 -40
  116. package/src/public/contracts_db_checkpoint.ts +1 -1
  117. package/src/public/executor_metrics.ts +4 -1
  118. package/src/public/fixtures/amm_test.ts +4 -4
  119. package/src/public/fixtures/bulk_test.ts +31 -6
  120. package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
  121. package/src/public/fixtures/index.ts +0 -3
  122. package/src/public/fixtures/public_tx_simulation_tester.ts +28 -14
  123. package/src/public/fixtures/simple_contract_data_source.ts +1 -1
  124. package/src/public/fixtures/token_test.ts +3 -3
  125. package/src/public/fixtures/utils.ts +23 -24
  126. package/src/public/fuzzing/avm_fuzzer_simulator.ts +16 -19
  127. package/src/public/fuzzing/avm_simulator_bin.ts +14 -6
  128. package/src/public/index.ts +3 -3
  129. package/src/public/public_db_sources.ts +36 -19
  130. package/src/public/public_processor/guarded_merkle_tree.ts +11 -8
  131. package/src/public/public_processor/public_processor.ts +156 -94
  132. package/src/public/public_processor/public_processor_metrics.ts +22 -4
  133. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +11 -7
  134. package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +5 -3
  135. package/src/public/public_tx_simulator/factories.ts +10 -7
  136. package/src/public/public_tx_simulator/index.ts +2 -4
  137. package/src/public/public_tx_simulator/public_tx_simulator.ts +153 -470
  138. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +35 -0
  139. package/src/public/test_executor_metrics.ts +3 -3
  140. package/dest/public/avm/avm_context.d.ts +0 -41
  141. package/dest/public/avm/avm_context.d.ts.map +0 -1
  142. package/dest/public/avm/avm_context.js +0 -44
  143. package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
  144. package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
  145. package/dest/public/avm/avm_contract_call_result.js +0 -54
  146. package/dest/public/avm/avm_execution_environment.d.ts +0 -23
  147. package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
  148. package/dest/public/avm/avm_execution_environment.js +0 -33
  149. package/dest/public/avm/avm_gas.d.ts +0 -44
  150. package/dest/public/avm/avm_gas.d.ts.map +0 -1
  151. package/dest/public/avm/avm_gas.js +0 -195
  152. package/dest/public/avm/avm_machine_state.d.ts +0 -97
  153. package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
  154. package/dest/public/avm/avm_machine_state.js +0 -109
  155. package/dest/public/avm/avm_memory_types.d.ts +0 -275
  156. package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
  157. package/dest/public/avm/avm_memory_types.js +0 -351
  158. package/dest/public/avm/avm_simulator.d.ts +0 -40
  159. package/dest/public/avm/avm_simulator.d.ts.map +0 -1
  160. package/dest/public/avm/avm_simulator.js +0 -191
  161. package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
  162. package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
  163. package/dest/public/avm/avm_simulator_interface.js +0 -3
  164. package/dest/public/avm/errors.d.ts +0 -104
  165. package/dest/public/avm/errors.d.ts.map +0 -1
  166. package/dest/public/avm/errors.js +0 -141
  167. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
  168. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  169. package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -83
  170. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  171. package/dest/public/avm/fixtures/initializers.d.ts +0 -42
  172. package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
  173. package/dest/public/avm/fixtures/initializers.js +0 -44
  174. package/dest/public/avm/fixtures/utils.d.ts +0 -39
  175. package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
  176. package/dest/public/avm/index.d.ts +0 -2
  177. package/dest/public/avm/index.d.ts.map +0 -1
  178. package/dest/public/avm/index.js +0 -1
  179. package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -75
  180. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
  181. package/dest/public/avm/opcodes/accrued_substate.js +0 -255
  182. package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
  183. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
  184. package/dest/public/avm/opcodes/addressing_mode.js +0 -94
  185. package/dest/public/avm/opcodes/arithmetic.d.ts +0 -49
  186. package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
  187. package/dest/public/avm/opcodes/arithmetic.js +0 -97
  188. package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
  189. package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
  190. package/dest/public/avm/opcodes/bitwise.js +0 -99
  191. package/dest/public/avm/opcodes/comparators.d.ts +0 -25
  192. package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
  193. package/dest/public/avm/opcodes/comparators.js +0 -43
  194. package/dest/public/avm/opcodes/contract.d.ts +0 -20
  195. package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
  196. package/dest/public/avm/opcodes/contract.js +0 -65
  197. package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
  198. package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
  199. package/dest/public/avm/opcodes/control_flow.js +0 -107
  200. package/dest/public/avm/opcodes/conversion.d.ts +0 -18
  201. package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
  202. package/dest/public/avm/opcodes/conversion.js +0 -333
  203. package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
  204. package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
  205. package/dest/public/avm/opcodes/ec_add.js +0 -93
  206. package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
  207. package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
  208. package/dest/public/avm/opcodes/environment_getters.js +0 -77
  209. package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
  210. package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
  211. package/dest/public/avm/opcodes/external_calls.js +0 -210
  212. package/dest/public/avm/opcodes/hashing.d.ts +0 -36
  213. package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
  214. package/dest/public/avm/opcodes/hashing.js +0 -119
  215. package/dest/public/avm/opcodes/index.d.ts +0 -16
  216. package/dest/public/avm/opcodes/index.d.ts.map +0 -1
  217. package/dest/public/avm/opcodes/index.js +0 -15
  218. package/dest/public/avm/opcodes/instruction.d.ts +0 -74
  219. package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
  220. package/dest/public/avm/opcodes/instruction.js +0 -95
  221. package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
  222. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
  223. package/dest/public/avm/opcodes/instruction_impl.js +0 -30
  224. package/dest/public/avm/opcodes/memory.d.ts +0 -74
  225. package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
  226. package/dest/public/avm/opcodes/memory.js +0 -257
  227. package/dest/public/avm/opcodes/misc.d.ts +0 -18
  228. package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
  229. package/dest/public/avm/opcodes/misc.js +0 -73
  230. package/dest/public/avm/opcodes/storage.d.ts +0 -24
  231. package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
  232. package/dest/public/avm/opcodes/storage.js +0 -68
  233. package/dest/public/avm/revert_reason.d.ts +0 -18
  234. package/dest/public/avm/revert_reason.d.ts.map +0 -1
  235. package/dest/public/avm/revert_reason.js +0 -39
  236. package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
  237. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
  238. package/dest/public/avm/serialization/buffer_cursor.js +0 -99
  239. package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
  240. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  241. package/dest/public/avm/serialization/bytecode_serialization.js +0 -336
  242. package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
  243. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
  244. package/dest/public/avm/serialization/instruction_serialization.js +0 -261
  245. package/dest/public/avm/test_utils.d.ts +0 -15
  246. package/dest/public/avm/test_utils.d.ts.map +0 -1
  247. package/dest/public/avm/test_utils.js +0 -44
  248. package/dest/public/debug_fn_name.d.ts +0 -18
  249. package/dest/public/debug_fn_name.d.ts.map +0 -1
  250. package/dest/public/debug_fn_name.js +0 -35
  251. package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -12
  252. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
  253. package/dest/public/fixtures/custom_bytecode_tests.js +0 -174
  254. package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
  255. package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
  256. package/dest/public/fixtures/minimal_public_tx.js +0 -19
  257. package/dest/public/fixtures/opcode_spammer.d.ts +0 -123
  258. package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
  259. package/dest/public/fixtures/opcode_spammer.js +0 -1681
  260. package/dest/public/hinting_db_sources.d.ts +0 -80
  261. package/dest/public/hinting_db_sources.d.ts.map +0 -1
  262. package/dest/public/hinting_db_sources.js +0 -355
  263. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
  264. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
  265. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -132
  266. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
  267. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
  268. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
  269. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
  270. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
  271. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
  272. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -22
  273. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
  274. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
  275. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
  276. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
  277. package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -130
  278. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
  279. package/dest/public/public_tx_simulator/public_tx_context.js +0 -300
  280. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
  281. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
  282. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -415
  283. package/dest/public/side_effect_trace.d.ts +0 -87
  284. package/dest/public/side_effect_trace.d.ts.map +0 -1
  285. package/dest/public/side_effect_trace.js +0 -199
  286. package/dest/public/side_effect_trace_interface.d.ts +0 -22
  287. package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
  288. package/dest/public/side_effect_trace_interface.js +0 -1
  289. package/dest/public/state_manager/index.d.ts +0 -2
  290. package/dest/public/state_manager/index.d.ts.map +0 -1
  291. package/dest/public/state_manager/index.js +0 -1
  292. package/dest/public/state_manager/nullifiers.d.ts +0 -61
  293. package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
  294. package/dest/public/state_manager/nullifiers.js +0 -92
  295. package/dest/public/state_manager/public_storage.d.ts +0 -66
  296. package/dest/public/state_manager/public_storage.d.ts.map +0 -1
  297. package/dest/public/state_manager/public_storage.js +0 -145
  298. package/dest/public/state_manager/state_manager.d.ts +0 -164
  299. package/dest/public/state_manager/state_manager.d.ts.map +0 -1
  300. package/dest/public/state_manager/state_manager.js +0 -395
  301. package/src/public/avm/avm_context.ts +0 -61
  302. package/src/public/avm/avm_contract_call_result.ts +0 -67
  303. package/src/public/avm/avm_execution_environment.ts +0 -46
  304. package/src/public/avm/avm_gas.ts +0 -183
  305. package/src/public/avm/avm_machine_state.ts +0 -169
  306. package/src/public/avm/avm_memory_types.ts +0 -436
  307. package/src/public/avm/avm_simulator.ts +0 -276
  308. package/src/public/avm/avm_simulator_interface.ts +0 -8
  309. package/src/public/avm/errors.ts +0 -177
  310. package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -116
  311. package/src/public/avm/fixtures/initializers.ts +0 -102
  312. package/src/public/avm/index.ts +0 -1
  313. package/src/public/avm/opcodes/accrued_substate.ts +0 -288
  314. package/src/public/avm/opcodes/addressing_mode.ts +0 -111
  315. package/src/public/avm/opcodes/arithmetic.ts +0 -129
  316. package/src/public/avm/opcodes/bitwise.ts +0 -113
  317. package/src/public/avm/opcodes/comparators.ts +0 -55
  318. package/src/public/avm/opcodes/contract.ts +0 -75
  319. package/src/public/avm/opcodes/control_flow.ts +0 -123
  320. package/src/public/avm/opcodes/conversion.ts +0 -104
  321. package/src/public/avm/opcodes/ec_add.ts +0 -105
  322. package/src/public/avm/opcodes/environment_getters.ts +0 -87
  323. package/src/public/avm/opcodes/external_calls.ts +0 -261
  324. package/src/public/avm/opcodes/hashing.ts +0 -151
  325. package/src/public/avm/opcodes/index.ts +0 -15
  326. package/src/public/avm/opcodes/instruction.ts +0 -136
  327. package/src/public/avm/opcodes/instruction_impl.ts +0 -36
  328. package/src/public/avm/opcodes/memory.ts +0 -293
  329. package/src/public/avm/opcodes/misc.ts +0 -102
  330. package/src/public/avm/opcodes/storage.ts +0 -87
  331. package/src/public/avm/revert_reason.ts +0 -58
  332. package/src/public/avm/serialization/buffer_cursor.ts +0 -118
  333. package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
  334. package/src/public/avm/serialization/instruction_serialization.ts +0 -249
  335. package/src/public/avm/test_utils.ts +0 -64
  336. package/src/public/debug_fn_name.ts +0 -50
  337. package/src/public/fixtures/custom_bytecode_tests.ts +0 -228
  338. package/src/public/fixtures/minimal_public_tx.ts +0 -26
  339. package/src/public/fixtures/opcode_spammer.ts +0 -1725
  340. package/src/public/hinting_db_sources.ts +0 -607
  341. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -208
  342. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -132
  343. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -237
  344. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
  345. package/src/public/public_tx_simulator/public_tx_context.ts +0 -477
  346. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
  347. package/src/public/side_effect_trace.ts +0 -290
  348. package/src/public/side_effect_trace_interface.ts +0 -28
  349. package/src/public/state_manager/index.ts +0 -1
  350. package/src/public/state_manager/nullifiers.ts +0 -103
  351. package/src/public/state_manager/public_storage.ts +0 -174
  352. package/src/public/state_manager/state_manager.ts +0 -546
@@ -1,111 +0,0 @@
1
- import { AVM_MAX_OPERANDS } from '@aztec/constants';
2
- import { padArrayEnd } from '@aztec/foundation/collection';
3
- import type { Tuple } from '@aztec/foundation/serialize';
4
-
5
- import { strict as assert } from 'assert';
6
-
7
- import { MemoryValue, TaggedMemory, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
8
- import { RelativeAddressOutOfRangeError, TagCheckError } from '../errors.js';
9
-
10
- export enum AddressingMode {
11
- DIRECT = 0,
12
- INDIRECT = 1,
13
- RELATIVE = 2,
14
- INDIRECT_RELATIVE = 3,
15
- }
16
-
17
- /** A class to represent the addressing mode of an instruction. */
18
- export class Addressing {
19
- public constructor(
20
- /** The addressing mode for each possible operand. */
21
- private readonly modePerOperand: Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>,
22
- ) {}
23
-
24
- public static fromModes(modes: AddressingMode[]): Addressing {
25
- assert(modes.length <= AVM_MAX_OPERANDS, 'Too many operands for addressing mode');
26
- return new Addressing(padArrayEnd(modes, AddressingMode.DIRECT, AVM_MAX_OPERANDS));
27
- }
28
-
29
- public static fromWire(wireModes: number): Addressing {
30
- // The modes are stored in the wire format as one or two bytes, with each two bits representing the modes for an operand.
31
- // Even bits are indirect, odd bits are relative.
32
- const modes = new Array<AddressingMode>(AVM_MAX_OPERANDS);
33
- for (let i = 0; i < AVM_MAX_OPERANDS; i++) {
34
- modes[i] =
35
- (((wireModes >> (i * 2)) & 1) * AddressingMode.INDIRECT) |
36
- (((wireModes >> (i * 2 + 1)) & 1) * AddressingMode.RELATIVE);
37
- }
38
- // Casting the array to tuple since it should be more performant than using makeTuple
39
- return new Addressing(modes as Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>);
40
- }
41
-
42
- public toWire(): number {
43
- // The modes are stored in the wire format as a byte, with each bit representing the mode for an operand.
44
- // The least significant bit represents the zeroth operand, and the least significant bit represents the last operand.
45
- let wire: number = 0;
46
- for (let i = 0; i < this.modePerOperand.length; i++) {
47
- if (this.modePerOperand[i] & AddressingMode.INDIRECT) {
48
- wire |= 1 << (i * 2);
49
- }
50
- if (this.modePerOperand[i] & AddressingMode.RELATIVE) {
51
- wire |= 1 << (i * 2 + 1);
52
- }
53
- }
54
- return wire;
55
- }
56
-
57
- public indirectOperandsCount(): number {
58
- return this.modePerOperand.filter(mode => mode & AddressingMode.INDIRECT).length;
59
- }
60
-
61
- public relativeOperandsCount(): number {
62
- return this.modePerOperand.filter(mode => mode & AddressingMode.RELATIVE).length;
63
- }
64
-
65
- /**
66
- * Resolves the offsets using the addressing mode.
67
- * @param offsets The offsets to resolve.
68
- * @param mem The memory to use for resolution.
69
- * @returns The resolved offsets. The length of the returned array is the same as the length of the input array and the resolved offsets are guaranteed to be valid addresses.
70
- * @throws An error if any step failed. Should be treated as a black box.
71
- */
72
- public resolve(offsets: number[], mem: TaggedMemoryInterface): number[] {
73
- const resolved: number[] = new Array(offsets.length);
74
- // These will be read (once) if we have any relative operands.
75
- let baseAddr: MemoryValue | undefined;
76
-
77
- for (const [i, offset] of offsets.entries()) {
78
- const mode = this.modePerOperand[i];
79
- // The given offsets are assumed to be valid addresses.
80
- resolved[i] = offset;
81
- if (mode & AddressingMode.RELATIVE) {
82
- if (!baseAddr) {
83
- baseAddr = mem.get(0);
84
- const baseAddrTag = baseAddr.getTag();
85
- if (!TaggedMemory.isValidMemoryAddressTag(baseAddrTag!)) {
86
- throw TagCheckError.forBaseAddress(TypeTag[baseAddrTag!]);
87
- }
88
- }
89
- // Here we know that resolved[i] is at most 32 bits and baseAddr is at most 32 bits.
90
- // Therefore, the addition is safe since the `number` type fits more than 33 bits.
91
- resolved[i] += Number(baseAddr.toBigInt());
92
- if (resolved[i] >= TaggedMemory.MAX_MEMORY_SIZE) {
93
- throw new RelativeAddressOutOfRangeError(Number(baseAddr.toBigInt()), offset);
94
- }
95
- }
96
- if (mode & AddressingMode.INDIRECT) {
97
- // At this point we know that resolved[i] is a valid memory address.
98
- const resolvedValue = mem.get(resolved[i]);
99
- const resolvedTag = resolvedValue.getTag();
100
-
101
- // Final check.
102
- if (!TaggedMemory.isValidMemoryAddressTag(resolvedTag)) {
103
- throw TagCheckError.forIndirectAddress(resolved[i], TypeTag[resolvedTag]);
104
- }
105
-
106
- resolved[i] = Number(resolvedValue.toBigInt());
107
- }
108
- }
109
- return resolved;
110
- }
111
- }
@@ -1,129 +0,0 @@
1
- import type { AvmContext } from '../avm_context.js';
2
- import {
3
- type Field,
4
- type IntegralValue,
5
- type MemoryValue,
6
- TaggedMemory,
7
- type TaggedMemoryInterface,
8
- TypeTag,
9
- } from '../avm_memory_types.js';
10
- import { ArithmeticError } from '../errors.js';
11
- import { Opcode } from '../serialization/instruction_serialization.js';
12
- import { Addressing } from './addressing_mode.js';
13
- import { ThreeOperandInstruction } from './instruction_impl.js';
14
-
15
- export abstract class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
16
- public async execute(context: AvmContext): Promise<void> {
17
- const memory = context.machineState.memory;
18
- const addressing = Addressing.fromWire(this.addressingMode);
19
-
20
- context.machineState.consumeGas(
21
- this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
22
- );
23
-
24
- const operands = [this.aOffset, this.bOffset, this.dstOffset];
25
- const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
26
- this.checkTags(memory, aOffset, bOffset);
27
-
28
- const a = memory.get(aOffset);
29
- const b = memory.get(bOffset);
30
-
31
- const dest = this.compute(a, b);
32
- memory.set(dstOffset, dest);
33
- }
34
-
35
- protected abstract compute(a: MemoryValue, b: MemoryValue): MemoryValue;
36
- protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
37
- memory.checkTagsAreSame(aOffset, bOffset);
38
- }
39
- }
40
-
41
- export class Add extends ThreeOperandArithmeticInstruction {
42
- static readonly type: string = 'ADD';
43
- static readonly opcode = Opcode.ADD_8; // FIXME: needed for gas.
44
-
45
- protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
46
- return a.add(b);
47
- }
48
- }
49
-
50
- export class Sub extends ThreeOperandArithmeticInstruction {
51
- static readonly type: string = 'SUB';
52
- static readonly opcode = Opcode.SUB_8; // FIXME: needed for gas.
53
-
54
- protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
55
- return a.sub(b);
56
- }
57
- }
58
-
59
- export class Mul extends ThreeOperandArithmeticInstruction {
60
- static type: string = 'MUL';
61
- static readonly opcode = Opcode.MUL_8; // FIXME: needed for gas.
62
-
63
- protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
64
- return a.mul(b);
65
- }
66
- }
67
-
68
- export class Div extends ThreeOperandArithmeticInstruction {
69
- static type: string = 'DIV';
70
- static readonly opcode = Opcode.DIV_8; // FIXME: needed for gas.
71
-
72
- protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
73
- if (b.toBigInt() === 0n) {
74
- throw new ArithmeticError('Division by zero');
75
- }
76
-
77
- return a.div(b);
78
- }
79
-
80
- protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
81
- memory.checkTagsAreSame(aOffset, bOffset);
82
- TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
83
- }
84
- }
85
-
86
- export class FieldDiv extends ThreeOperandArithmeticInstruction {
87
- static type: string = 'FDIV';
88
- static readonly opcode = Opcode.FDIV_8; // FIXME: needed for gas.
89
-
90
- protected compute(a: Field, b: Field): Field {
91
- if (b.toBigInt() === 0n) {
92
- throw new ArithmeticError('Division by zero');
93
- }
94
- return a.fdiv(b);
95
- }
96
-
97
- protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
98
- memory.checkTagsAreSame(aOffset, bOffset);
99
- memory.checkTag(TypeTag.FIELD, aOffset); // Follows that bOffset has also tag of type Field
100
- }
101
- }
102
-
103
- export class Shl extends ThreeOperandArithmeticInstruction {
104
- static readonly type: string = 'SHL';
105
- static readonly opcode = Opcode.SHL_8; // FIXME: needed for gas.
106
-
107
- protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
108
- return a.shl(b);
109
- }
110
-
111
- protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
112
- memory.checkTagsAreSame(aOffset, bOffset);
113
- TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
114
- }
115
- }
116
-
117
- export class Shr extends ThreeOperandArithmeticInstruction {
118
- static readonly type: string = 'SHR';
119
- static readonly opcode = Opcode.SHR_8; // FIXME: needed for gas.
120
-
121
- protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
122
- return a.shr(b);
123
- }
124
-
125
- protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
126
- memory.checkTagsAreSame(aOffset, bOffset);
127
- TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
128
- }
129
- }
@@ -1,113 +0,0 @@
1
- import type { AvmContext } from '../avm_context.js';
2
- import { getBitwiseDynamicGasMultiplier } from '../avm_gas.js';
3
- import { type IntegralValue, TaggedMemory, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
4
- import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
5
- import { Addressing } from './addressing_mode.js';
6
- import { Instruction } from './instruction.js';
7
- import { ThreeOperandInstruction } from './instruction_impl.js';
8
-
9
- abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
10
- public async execute(context: AvmContext): Promise<void> {
11
- const memory = context.machineState.memory;
12
- const addressing = Addressing.fromWire(this.addressingMode);
13
-
14
- context.machineState.consumeGas(
15
- this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
16
- );
17
-
18
- const operands = [this.aOffset, this.bOffset, this.dstOffset];
19
- const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
20
- this.checkTags(memory, aOffset, bOffset);
21
-
22
- const multiplier = this.getDynamicMultiplier(memory.getTag(aOffset));
23
- context.machineState.consumeGas(this.dynamicGasCost(multiplier));
24
-
25
- const a = memory.getAs<IntegralValue>(aOffset);
26
- const b = memory.getAs<IntegralValue>(bOffset);
27
-
28
- const res = this.compute(a, b);
29
- memory.set(dstOffset, res);
30
- }
31
-
32
- protected abstract compute(a: IntegralValue, b: IntegralValue): IntegralValue;
33
- protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
34
- TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
35
- memory.checkTagsAreSame(aOffset, bOffset);
36
- }
37
-
38
- protected getDynamicMultiplier(_lhsTag: TypeTag): number {
39
- return 0;
40
- }
41
- }
42
-
43
- export class And extends ThreeOperandBitwiseInstruction {
44
- static readonly type: string = 'AND';
45
- static readonly opcode = Opcode.AND_8; // FIXME: needed for gas.
46
-
47
- protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
48
- return a.and(b);
49
- }
50
-
51
- protected override getDynamicMultiplier(lhsTag: TypeTag): number {
52
- return getBitwiseDynamicGasMultiplier(lhsTag);
53
- }
54
- }
55
-
56
- export class Or extends ThreeOperandBitwiseInstruction {
57
- static readonly type: string = 'OR';
58
- static readonly opcode = Opcode.OR_8; // FIXME: needed for gas.
59
-
60
- protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
61
- return a.or(b);
62
- }
63
-
64
- protected override getDynamicMultiplier(lhsTag: TypeTag): number {
65
- return getBitwiseDynamicGasMultiplier(lhsTag);
66
- }
67
- }
68
-
69
- export class Xor extends ThreeOperandBitwiseInstruction {
70
- static readonly type: string = 'XOR';
71
- static readonly opcode = Opcode.XOR_8; // FIXME: needed for gas.
72
-
73
- protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
74
- return a.xor(b);
75
- }
76
-
77
- protected override getDynamicMultiplier(lhsTag: TypeTag): number {
78
- return getBitwiseDynamicGasMultiplier(lhsTag);
79
- }
80
- }
81
-
82
- export class Not extends Instruction {
83
- static readonly type: string = 'NOT';
84
- static readonly opcode = Opcode.NOT_8;
85
-
86
- static readonly wireFormat8 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT8, OperandType.UINT8];
87
- static readonly wireFormat16 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
88
-
89
- constructor(
90
- private addressingMode: number,
91
- private srcOffset: number,
92
- private dstOffset: number,
93
- ) {
94
- super();
95
- }
96
-
97
- public async execute(context: AvmContext): Promise<void> {
98
- const memory = context.machineState.memory;
99
- const addressing = Addressing.fromWire(this.addressingMode);
100
-
101
- context.machineState.consumeGas(
102
- this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
103
- );
104
-
105
- const operands = [this.srcOffset, this.dstOffset];
106
- const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
107
- TaggedMemory.checkIsIntegralTag(memory.getTag(srcOffset));
108
- const value = memory.getAs<IntegralValue>(srcOffset);
109
-
110
- const res = value.not();
111
- memory.set(dstOffset, res);
112
- }
113
- }
@@ -1,55 +0,0 @@
1
- import type { AvmContext } from '../avm_context.js';
2
- import { type MemoryValue, Uint1 } from '../avm_memory_types.js';
3
- import { Opcode } from '../serialization/instruction_serialization.js';
4
- import { Addressing } from './addressing_mode.js';
5
- import { ThreeOperandInstruction } from './instruction_impl.js';
6
-
7
- abstract class ComparatorInstruction extends ThreeOperandInstruction {
8
- public async execute(context: AvmContext): Promise<void> {
9
- const memory = context.machineState.memory;
10
- const addressing = Addressing.fromWire(this.addressingMode);
11
-
12
- context.machineState.consumeGas(
13
- this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
14
- );
15
-
16
- const operands = [this.aOffset, this.bOffset, this.dstOffset];
17
- const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
18
- memory.checkTagsAreSame(aOffset, bOffset); // Brillig semantic enforces that tags match.
19
-
20
- const a = memory.get(aOffset);
21
- const b = memory.get(bOffset);
22
-
23
- const dest = new Uint1(this.compare(a, b) ? 1 : 0);
24
- memory.set(dstOffset, dest);
25
- }
26
-
27
- protected abstract compare(a: MemoryValue, b: MemoryValue): boolean;
28
- }
29
-
30
- export class Eq extends ComparatorInstruction {
31
- static readonly type: string = 'EQ';
32
- static readonly opcode = Opcode.EQ_8; // FIXME: needed for gas.
33
-
34
- protected compare(a: MemoryValue, b: MemoryValue): boolean {
35
- return a.equals(b);
36
- }
37
- }
38
-
39
- export class Lt extends ComparatorInstruction {
40
- static readonly type: string = 'LT';
41
- static readonly opcode = Opcode.LT_8; // FIXME: needed for gas.
42
-
43
- protected compare(a: MemoryValue, b: MemoryValue): boolean {
44
- return a.lt(b);
45
- }
46
- }
47
-
48
- export class Lte extends ComparatorInstruction {
49
- static readonly type: string = 'LTE';
50
- static readonly opcode = Opcode.LTE_8; // FIXME: needed for gas.
51
-
52
- protected compare(a: MemoryValue, b: MemoryValue): boolean {
53
- return a.lt(b) || a.equals(b);
54
- }
55
- }
@@ -1,75 +0,0 @@
1
- import type { AvmContext } from '../avm_context.js';
2
- import { Field, TypeTag, Uint1 } from '../avm_memory_types.js';
3
- import { InstructionExecutionError } from '../errors.js';
4
- import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
5
- import { Addressing } from './addressing_mode.js';
6
- import { Instruction } from './instruction.js';
7
-
8
- export enum ContractInstanceMember {
9
- DEPLOYER,
10
- CLASS_ID,
11
- INIT_HASH,
12
- }
13
-
14
- export class GetContractInstance extends Instruction {
15
- static readonly type: string = 'GETCONTRACTINSTANCE';
16
- static readonly opcode: Opcode = Opcode.GETCONTRACTINSTANCE;
17
- // Informs (de)serialization. See Instruction.deserialize.
18
- static readonly wireFormat: OperandType[] = [
19
- OperandType.UINT8, // opcode
20
- OperandType.UINT8, // addressing_mode bits
21
- OperandType.UINT16, // addressOffset
22
- OperandType.UINT16, // dstOffset
23
- OperandType.UINT8, // member enum (immediate)
24
- ];
25
-
26
- constructor(
27
- private addressingMode: number,
28
- private addressOffset: number,
29
- private dstOffset: number,
30
- private memberEnum: number,
31
- ) {
32
- super();
33
- }
34
-
35
- async execute(context: AvmContext): Promise<void> {
36
- const memory = context.machineState.memory;
37
- const addressing = Addressing.fromWire(this.addressingMode);
38
-
39
- context.machineState.consumeGas(
40
- this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
41
- );
42
-
43
- if (!(this.memberEnum in ContractInstanceMember)) {
44
- throw new InstructionExecutionError(`Invalid GETCONSTRACTINSTANCE member enum ${this.memberEnum}`);
45
- }
46
-
47
- const operands = [this.addressOffset, this.dstOffset];
48
- const [addressOffset, dstOffset] = addressing.resolve(operands, memory);
49
- memory.checkTag(TypeTag.FIELD, addressOffset);
50
-
51
- const address = memory.get(addressOffset).toAztecAddress();
52
- const instance = await context.persistableState.getContractInstance(address);
53
- const exists = instance !== undefined;
54
-
55
- let memberValue = new Field(0);
56
- if (exists) {
57
- switch (this.memberEnum as ContractInstanceMember) {
58
- case ContractInstanceMember.DEPLOYER:
59
- memberValue = new Field(instance.deployer.toField());
60
- break;
61
- case ContractInstanceMember.CLASS_ID:
62
- memberValue = new Field(instance.currentContractClassId.toField());
63
- break;
64
- case ContractInstanceMember.INIT_HASH:
65
- memberValue = new Field(instance.initializationHash);
66
- break;
67
- }
68
- }
69
-
70
- const existsOffset = dstOffset;
71
- const memberValueOffset = dstOffset + 1;
72
- memory.set(existsOffset, new Uint1(exists ? 1 : 0));
73
- memory.set(memberValueOffset, memberValue);
74
- }
75
- }
@@ -1,123 +0,0 @@
1
- import type { AvmContext } from '../avm_context.js';
2
- import { TypeTag, type Uint1 } from '../avm_memory_types.js';
3
- import { InstructionExecutionError } from '../errors.js';
4
- import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
5
- import { Addressing } from './addressing_mode.js';
6
- import { Instruction } from './instruction.js';
7
-
8
- export class Jump extends Instruction {
9
- static type: string = 'JUMP';
10
- static readonly opcode: Opcode = Opcode.JUMP_32;
11
- // Informs (de)serialization. See Instruction.deserialize.
12
- static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT32];
13
-
14
- constructor(private jumpOffset: number) {
15
- super();
16
- }
17
-
18
- public async execute(context: AvmContext): Promise<void> {
19
- context.machineState.consumeGas(this.baseGasCost(0, 0));
20
-
21
- context.machineState.pc = this.jumpOffset;
22
- }
23
-
24
- public override handlesPC(): boolean {
25
- return true;
26
- }
27
- }
28
-
29
- export class JumpI extends Instruction {
30
- static type: string = 'JUMPI';
31
- static readonly opcode: Opcode = Opcode.JUMPI_32;
32
-
33
- // Instruction wire format with opcode.
34
- static readonly wireFormat: OperandType[] = [
35
- OperandType.UINT8,
36
- OperandType.UINT8,
37
- OperandType.UINT16,
38
- OperandType.UINT32,
39
- ];
40
-
41
- constructor(
42
- private addressingMode: number,
43
- private condOffset: number,
44
- private loc: number,
45
- ) {
46
- super();
47
- }
48
-
49
- public async execute(context: AvmContext): Promise<void> {
50
- const memory = context.machineState.memory;
51
- const addressing = Addressing.fromWire(this.addressingMode);
52
-
53
- context.machineState.consumeGas(
54
- this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
55
- );
56
-
57
- const operands = [this.condOffset];
58
- const [resolvedCondOffset] = addressing.resolve(operands, memory);
59
-
60
- memory.checkTag(TypeTag.UINT1, resolvedCondOffset);
61
- const condition = memory.getAs<Uint1>(resolvedCondOffset);
62
-
63
- if (condition.toNumber() == 0) {
64
- context.machineState.pc = context.machineState.nextPc;
65
- } else {
66
- context.machineState.pc = this.loc;
67
- }
68
- }
69
-
70
- public override handlesPC(): boolean {
71
- return true;
72
- }
73
- }
74
-
75
- export class InternalCall extends Instruction {
76
- static readonly type: string = 'INTERNALCALL';
77
- static readonly opcode: Opcode = Opcode.INTERNALCALL;
78
- // Informs (de)serialization. See Instruction.deserialize.
79
- static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT32];
80
-
81
- constructor(private loc: number) {
82
- super();
83
- }
84
-
85
- public async execute(context: AvmContext): Promise<void> {
86
- context.machineState.consumeGas(this.baseGasCost(0, 0));
87
-
88
- context.machineState.internalCallStack.push({
89
- callPc: context.machineState.pc,
90
- returnPc: context.machineState.nextPc,
91
- });
92
- context.machineState.pc = this.loc;
93
- }
94
-
95
- public override handlesPC(): boolean {
96
- return true;
97
- }
98
- }
99
-
100
- export class InternalReturn extends Instruction {
101
- static readonly type: string = 'INTERNALRETURN';
102
- static readonly opcode: Opcode = Opcode.INTERNALRETURN;
103
- // Informs (de)serialization. See Instruction.deserialize.
104
- static readonly wireFormat: OperandType[] = [OperandType.UINT8];
105
-
106
- constructor() {
107
- super();
108
- }
109
-
110
- public async execute(context: AvmContext): Promise<void> {
111
- context.machineState.consumeGas(this.baseGasCost(0, 0));
112
-
113
- const stackEntry = context.machineState.internalCallStack.pop();
114
- if (stackEntry === undefined) {
115
- throw new InstructionExecutionError('Internal call stack empty!');
116
- }
117
- context.machineState.pc = stackEntry.returnPc;
118
- }
119
-
120
- public override handlesPC(): boolean {
121
- return true;
122
- }
123
- }