@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,340 @@
1
+ import { MEM_TAG_FF, MEM_TAG_U1, MEM_TAG_U8, MEM_TAG_U16, MEM_TAG_U32, MEM_TAG_U64, MEM_TAG_U128 } from '@aztec/constants';
2
+ import { toBufferBE } from '@aztec/foundation/bigint-buffer';
3
+ import { Fr } from '@aztec/foundation/fields';
4
+ import { createLogger } from '@aztec/foundation/log';
5
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
6
+ import { strict as assert } from 'assert';
7
+ import { InvalidTagValueError, MemorySliceOutOfRangeError, TagCheckError } from './errors.js';
8
+ /** MemoryValue gathers the common operations for all memory types. */ export class MemoryValue {
9
+ // To field
10
+ toFr() {
11
+ return new Fr(this.toBigInt());
12
+ }
13
+ toAztecAddress() {
14
+ return new AztecAddress(this.toFr());
15
+ }
16
+ // To number. Throws if exceeds max safe int.
17
+ toNumber() {
18
+ return this.toFr().toNumber();
19
+ }
20
+ toString() {
21
+ return `${this.constructor.name}(0x${this.toBigInt().toString(16)})`;
22
+ }
23
+ }
24
+ /** IntegralValue gathers the common operations for all integral memory types. */ export class IntegralValue extends MemoryValue {
25
+ }
26
+ /**
27
+ * This function creates a class for unsigned integers of a given number of bits.
28
+ * In TypeScript terms, it's a class mixin.
29
+ **/ function UnsignedIntegerClassFactory(bits) {
30
+ return class NewUintClass extends IntegralValue {
31
+ static mod = 1n << BigInt(bits);
32
+ static bitmask = this.mod - 1n;
33
+ n;
34
+ constructor(n){
35
+ super();
36
+ this.n = BigInt(n);
37
+ assert(n < NewUintClass.mod, `Value ${n} is too large for ${this.constructor.name}.`);
38
+ }
39
+ build(n) {
40
+ return new this.constructor.prototype.constructor(n);
41
+ }
42
+ add(rhs) {
43
+ return this.build(this.n + rhs.n & NewUintClass.bitmask);
44
+ }
45
+ sub(rhs) {
46
+ const res = this.n - rhs.n;
47
+ return this.build(res >= 0 ? res : res + NewUintClass.mod);
48
+ }
49
+ mul(rhs) {
50
+ return this.build(this.n * rhs.n & NewUintClass.bitmask);
51
+ }
52
+ div(rhs) {
53
+ return this.build(this.n / rhs.n);
54
+ }
55
+ // No sign extension.
56
+ shr(rhs) {
57
+ // Note that this.n is > 0 by class invariant.
58
+ return this.build(this.n >> rhs.n);
59
+ }
60
+ shl(rhs) {
61
+ return this.build(this.n << rhs.n & NewUintClass.bitmask);
62
+ }
63
+ and(rhs) {
64
+ return this.build(this.n & rhs.n);
65
+ }
66
+ or(rhs) {
67
+ return this.build(this.n | rhs.n);
68
+ }
69
+ xor(rhs) {
70
+ return this.build(this.n ^ rhs.n);
71
+ }
72
+ not() {
73
+ return this.build(~this.n & NewUintClass.bitmask);
74
+ }
75
+ equals(rhs) {
76
+ return this.n === rhs.n;
77
+ }
78
+ lt(rhs) {
79
+ return this.n < rhs.n;
80
+ }
81
+ toBigInt() {
82
+ return this.n;
83
+ }
84
+ toBuffer() {
85
+ if (bits < 8) {
86
+ return toBufferBE(this.n, 1);
87
+ }
88
+ return toBufferBE(this.n, bits / 8);
89
+ }
90
+ };
91
+ }
92
+ // Now we can create the classes for each unsigned integer type.
93
+ // We extend instead of just assigning so that the class has the right name.
94
+ // Otherwise they are all called "NewUintClass".
95
+ export class Uint1 extends UnsignedIntegerClassFactory(1) {
96
+ }
97
+ export class Uint8 extends UnsignedIntegerClassFactory(8) {
98
+ }
99
+ export class Uint16 extends UnsignedIntegerClassFactory(16) {
100
+ }
101
+ export class Uint32 extends UnsignedIntegerClassFactory(32) {
102
+ }
103
+ export class Uint64 extends UnsignedIntegerClassFactory(64) {
104
+ }
105
+ export class Uint128 extends UnsignedIntegerClassFactory(128) {
106
+ }
107
+ export class Field extends MemoryValue {
108
+ static MODULUS = Fr.MODULUS;
109
+ rep;
110
+ constructor(v){
111
+ super();
112
+ this.rep = new Fr(v);
113
+ }
114
+ build(n) {
115
+ return new Field(n);
116
+ }
117
+ add(rhs) {
118
+ return new Field(this.rep.add(rhs.rep));
119
+ }
120
+ sub(rhs) {
121
+ return new Field(this.rep.sub(rhs.rep));
122
+ }
123
+ mul(rhs) {
124
+ return new Field(this.rep.mul(rhs.rep));
125
+ }
126
+ // Euclidean division.
127
+ div(rhs) {
128
+ return new Field(this.rep.ediv(rhs.rep));
129
+ }
130
+ // Field division.
131
+ fdiv(rhs) {
132
+ return new Field(this.rep.div(rhs.rep));
133
+ }
134
+ equals(rhs) {
135
+ return this.rep.equals(rhs.rep);
136
+ }
137
+ lt(rhs) {
138
+ return this.rep.lt(rhs.rep);
139
+ }
140
+ toBigInt() {
141
+ return this.rep.toBigInt();
142
+ }
143
+ toBuffer() {
144
+ return this.rep.toBuffer();
145
+ }
146
+ }
147
+ export var TypeTag = /*#__PURE__*/ function(TypeTag) {
148
+ TypeTag[TypeTag["FIELD"] = MEM_TAG_FF] = "FIELD";
149
+ TypeTag[TypeTag["UINT1"] = MEM_TAG_U1] = "UINT1";
150
+ TypeTag[TypeTag["UINT8"] = MEM_TAG_U8] = "UINT8";
151
+ TypeTag[TypeTag["UINT16"] = MEM_TAG_U16] = "UINT16";
152
+ TypeTag[TypeTag["UINT32"] = MEM_TAG_U32] = "UINT32";
153
+ TypeTag[TypeTag["UINT64"] = MEM_TAG_U64] = "UINT64";
154
+ TypeTag[TypeTag["UINT128"] = MEM_TAG_U128] = "UINT128";
155
+ TypeTag[TypeTag["INVALID"] = MEM_TAG_U128 + 1] = "INVALID";
156
+ return TypeTag;
157
+ }({});
158
+ export class TaggedMemory {
159
+ static log = createLogger('simulator:avm:memory');
160
+ // Whether to track and validate memory accesses for each instruction.
161
+ static TRACK_MEMORY_ACCESSES = process.env.NODE_ENV === 'test';
162
+ // Memory is modelled by a map with key type being number.
163
+ // We however restrict the keys to be non-negative integers smaller than
164
+ // MAX_MEMORY_SIZE.
165
+ static MAX_MEMORY_SIZE = Number(1n << 32n);
166
+ _mem;
167
+ constructor(){
168
+ this._mem = new Map();
169
+ }
170
+ getMaxMemorySize() {
171
+ return TaggedMemory.MAX_MEMORY_SIZE;
172
+ }
173
+ get(offset) {
174
+ return this.getAs(offset);
175
+ }
176
+ getAs(offset) {
177
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
178
+ const word = this._mem.get(offset);
179
+ //TaggedMemory.log.trace(`get(${offset}) = ${word}`);
180
+ if (word === undefined) {
181
+ TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
182
+ return new Field(0);
183
+ }
184
+ return word;
185
+ }
186
+ getSlice(offset, size) {
187
+ assert(Number.isInteger(offset) && Number.isInteger(size));
188
+ if (offset + size > TaggedMemory.MAX_MEMORY_SIZE) {
189
+ throw new MemorySliceOutOfRangeError(offset, size);
190
+ }
191
+ const slice = new Array(size);
192
+ for(let i = 0; i < size; i++){
193
+ slice[i] = this._mem.get(offset + i) ?? new Field(0);
194
+ }
195
+ TaggedMemory.log.trace(`getSlice(${offset}, ${size}) = ${slice}`);
196
+ return slice;
197
+ }
198
+ getSliceAs(offset, size) {
199
+ return this.getSlice(offset, size);
200
+ }
201
+ getSliceTags(offset, size) {
202
+ return this.getSlice(offset, size).map(TaggedMemory.getTag);
203
+ }
204
+ set(offset, v) {
205
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
206
+ this._mem.set(offset, v);
207
+ //TaggedMemory.log.trace(`set(${offset}, ${v})`);
208
+ }
209
+ setSlice(offset, slice) {
210
+ assert(Number.isInteger(offset));
211
+ if (offset + slice.length > TaggedMemory.MAX_MEMORY_SIZE) {
212
+ throw new MemorySliceOutOfRangeError(offset, slice.length);
213
+ }
214
+ slice.forEach((element, idx)=>{
215
+ this._mem.set(offset + idx, element);
216
+ });
217
+ TaggedMemory.log.trace(`setSlice(${offset}, ${slice})`);
218
+ }
219
+ getTag(offset) {
220
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
221
+ return TaggedMemory.getTag(this._mem.get(offset));
222
+ }
223
+ /**
224
+ * Check that the memory at the given offset matches the specified tag.
225
+ */ checkTag(tag, offset) {
226
+ const gotTag = this.getTag(offset);
227
+ if (gotTag !== tag) {
228
+ throw TagCheckError.forOffset(offset, TypeTag[gotTag], TypeTag[tag]);
229
+ }
230
+ }
231
+ checkIsValidMemoryOffsetTag(offset) {
232
+ this.checkTag(TypeTag.UINT32, offset);
233
+ }
234
+ static checkIsIntegralTag(tag) {
235
+ if (!INTEGRAL_TAGS.has(tag)) {
236
+ throw TagCheckError.forTag(TypeTag[tag], 'integral');
237
+ }
238
+ }
239
+ static checkIsValidTag(tagNumber) {
240
+ if (!VALID_TAGS.has(tagNumber)) {
241
+ throw new InvalidTagValueError(tagNumber);
242
+ }
243
+ }
244
+ /**
245
+ * Check tags for memory at all of the specified offsets.
246
+ */ checkTags(tag, ...offsets) {
247
+ for (const offset of offsets){
248
+ this.checkTag(tag, offset);
249
+ }
250
+ }
251
+ /**
252
+ * Check that all tags at the given offsets are the same.
253
+ */ checkTagsAreSame(offset0, offset1) {
254
+ const tag0 = this.getTag(offset0);
255
+ this.checkTag(tag0, offset1);
256
+ }
257
+ /**
258
+ * Check tags for all memory in the specified range.
259
+ */ checkTagsRange(tag, startOffset, size) {
260
+ for(let offset = startOffset; offset < startOffset + size; offset++){
261
+ this.checkTag(tag, offset);
262
+ }
263
+ }
264
+ static getTag(v) {
265
+ if (v === undefined) {
266
+ return TypeTag.FIELD; // uninitialized memory is Field(0)
267
+ } else {
268
+ return TAG_FOR_MEM_VAL.get(v.constructor.name) ?? TypeTag.INVALID;
269
+ }
270
+ }
271
+ // Truncates the value to fit the type.
272
+ static buildFromTagTruncating(v, tag) {
273
+ v = BigInt(v);
274
+ switch(tag){
275
+ case TypeTag.FIELD:
276
+ return new Field(v);
277
+ case TypeTag.UINT1:
278
+ return new Uint1(v & 1n);
279
+ case TypeTag.UINT8:
280
+ return new Uint8(v & (1n << 8n) - 1n);
281
+ case TypeTag.UINT16:
282
+ return new Uint16(v & (1n << 16n) - 1n);
283
+ case TypeTag.UINT32:
284
+ return new Uint32(v & (1n << 32n) - 1n);
285
+ case TypeTag.UINT64:
286
+ return new Uint64(v & (1n << 64n) - 1n);
287
+ case TypeTag.UINT128:
288
+ return new Uint128(v & (1n << 128n) - 1n);
289
+ default:
290
+ throw new InvalidTagValueError(tag);
291
+ }
292
+ }
293
+ }
294
+ const TAG_FOR_MEM_VAL = new Map([
295
+ [
296
+ 'Field',
297
+ TypeTag.FIELD
298
+ ],
299
+ [
300
+ 'Uint1',
301
+ TypeTag.UINT1
302
+ ],
303
+ [
304
+ 'Uint8',
305
+ TypeTag.UINT8
306
+ ],
307
+ [
308
+ 'Uint16',
309
+ TypeTag.UINT16
310
+ ],
311
+ [
312
+ 'Uint32',
313
+ TypeTag.UINT32
314
+ ],
315
+ [
316
+ 'Uint64',
317
+ TypeTag.UINT64
318
+ ],
319
+ [
320
+ 'Uint128',
321
+ TypeTag.UINT128
322
+ ]
323
+ ]);
324
+ const VALID_TAGS = new Set([
325
+ TypeTag.FIELD,
326
+ TypeTag.UINT1,
327
+ TypeTag.UINT8,
328
+ TypeTag.UINT16,
329
+ TypeTag.UINT32,
330
+ TypeTag.UINT64,
331
+ TypeTag.UINT128
332
+ ]);
333
+ const INTEGRAL_TAGS = new Set([
334
+ TypeTag.UINT1,
335
+ TypeTag.UINT8,
336
+ TypeTag.UINT16,
337
+ TypeTag.UINT32,
338
+ TypeTag.UINT64,
339
+ TypeTag.UINT128
340
+ ]);
@@ -1,10 +1,12 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  /// <reference types="node" resolution-mode="require"/>
3
- import { type AztecAddress, Fr, type GlobalVariables } from '@aztec/circuits.js';
3
+ import { Fr } from '@aztec/foundation/fields';
4
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
+ import type { GlobalVariables } from '@aztec/stdlib/tx';
4
6
  import { AvmContext } from './avm_context.js';
5
7
  import { AvmContractCallResult } from './avm_contract_call_result.js';
6
- import { type Gas } from './avm_gas.js';
7
- import { type AvmPersistableStateManager } from './journal/journal.js';
8
+ import type { Gas } from './avm_gas.js';
9
+ import type { AvmPersistableStateManager } from './journal/journal.js';
8
10
  import { type InstructionSet } from './serialization/bytecode_serialization.js';
9
11
  export declare class AvmSimulator {
10
12
  private context;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avm_simulator.d.ts","sourceRoot":"","sources":["../../../src/public/avm/avm_simulator.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAUxC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,2CAA2C,CAAC;AAOnD,qBAAa,YAAY;IAarB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IAbxB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAuC;IAE5D,OAAO,CAAC,6BAA6B,CAAiD;IAEtF,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,wBAAwB,CAA+B;gBAKrD,OAAO,EAAE,UAAU,EACnB,cAAc,GAAE,cAAgC,EACxD,cAAc,UAAQ;WAmBJ,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;WAQjD,MAAM,CACxB,YAAY,EAAE,0BAA0B,EACxC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,EAAE,EAClB,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,OAAO,EACrB,QAAQ,EAAE,EAAE,EAAE,EACd,YAAY,EAAE,GAAG;IAiBnB;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAuBtD;;OAEG;IACI,WAAW,IAAI,MAAM,GAAG,SAAS;IAIxC;;;OAGG;IACU,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;YA2GhE,+BAA+B;IAoB7C,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;CAS3B"}
@@ -0,0 +1,202 @@
1
+ import { MAX_L2_GAS_PER_TX_PUBLIC_PORTION } from '@aztec/constants';
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+ import { strict as assert } from 'assert';
5
+ import { SideEffectLimitReachedError } from '../side_effect_errors.js';
6
+ import { AvmContext } from './avm_context.js';
7
+ import { AvmContractCallResult } from './avm_contract_call_result.js';
8
+ import { AvmExecutionEnvironment } from './avm_execution_environment.js';
9
+ import { AvmMachineState } from './avm_machine_state.js';
10
+ import { isAvmBytecode } from './bytecode_utils.js';
11
+ import { AvmExecutionError, AvmRevertReason, InvalidProgramCounterError, revertReasonFromExceptionalHalt, revertReasonFromExplicitRevert } from './errors.js';
12
+ import { INSTRUCTION_SET, decodeInstructionFromBytecode } from './serialization/bytecode_serialization.js';
13
+ export class AvmSimulator {
14
+ context;
15
+ instructionSet;
16
+ log;
17
+ bytecode;
18
+ opcodeTallies;
19
+ // maps pc to [instr, bytesRead]
20
+ deserializedInstructionsCache;
21
+ tallyPrintFunction;
22
+ tallyInstructionFunction;
23
+ // Test Purposes only: Logger will not have the proper function name. Use this constructor for testing purposes
24
+ // only. Otherwise, use build() below.
25
+ constructor(context, instructionSet = INSTRUCTION_SET, enableTallying = false){
26
+ this.context = context;
27
+ this.instructionSet = instructionSet;
28
+ this.opcodeTallies = new Map();
29
+ this.deserializedInstructionsCache = new Map();
30
+ this.tallyPrintFunction = ()=>{};
31
+ this.tallyInstructionFunction = (_b, _c)=>{};
32
+ // This will be used by the CALL opcode to create a new simulator. It is required to
33
+ // avoid a dependency cycle.
34
+ context.provideSimulator = AvmSimulator.build;
35
+ assert(context.machineState.gasLeft.l2Gas <= MAX_L2_GAS_PER_TX_PUBLIC_PORTION, `Cannot allocate more than ${MAX_L2_GAS_PER_TX_PUBLIC_PORTION} to the AVM for execution.`);
36
+ this.log = createLogger(`simulator:avm(calldata[0]: ${context.environment.calldata[0]})`);
37
+ // Turn on tallying if explicitly enabled or if trace logging
38
+ if (enableTallying || this.log.isLevelEnabled('trace')) {
39
+ this.tallyPrintFunction = this.printOpcodeTallies;
40
+ this.tallyInstructionFunction = this.tallyInstruction;
41
+ }
42
+ }
43
+ // Factory to have a proper function name in the logger. Retrieving the name is asynchronous and
44
+ // cannot be done as part of the constructor.
45
+ static async build(context) {
46
+ const simulator = new AvmSimulator(context);
47
+ const fnName = await context.persistableState.getPublicFunctionDebugName(context.environment);
48
+ simulator.log = createLogger(`simulator:avm(f:${fnName})`);
49
+ return simulator;
50
+ }
51
+ static async create(stateManager, address, sender, transactionFee, globals, isStaticCall, calldata, allocatedGas) {
52
+ const avmExecutionEnv = new AvmExecutionEnvironment(address, sender, /*contractCallDepth=*/ Fr.zero(), transactionFee, globals, isStaticCall, calldata);
53
+ const avmMachineState = new AvmMachineState(allocatedGas);
54
+ const avmContext = new AvmContext(stateManager, avmExecutionEnv, avmMachineState);
55
+ return await AvmSimulator.build(avmContext);
56
+ }
57
+ /**
58
+ * Fetch the bytecode and execute it in the current context.
59
+ */ async execute() {
60
+ let bytecode;
61
+ try {
62
+ bytecode = await this.context.persistableState.getBytecode(this.context.environment.address);
63
+ } catch (err) {
64
+ if (!(err instanceof AvmExecutionError || err instanceof SideEffectLimitReachedError)) {
65
+ this.log.error(`Unknown error thrown by AVM during bytecode retrieval: ${err}`);
66
+ throw err;
67
+ }
68
+ return await this.handleFailureToRetrieveBytecode(`Bytecode retrieval for contract '${this.context.environment.address}' failed with ${err}. Reverting...`);
69
+ }
70
+ if (!bytecode) {
71
+ return await this.handleFailureToRetrieveBytecode(`No bytecode found at: ${this.context.environment.address}. Reverting...`);
72
+ }
73
+ return await this.executeBytecode(bytecode);
74
+ }
75
+ /**
76
+ * Return the bytecode used for execution, if any.
77
+ */ getBytecode() {
78
+ return this.bytecode;
79
+ }
80
+ /**
81
+ * Executes the provided bytecode in the current context.
82
+ * This method is useful for testing and debugging.
83
+ */ async executeBytecode(bytecode) {
84
+ const startTotalTime = performance.now();
85
+ assert(isAvmBytecode(bytecode), "AVM simulator can't execute non-AVM bytecode");
86
+ assert(bytecode.length > 0, "AVM simulator can't execute empty bytecode");
87
+ this.bytecode = bytecode;
88
+ const { machineState } = this.context;
89
+ const callStartGas = machineState.gasLeft; // Save gas before executing instruction (for profiling)
90
+ try {
91
+ // Execute instruction pointed to by the current program counter
92
+ // continuing until the machine state signifies a halt
93
+ let instrCounter = 0;
94
+ while(!machineState.getHalted()){
95
+ // Get the instruction from cache, or deserialize for the first time
96
+ let cachedInstruction = this.deserializedInstructionsCache.get(machineState.pc);
97
+ if (cachedInstruction === undefined) {
98
+ cachedInstruction = decodeInstructionFromBytecode(bytecode, machineState.pc, this.instructionSet);
99
+ this.deserializedInstructionsCache.set(machineState.pc, cachedInstruction);
100
+ }
101
+ const [instruction, bytesRead] = cachedInstruction;
102
+ const instrStartGas = machineState.gasLeft; // Save gas before executing instruction (for profiling)
103
+ if (this.log.isLevelEnabled('trace')) {
104
+ // Skip this entirely to avoid toStringing etc if trace is not enabled
105
+ this.log.trace(`[PC:${machineState.pc}] [IC:${instrCounter}] ${instruction.toString()} (gasLeft l2=${machineState.l2GasLeft} da=${machineState.daGasLeft})`);
106
+ }
107
+ instrCounter++;
108
+ machineState.nextPc = machineState.pc + bytesRead;
109
+ // Execute the instruction.
110
+ // Normal returns and reverts will return normally here.
111
+ // "Exceptional halts" will throw.
112
+ await instruction.execute(this.context);
113
+ if (!instruction.handlesPC()) {
114
+ // Increment PC if the instruction doesn't handle it itself
115
+ machineState.pc += bytesRead;
116
+ }
117
+ // gas used by this instruction - used for profiling/tallying
118
+ const gasUsed = {
119
+ l2Gas: instrStartGas.l2Gas - machineState.l2GasLeft,
120
+ daGas: instrStartGas.daGas - machineState.daGasLeft
121
+ };
122
+ this.tallyInstructionFunction(instruction.constructor.name, gasUsed);
123
+ if (machineState.pc >= bytecode.length) {
124
+ this.log.warn('Passed end of program');
125
+ throw new InvalidProgramCounterError(machineState.pc, /*max=*/ bytecode.length);
126
+ }
127
+ }
128
+ const output = machineState.getOutput();
129
+ const reverted = machineState.getReverted();
130
+ const revertReason = reverted ? await revertReasonFromExplicitRevert(output, this.context) : undefined;
131
+ const results = new AvmContractCallResult(reverted, output, machineState.gasLeft, revertReason);
132
+ this.log.debug(`Context execution results: ${results.toString()}`);
133
+ const totalGasUsed = {
134
+ l2Gas: callStartGas.l2Gas - machineState.l2GasLeft,
135
+ daGas: callStartGas.daGas - machineState.daGasLeft
136
+ };
137
+ this.log.debug(`Executed ${instrCounter} instructions and consumed ${totalGasUsed.l2Gas} L2 Gas`);
138
+ this.tallyPrintFunction();
139
+ const endTotalTime = performance.now();
140
+ const totalTime = endTotalTime - startTotalTime;
141
+ this.log.debug(`Core AVM simulation took ${totalTime}ms`);
142
+ // Return results for processing by calling context
143
+ return results;
144
+ } catch (err) {
145
+ this.log.verbose('Exceptional halt (revert by something other than REVERT opcode)');
146
+ // FIXME: weird that we have to do this OutOfGasError check because:
147
+ // 1. OutOfGasError is an AvmExecutionError, so that check should cover both
148
+ // 2. We should at least be able to do instanceof OutOfGasError instead of checking the constructor name
149
+ if (!(err.constructor.name == 'OutOfGasError' || err instanceof AvmExecutionError || err instanceof SideEffectLimitReachedError)) {
150
+ this.log.error(`Unknown error thrown by AVM: ${err}`);
151
+ throw err;
152
+ }
153
+ const revertReason = await revertReasonFromExceptionalHalt(err, this.context);
154
+ // Exceptional halts consume all allocated gas
155
+ const noGasLeft = {
156
+ l2Gas: 0,
157
+ daGas: 0
158
+ };
159
+ // Note: "exceptional halts" cannot return data, hence [].
160
+ const results = new AvmContractCallResult(/*reverted=*/ true, /*output=*/ [], noGasLeft, revertReason);
161
+ this.log.debug(`Context execution results: ${results.toString()}`);
162
+ this.tallyPrintFunction();
163
+ // Return results for processing by calling context
164
+ return results;
165
+ }
166
+ }
167
+ async handleFailureToRetrieveBytecode(message) {
168
+ // revert, consuming all gas
169
+ const fnName = await this.context.persistableState.getPublicFunctionDebugName(this.context.environment);
170
+ const revertReason = new AvmRevertReason(message, /*failingFunction=*/ {
171
+ contractAddress: this.context.environment.address,
172
+ functionName: fnName
173
+ }, /*noirCallStack=*/ []);
174
+ this.log.warn(message);
175
+ return new AvmContractCallResult(/*reverted=*/ true, /*output=*/ [], /*gasLeft=*/ {
176
+ l2Gas: 0,
177
+ daGas: 0
178
+ }, revertReason);
179
+ }
180
+ tallyInstruction(opcode, gasUsed) {
181
+ const opcodeTally = this.opcodeTallies.get(opcode) || {
182
+ count: 0,
183
+ gas: {
184
+ l2Gas: 0,
185
+ daGas: 0
186
+ }
187
+ };
188
+ opcodeTally.count++;
189
+ opcodeTally.gas.l2Gas += gasUsed.l2Gas;
190
+ opcodeTally.gas.daGas += gasUsed.daGas;
191
+ this.opcodeTallies.set(opcode, opcodeTally);
192
+ }
193
+ printOpcodeTallies() {
194
+ this.log.debug(`Printing tallies per opcode sorted by gas...`);
195
+ // sort descending by L2 gas consumed
196
+ const sortedOpcodes = Array.from(this.opcodeTallies.entries()).sort((a, b)=>b[1].gas.l2Gas - a[1].gas.l2Gas);
197
+ for (const [opcode, tally] of sortedOpcodes){
198
+ // NOTE: don't care to clutter the logs with DA gas for now
199
+ this.log.debug(`${opcode} executed ${tally.count} times consuming a total of ${tally.gas.l2Gas} L2 gas`);
200
+ }
201
+ }
202
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytecode_utils.d.ts","sourceRoot":"","sources":["../../../src/public/avm/bytecode_utils.ts"],"names":[],"mappings":";;AASA,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD"}
@@ -0,0 +1,17 @@
1
+ import { Opcode } from './serialization/instruction_serialization.js';
2
+ const AVM_MAGIC_SUFFIX = Buffer.from([
3
+ Opcode.MOV_16,
4
+ 0x00,
5
+ ...Buffer.from('18ca', 'hex'),
6
+ ...Buffer.from('18ca', 'hex')
7
+ ]);
8
+ export function markBytecodeAsAvm(bytecode) {
9
+ return Buffer.concat([
10
+ bytecode,
11
+ AVM_MAGIC_SUFFIX
12
+ ]);
13
+ }
14
+ export function isAvmBytecode(bytecode) {
15
+ const magicSize = AVM_MAGIC_SUFFIX.length;
16
+ return bytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
17
+ }
@@ -1,7 +1,8 @@
1
- import { type FailingFunction, type NoirCallStack } from '@aztec/circuit-types';
2
- import { type AztecAddress, type Fr, type Point } from '@aztec/circuits.js';
3
- import { ExecutionError } from '../common/errors.js';
4
- import { type AvmContext } from './avm_context.js';
1
+ import type { Fr, Point } from '@aztec/foundation/fields';
2
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
+ import type { FailingFunction, NoirCallStack } from '@aztec/stdlib/errors';
4
+ import { ExecutionError } from '../../common/errors.js';
5
+ import type { AvmContext } from './avm_context.js';
5
6
  /**
6
7
  * Avm-specific errors should derive from this
7
8
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/public/avm/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,8BAAsB,iBAAkB,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,eAAe,EAAE,YAAY;CAI1C;AAED,qBAAa,eAAgB,SAAQ,iBAAiB;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAIpC;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;gBAC3C,GAAG,EAAE,MAAM;CAIxB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,iBAAiB;gBACxC,GAAG,EAAE,MAAM;CAIxB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;gBAC7C,QAAQ,EAAE,MAAM;CAI7B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,iBAAiB;gBAClD,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,iBAAiB;WACpC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;WAI7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;gBAI5D,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,qBAAa,8BAA+B,SAAQ,iBAAiB;gBACvD,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAIhD;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAI3C;AAED,oCAAoC;AACpC,qBAAa,aAAc,SAAQ,iBAAiB;gBACtC,UAAU,EAAE,MAAM,EAAE;CAIjC;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;gBAC7C,gBAAgB,EAAE,MAAM;CAIrC;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,iBAAiB;gBAChD,KAAK,EAAE,KAAK;CAIzB;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,iBAAiB;gBAClD,WAAW,EAAE,MAAM;CAIhC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,yBAAyB;;CAKvE;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,cAAc;gBACrC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpH;AA8BD;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAEpH"}