@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.5daedc8

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 (492) hide show
  1. package/README.md +6 -0
  2. package/dest/client.d.ts +6 -4
  3. package/dest/client.d.ts.map +1 -1
  4. package/dest/client.js +4 -2
  5. package/dest/common/errors.d.ts +5 -14
  6. package/dest/common/errors.d.ts.map +1 -1
  7. package/dest/common/errors.js +51 -32
  8. package/dest/common/index.d.ts +1 -2
  9. package/dest/common/index.d.ts.map +1 -1
  10. package/dest/common/index.js +0 -1
  11. package/dest/common/stats/index.d.ts +1 -1
  12. package/dest/common/stats/stats.d.ts +1 -1
  13. package/dest/private/acvm/acvm.d.ts +12 -6
  14. package/dest/private/acvm/acvm.d.ts.map +1 -1
  15. package/dest/private/acvm/acvm.js +10 -16
  16. package/dest/private/acvm/acvm_types.d.ts +2 -2
  17. package/dest/private/acvm/acvm_types.d.ts.map +1 -1
  18. package/dest/private/acvm/deserialize.d.ts +18 -19
  19. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  20. package/dest/private/acvm/deserialize.js +31 -23
  21. package/dest/private/acvm/index.d.ts +1 -2
  22. package/dest/private/acvm/index.d.ts.map +1 -1
  23. package/dest/private/acvm/index.js +0 -1
  24. package/dest/private/acvm/serialize.d.ts +20 -3
  25. package/dest/private/acvm/serialize.d.ts.map +1 -1
  26. package/dest/private/acvm/serialize.js +53 -0
  27. package/dest/private/acvm_native.d.ts +39 -0
  28. package/dest/private/acvm_native.d.ts.map +1 -0
  29. package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
  30. package/dest/private/acvm_wasm.d.ts +15 -0
  31. package/dest/private/acvm_wasm.d.ts.map +1 -0
  32. package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
  33. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  34. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  35. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  36. package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
  37. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
  38. package/dest/private/circuit_recording/circuit_recorder.js +209 -0
  39. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
  40. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  41. package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
  42. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
  43. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  44. package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
  45. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
  46. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  47. package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
  48. package/dest/private/circuit_simulator.d.ts +35 -0
  49. package/dest/private/circuit_simulator.d.ts.map +1 -0
  50. package/dest/private/circuit_simulator.js +43 -0
  51. package/dest/private/factory.d.ts +12 -0
  52. package/dest/private/factory.d.ts.map +1 -0
  53. package/dest/private/{providers/factory.js → factory.js} +2 -2
  54. package/dest/public/avm/avm_context.d.ts +6 -6
  55. package/dest/public/avm/avm_context.d.ts.map +1 -1
  56. package/dest/public/avm/avm_contract_call_result.d.ts +5 -3
  57. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  58. package/dest/public/avm/avm_contract_call_result.js +11 -7
  59. package/dest/public/avm/avm_execution_environment.d.ts +4 -2
  60. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  61. package/dest/public/avm/avm_execution_environment.js +4 -2
  62. package/dest/public/avm/avm_gas.d.ts +5 -21
  63. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  64. package/dest/public/avm/avm_gas.js +27 -35
  65. package/dest/public/avm/avm_machine_state.d.ts +3 -1
  66. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  67. package/dest/public/avm/avm_machine_state.js +2 -0
  68. package/dest/public/avm/avm_memory_types.d.ts +99 -88
  69. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  70. package/dest/public/avm/avm_memory_types.js +17 -6
  71. package/dest/public/avm/avm_simulator.d.ts +6 -6
  72. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  73. package/dest/public/avm/avm_simulator.js +23 -35
  74. package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
  75. package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
  76. package/dest/public/avm/avm_simulator_interface.js +3 -0
  77. package/dest/public/avm/errors.d.ts +7 -31
  78. package/dest/public/avm/errors.d.ts.map +1 -1
  79. package/dest/public/avm/errors.js +7 -57
  80. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
  81. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  82. package/dest/public/avm/fixtures/avm_simulation_tester.js +22 -15
  83. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +7 -5
  84. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  85. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +37 -14
  86. package/dest/public/avm/fixtures/initializers.d.ts +42 -0
  87. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
  88. package/dest/public/avm/fixtures/initializers.js +44 -0
  89. package/dest/public/avm/fixtures/utils.d.ts +38 -0
  90. package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
  91. package/dest/public/avm/fixtures/utils.js +95 -0
  92. package/dest/public/avm/index.d.ts +1 -3
  93. package/dest/public/avm/index.d.ts.map +1 -1
  94. package/dest/public/avm/index.js +0 -2
  95. package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
  96. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/accrued_substate.js +28 -25
  98. package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
  99. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/addressing_mode.js +46 -26
  101. package/dest/public/avm/opcodes/arithmetic.d.ts +17 -7
  102. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  103. package/dest/public/avm/opcodes/arithmetic.js +16 -2
  104. package/dest/public/avm/opcodes/bitwise.d.ts +10 -18
  105. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  106. package/dest/public/avm/opcodes/bitwise.js +19 -26
  107. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  108. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/comparators.js +3 -3
  110. package/dest/public/avm/opcodes/contract.d.ts +2 -3
  111. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/contract.js +9 -10
  113. package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
  114. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  115. package/dest/public/avm/opcodes/control_flow.js +10 -8
  116. package/dest/public/avm/opcodes/conversion.d.ts +2 -1
  117. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  118. package/dest/public/avm/opcodes/conversion.js +267 -3
  119. package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
  120. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  121. package/dest/public/avm/opcodes/ec_add.js +6 -6
  122. package/dest/public/avm/opcodes/environment_getters.d.ts +3 -3
  123. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  124. package/dest/public/avm/opcodes/environment_getters.js +17 -19
  125. package/dest/public/avm/opcodes/external_calls.d.ts +9 -8
  126. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  127. package/dest/public/avm/opcodes/external_calls.js +39 -34
  128. package/dest/public/avm/opcodes/hashing.d.ts +2 -2
  129. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  130. package/dest/public/avm/opcodes/hashing.js +6 -6
  131. package/dest/public/avm/opcodes/index.d.ts +1 -1
  132. package/dest/public/avm/opcodes/instruction.d.ts +15 -11
  133. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  134. package/dest/public/avm/opcodes/instruction.js +23 -19
  135. package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
  136. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  137. package/dest/public/avm/opcodes/memory.d.ts +6 -6
  138. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  139. package/dest/public/avm/opcodes/memory.js +37 -33
  140. package/dest/public/avm/opcodes/misc.d.ts +3 -2
  141. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  142. package/dest/public/avm/opcodes/misc.js +41 -16
  143. package/dest/public/avm/opcodes/storage.d.ts +3 -3
  144. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  145. package/dest/public/avm/opcodes/storage.js +7 -5
  146. package/dest/public/avm/revert_reason.d.ts +18 -0
  147. package/dest/public/avm/revert_reason.d.ts.map +1 -0
  148. package/dest/public/avm/revert_reason.js +38 -0
  149. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
  150. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  151. package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
  152. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  153. package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
  154. package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
  155. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  156. package/dest/public/avm/serialization/instruction_serialization.js +70 -35
  157. package/dest/public/avm/test_utils.d.ts +11 -14
  158. package/dest/public/avm/test_utils.d.ts.map +1 -1
  159. package/dest/public/avm/test_utils.js +16 -24
  160. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  161. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  162. package/dest/public/contracts_db_checkpoint.js +30 -0
  163. package/dest/public/db_interfaces.d.ts +68 -0
  164. package/dest/public/db_interfaces.d.ts.map +1 -0
  165. package/dest/public/db_interfaces.js +3 -0
  166. package/dest/public/debug_fn_name.d.ts +5 -0
  167. package/dest/public/debug_fn_name.d.ts.map +1 -0
  168. package/dest/public/debug_fn_name.js +9 -0
  169. package/dest/public/executor_metrics.d.ts +12 -4
  170. package/dest/public/executor_metrics.d.ts.map +1 -1
  171. package/dest/public/executor_metrics.js +37 -6
  172. package/dest/public/executor_metrics_interface.d.ts +10 -0
  173. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  174. package/dest/public/executor_metrics_interface.js +1 -0
  175. package/dest/public/fixtures/amm_test.d.ts +10 -0
  176. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  177. package/dest/public/fixtures/amm_test.js +213 -0
  178. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  179. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  180. package/dest/public/fixtures/bulk_test.js +326 -0
  181. package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
  182. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  183. package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
  184. package/dest/public/fixtures/custom_bytecode_tests.d.ts +9 -0
  185. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  186. package/dest/public/fixtures/custom_bytecode_tests.js +109 -0
  187. package/dest/public/fixtures/index.d.ts +8 -1
  188. package/dest/public/fixtures/index.d.ts.map +1 -1
  189. package/dest/public/fixtures/index.js +7 -0
  190. package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
  191. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
  192. package/dest/public/fixtures/minimal_public_tx.js +29 -0
  193. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +35 -14
  194. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  195. package/dest/public/fixtures/public_tx_simulation_tester.js +100 -71
  196. package/dest/public/fixtures/simple_contract_data_source.d.ts +35 -0
  197. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  198. package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
  199. package/dest/public/fixtures/token_test.d.ts +8 -0
  200. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  201. package/dest/public/fixtures/token_test.js +94 -0
  202. package/dest/public/fixtures/utils.d.ts +17 -4
  203. package/dest/public/fixtures/utils.d.ts.map +1 -1
  204. package/dest/public/fixtures/utils.js +100 -58
  205. package/dest/public/hinting_db_sources.d.ts +78 -0
  206. package/dest/public/hinting_db_sources.d.ts.map +1 -0
  207. package/dest/public/hinting_db_sources.js +350 -0
  208. package/dest/public/index.d.ts +6 -9
  209. package/dest/public/index.d.ts.map +1 -1
  210. package/dest/public/index.js +4 -7
  211. package/dest/public/public_db_sources.d.ts +51 -101
  212. package/dest/public/public_db_sources.d.ts.map +1 -1
  213. package/dest/public/public_db_sources.js +219 -192
  214. package/dest/public/public_errors.d.ts +12 -0
  215. package/dest/public/public_errors.d.ts.map +1 -0
  216. package/dest/public/public_errors.js +13 -0
  217. package/dest/public/public_processor/guarded_merkle_tree.d.ts +49 -0
  218. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  219. package/dest/public/public_processor/guarded_merkle_tree.js +108 -0
  220. package/dest/public/public_processor/public_processor.d.ts +25 -37
  221. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  222. package/dest/public/public_processor/public_processor.js +154 -111
  223. package/dest/public/public_processor/public_processor_metrics.d.ts +3 -3
  224. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  225. package/dest/public/public_processor/public_processor_metrics.js +1 -1
  226. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +30 -0
  227. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  228. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +133 -0
  229. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +66 -0
  230. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  231. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +210 -0
  232. package/dest/public/public_tx_simulator/index.d.ts +5 -0
  233. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  234. package/dest/public/public_tx_simulator/index.js +2 -0
  235. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
  236. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
  237. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
  238. package/dest/public/public_tx_simulator/public_tx_context.d.ts +23 -30
  239. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  240. package/dest/public/public_tx_simulator/public_tx_context.js +71 -91
  241. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +36 -58
  242. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  243. package/dest/public/public_tx_simulator/public_tx_simulator.js +208 -206
  244. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -0
  245. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  246. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  247. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
  248. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
  249. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
  250. package/dest/public/side_effect_errors.d.ts +42 -2
  251. package/dest/public/side_effect_errors.d.ts.map +1 -1
  252. package/dest/public/side_effect_errors.js +70 -1
  253. package/dest/public/side_effect_trace.d.ts +21 -67
  254. package/dest/public/side_effect_trace.d.ts.map +1 -1
  255. package/dest/public/side_effect_trace.js +71 -121
  256. package/dest/public/side_effect_trace_interface.d.ts +12 -24
  257. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  258. package/dest/public/state_manager/index.d.ts +2 -0
  259. package/dest/public/state_manager/index.d.ts.map +1 -0
  260. package/dest/public/state_manager/index.js +1 -0
  261. package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +3 -6
  262. package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
  263. package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
  264. package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +3 -3
  265. package/dest/public/state_manager/public_storage.d.ts.map +1 -0
  266. package/dest/public/state_manager/state_manager.d.ts +159 -0
  267. package/dest/public/state_manager/state_manager.d.ts.map +1 -0
  268. package/dest/public/state_manager/state_manager.js +392 -0
  269. package/dest/public/test_executor_metrics.d.ts +55 -0
  270. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  271. package/dest/public/test_executor_metrics.js +307 -0
  272. package/dest/public/unique_class_ids.d.ts +1 -1
  273. package/dest/public/unique_class_ids.d.ts.map +1 -1
  274. package/dest/public/utils.d.ts +3 -5
  275. package/dest/public/utils.d.ts.map +1 -1
  276. package/dest/public/utils.js +4 -21
  277. package/dest/server.d.ts +7 -4
  278. package/dest/server.d.ts.map +1 -1
  279. package/dest/server.js +5 -2
  280. package/dest/testing.d.ts +2 -0
  281. package/dest/testing.d.ts.map +1 -0
  282. package/dest/testing.js +1 -0
  283. package/package.json +39 -33
  284. package/src/client.ts +5 -3
  285. package/src/common/errors.ts +79 -44
  286. package/src/common/index.ts +0 -1
  287. package/src/private/acvm/acvm.ts +17 -32
  288. package/src/private/acvm/acvm_types.ts +1 -1
  289. package/src/private/acvm/deserialize.ts +35 -29
  290. package/src/private/acvm/index.ts +0 -1
  291. package/src/private/acvm/serialize.ts +63 -0
  292. package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
  293. package/src/private/acvm_wasm.ts +72 -0
  294. package/src/private/acvm_wasm_with_blobs.ts +54 -0
  295. package/src/private/circuit_recording/circuit_recorder.ts +260 -0
  296. package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
  297. package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
  298. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
  299. package/src/private/circuit_simulator.ts +90 -0
  300. package/src/private/{providers/factory.ts → factory.ts} +6 -6
  301. package/src/public/avm/avm_context.ts +4 -4
  302. package/src/public/avm/avm_contract_call_result.ts +17 -5
  303. package/src/public/avm/avm_execution_environment.ts +8 -1
  304. package/src/public/avm/avm_gas.ts +23 -35
  305. package/src/public/avm/avm_machine_state.ts +5 -0
  306. package/src/public/avm/avm_memory_types.ts +19 -6
  307. package/src/public/avm/avm_simulator.ts +43 -54
  308. package/src/public/avm/avm_simulator_interface.ts +8 -0
  309. package/src/public/avm/errors.ts +8 -77
  310. package/src/public/avm/fixtures/avm_simulation_tester.ts +32 -21
  311. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
  312. package/src/public/avm/fixtures/initializers.ts +102 -0
  313. package/src/public/avm/fixtures/utils.ts +150 -0
  314. package/src/public/avm/index.ts +0 -2
  315. package/src/public/avm/opcodes/accrued_substate.ts +64 -29
  316. package/src/public/avm/opcodes/addressing_mode.ts +56 -32
  317. package/src/public/avm/opcodes/arithmetic.ts +24 -2
  318. package/src/public/avm/opcodes/bitwise.ts +33 -29
  319. package/src/public/avm/opcodes/comparators.ts +6 -3
  320. package/src/public/avm/opcodes/contract.ts +10 -7
  321. package/src/public/avm/opcodes/control_flow.ts +19 -10
  322. package/src/public/avm/opcodes/conversion.ts +27 -3
  323. package/src/public/avm/opcodes/ec_add.ts +9 -6
  324. package/src/public/avm/opcodes/environment_getters.ts +27 -22
  325. package/src/public/avm/opcodes/external_calls.ts +61 -29
  326. package/src/public/avm/opcodes/hashing.ts +28 -8
  327. package/src/public/avm/opcodes/instruction.ts +31 -21
  328. package/src/public/avm/opcodes/memory.ts +71 -32
  329. package/src/public/avm/opcodes/misc.ts +60 -18
  330. package/src/public/avm/opcodes/storage.ts +22 -6
  331. package/src/public/avm/revert_reason.ts +55 -0
  332. package/src/public/avm/serialization/buffer_cursor.ts +4 -1
  333. package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
  334. package/src/public/avm/serialization/instruction_serialization.ts +75 -34
  335. package/src/public/avm/test_utils.ts +24 -41
  336. package/src/public/contracts_db_checkpoint.ts +41 -0
  337. package/src/public/db_interfaces.ts +76 -0
  338. package/src/{common → public}/debug_fn_name.ts +7 -7
  339. package/src/public/executor_metrics.ts +56 -6
  340. package/src/public/executor_metrics_interface.ts +15 -0
  341. package/src/public/fixtures/amm_test.ts +331 -0
  342. package/src/public/fixtures/bulk_test.ts +169 -0
  343. package/src/public/fixtures/custom_bytecode_tester.ts +49 -0
  344. package/src/public/fixtures/custom_bytecode_tests.ts +135 -0
  345. package/src/public/fixtures/index.ts +7 -0
  346. package/src/public/fixtures/minimal_public_tx.ts +35 -0
  347. package/src/public/fixtures/public_tx_simulation_tester.ts +166 -113
  348. package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
  349. package/src/public/fixtures/token_test.ts +139 -0
  350. package/src/public/fixtures/utils.ts +141 -68
  351. package/src/public/hinting_db_sources.ts +602 -0
  352. package/src/public/index.ts +5 -8
  353. package/src/public/public_db_sources.ts +278 -258
  354. package/src/public/public_errors.ts +14 -0
  355. package/src/public/public_processor/guarded_merkle_tree.ts +153 -0
  356. package/src/public/public_processor/public_processor.ts +212 -164
  357. package/src/public/public_processor/public_processor_metrics.ts +2 -2
  358. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +162 -0
  359. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +306 -0
  360. package/src/public/public_tx_simulator/index.ts +4 -0
  361. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
  362. package/src/public/public_tx_simulator/public_tx_context.ts +167 -194
  363. package/src/public/public_tx_simulator/public_tx_simulator.ts +292 -265
  364. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +10 -0
  365. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
  366. package/src/public/side_effect_errors.ts +91 -1
  367. package/src/public/side_effect_trace.ts +94 -320
  368. package/src/public/side_effect_trace_interface.ts +10 -58
  369. package/src/public/state_manager/index.ts +1 -0
  370. package/src/public/{avm/journal → state_manager}/nullifiers.ts +5 -11
  371. package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
  372. package/src/public/state_manager/state_manager.ts +553 -0
  373. package/src/public/test_executor_metrics.ts +397 -0
  374. package/src/public/utils.ts +5 -21
  375. package/src/server.ts +6 -3
  376. package/src/testing.ts +1 -0
  377. package/dest/common/db_interfaces.d.ts +0 -80
  378. package/dest/common/db_interfaces.d.ts.map +0 -1
  379. package/dest/common/db_interfaces.js +0 -1
  380. package/dest/common/debug_fn_name.d.ts +0 -5
  381. package/dest/common/debug_fn_name.d.ts.map +0 -1
  382. package/dest/common/debug_fn_name.js +0 -6
  383. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  384. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  385. package/dest/common/message_load_oracle_inputs.js +0 -15
  386. package/dest/private/acvm/oracle/index.d.ts +0 -14
  387. package/dest/private/acvm/oracle/index.d.ts.map +0 -1
  388. package/dest/private/acvm/oracle/index.js +0 -2
  389. package/dest/private/acvm/oracle/oracle.d.ts +0 -49
  390. package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
  391. package/dest/private/acvm/oracle/oracle.js +0 -263
  392. package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
  393. package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
  394. package/dest/private/acvm/oracle/typed_oracle.js +0 -132
  395. package/dest/private/execution_data_provider.d.ts +0 -261
  396. package/dest/private/execution_data_provider.d.ts.map +0 -1
  397. package/dest/private/execution_data_provider.js +0 -14
  398. package/dest/private/execution_note_cache.d.ts +0 -93
  399. package/dest/private/execution_note_cache.d.ts.map +0 -1
  400. package/dest/private/execution_note_cache.js +0 -180
  401. package/dest/private/hashed_values_cache.d.ts +0 -28
  402. package/dest/private/hashed_values_cache.d.ts.map +0 -1
  403. package/dest/private/hashed_values_cache.js +0 -46
  404. package/dest/private/index.d.ts +0 -13
  405. package/dest/private/index.d.ts.map +0 -1
  406. package/dest/private/index.js +0 -12
  407. package/dest/private/pick_notes.d.ts +0 -85
  408. package/dest/private/pick_notes.d.ts.map +0 -1
  409. package/dest/private/pick_notes.js +0 -51
  410. package/dest/private/private_execution.d.ts +0 -25
  411. package/dest/private/private_execution.d.ts.map +0 -1
  412. package/dest/private/private_execution.js +0 -92
  413. package/dest/private/private_execution_oracle.d.ts +0 -215
  414. package/dest/private/private_execution_oracle.d.ts.map +0 -1
  415. package/dest/private/private_execution_oracle.js +0 -382
  416. package/dest/private/providers/acvm_native.d.ts +0 -40
  417. package/dest/private/providers/acvm_native.d.ts.map +0 -1
  418. package/dest/private/providers/acvm_wasm.d.ts +0 -15
  419. package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
  420. package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
  421. package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  422. package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
  423. package/dest/private/providers/factory.d.ts +0 -12
  424. package/dest/private/providers/factory.d.ts.map +0 -1
  425. package/dest/private/providers/simulation_provider.d.ts +0 -19
  426. package/dest/private/providers/simulation_provider.d.ts.map +0 -1
  427. package/dest/private/providers/simulation_provider.js +0 -24
  428. package/dest/private/simulator.d.ts +0 -34
  429. package/dest/private/simulator.d.ts.map +0 -1
  430. package/dest/private/simulator.js +0 -76
  431. package/dest/private/unconstrained_execution.d.ts +0 -10
  432. package/dest/private/unconstrained_execution.d.ts.map +0 -1
  433. package/dest/private/unconstrained_execution.js +0 -27
  434. package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
  435. package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
  436. package/dest/private/unconstrained_execution_oracle.js +0 -258
  437. package/dest/public/avm/bytecode_utils.d.ts +0 -5
  438. package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
  439. package/dest/public/avm/bytecode_utils.js +0 -17
  440. package/dest/public/avm/fixtures/index.d.ts +0 -84
  441. package/dest/public/avm/fixtures/index.d.ts.map +0 -1
  442. package/dest/public/avm/fixtures/index.js +0 -175
  443. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
  444. package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  445. package/dest/public/avm/journal/index.d.ts +0 -2
  446. package/dest/public/avm/journal/index.d.ts.map +0 -1
  447. package/dest/public/avm/journal/index.js +0 -1
  448. package/dest/public/avm/journal/journal.d.ts +0 -209
  449. package/dest/public/avm/journal/journal.d.ts.map +0 -1
  450. package/dest/public/avm/journal/journal.js +0 -486
  451. package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
  452. package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
  453. package/dest/public/bytecode_errors.d.ts +0 -4
  454. package/dest/public/bytecode_errors.d.ts.map +0 -1
  455. package/dest/public/bytecode_errors.js +0 -6
  456. package/dest/public/execution.d.ts +0 -108
  457. package/dest/public/execution.d.ts.map +0 -1
  458. package/dest/public/execution.js +0 -9
  459. package/dest/public/tx_contract_cache.d.ts +0 -41
  460. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  461. package/dest/public/tx_contract_cache.js +0 -49
  462. package/dest/test/utils.d.ts +0 -13
  463. package/dest/test/utils.d.ts.map +0 -1
  464. package/dest/test/utils.js +0 -22
  465. package/src/common/db_interfaces.ts +0 -94
  466. package/src/common/message_load_oracle_inputs.ts +0 -15
  467. package/src/private/acvm/oracle/index.ts +0 -16
  468. package/src/private/acvm/oracle/oracle.ts +0 -455
  469. package/src/private/acvm/oracle/typed_oracle.ts +0 -259
  470. package/src/private/execution_data_provider.ts +0 -323
  471. package/src/private/execution_note_cache.ts +0 -217
  472. package/src/private/hashed_values_cache.ts +0 -55
  473. package/src/private/index.ts +0 -16
  474. package/src/private/pick_notes.ts +0 -141
  475. package/src/private/private_execution.ts +0 -151
  476. package/src/private/private_execution_oracle.ts +0 -614
  477. package/src/private/providers/acvm_wasm.ts +0 -63
  478. package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
  479. package/src/private/providers/simulation_provider.ts +0 -45
  480. package/src/private/simulator.ts +0 -147
  481. package/src/private/unconstrained_execution.ts +0 -50
  482. package/src/private/unconstrained_execution_oracle.ts +0 -373
  483. package/src/public/avm/bytecode_utils.ts +0 -17
  484. package/src/public/avm/fixtures/index.ts +0 -296
  485. package/src/public/avm/journal/index.ts +0 -1
  486. package/src/public/avm/journal/journal.ts +0 -742
  487. package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
  488. package/src/public/bytecode_errors.ts +0 -6
  489. package/src/public/execution.ts +0 -140
  490. package/src/public/tx_contract_cache.ts +0 -69
  491. package/src/test/utils.ts +0 -36
  492. /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
@@ -1,3 +1,7 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+
3
+ import { strict as assert } from 'assert';
4
+
1
5
  import type { AvmContext } from '../avm_context.js';
2
6
  import { Field, TaggedMemory, TypeTag, Uint32 } from '../avm_memory_types.js';
3
7
  import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
@@ -13,42 +17,42 @@ export class Set extends Instruction {
13
17
  OperandType.UINT8, // opcode
14
18
  OperandType.UINT8, // indirect
15
19
  OperandType.UINT8, // dstOffset
16
- OperandType.UINT8, // tag
20
+ OperandType.TAG, // tag
17
21
  OperandType.UINT8, // const (value)
18
22
  ];
19
23
  public static readonly wireFormat16: OperandType[] = [
20
24
  OperandType.UINT8, // opcode
21
25
  OperandType.UINT8, // indirect
22
26
  OperandType.UINT16, // dstOffset
23
- OperandType.UINT8, // tag
27
+ OperandType.TAG, // tag
24
28
  OperandType.UINT16, // const (value)
25
29
  ];
26
30
  public static readonly wireFormat32: OperandType[] = [
27
31
  OperandType.UINT8, // opcode
28
32
  OperandType.UINT8, // indirect
29
33
  OperandType.UINT16, // dstOffset
30
- OperandType.UINT8, // tag
34
+ OperandType.TAG, // tag
31
35
  OperandType.UINT32, // const (value)
32
36
  ];
33
37
  public static readonly wireFormat64: OperandType[] = [
34
38
  OperandType.UINT8, // opcode
35
39
  OperandType.UINT8, // indirect
36
40
  OperandType.UINT16, // dstOffset
37
- OperandType.UINT8, // tag
41
+ OperandType.TAG, // tag
38
42
  OperandType.UINT64, // const (value)
39
43
  ];
40
44
  public static readonly wireFormat128: OperandType[] = [
41
45
  OperandType.UINT8, // opcode
42
46
  OperandType.UINT8, // indirect
43
47
  OperandType.UINT16, // dstOffset
44
- OperandType.UINT8, // tag
48
+ OperandType.TAG, // tag
45
49
  OperandType.UINT128, // const (value)
46
50
  ];
47
51
  public static readonly wireFormatFF: OperandType[] = [
48
52
  OperandType.UINT8, // opcode
49
53
  OperandType.UINT8, // indirect
50
54
  OperandType.UINT16, // dstOffset
51
- OperandType.UINT8, // tag
55
+ OperandType.TAG, // tag
52
56
  OperandType.FF, // const (value)
53
57
  ];
54
58
 
@@ -59,7 +63,8 @@ export class Set extends Instruction {
59
63
  private value: bigint | number,
60
64
  ) {
61
65
  super();
62
- TaggedMemory.checkIsValidTag(inTag);
66
+ assert(this.value >= 0, `Value ${this.value} is negative`);
67
+ assert(this.value < Fr.MODULUS, `Value ${this.value} is larger than Fr.MODULUS`);
63
68
  }
64
69
 
65
70
  public async execute(context: AvmContext): Promise<void> {
@@ -67,10 +72,13 @@ export class Set extends Instruction {
67
72
  const res = TaggedMemory.buildFromTagTruncating(this.value, this.inTag);
68
73
 
69
74
  const memory = context.machineState.memory;
70
- context.machineState.consumeGas(this.gasCost());
75
+ const addressing = Addressing.fromWire(this.indirect);
76
+
77
+ context.machineState.consumeGas(
78
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
79
+ );
71
80
 
72
81
  const operands = [this.dstOffset];
73
- const addressing = Addressing.fromWire(this.indirect, operands.length);
74
82
  const [dstOffset] = addressing.resolve(operands, memory);
75
83
  memory.set(dstOffset, res);
76
84
  }
@@ -85,27 +93,34 @@ export class Cast extends Instruction {
85
93
  OperandType.UINT8,
86
94
  OperandType.UINT8,
87
95
  OperandType.UINT8,
88
- OperandType.UINT8,
96
+ OperandType.TAG,
89
97
  ];
90
98
  static readonly wireFormat16 = [
91
99
  OperandType.UINT8,
92
100
  OperandType.UINT8,
93
101
  OperandType.UINT16,
94
102
  OperandType.UINT16,
95
- OperandType.UINT8,
103
+ OperandType.TAG,
96
104
  ];
97
105
 
98
- constructor(private indirect: number, private srcOffset: number, private dstOffset: number, private dstTag: number) {
106
+ constructor(
107
+ private indirect: number,
108
+ private srcOffset: number,
109
+ private dstOffset: number,
110
+ private dstTag: number,
111
+ ) {
99
112
  super();
100
- TaggedMemory.checkIsValidTag(dstTag);
101
113
  }
102
114
 
103
115
  public async execute(context: AvmContext): Promise<void> {
104
116
  const memory = context.machineState.memory;
105
- context.machineState.consumeGas(this.gasCost());
117
+ const addressing = Addressing.fromWire(this.indirect);
118
+
119
+ context.machineState.consumeGas(
120
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
121
+ );
106
122
 
107
123
  const operands = [this.srcOffset, this.dstOffset];
108
- const addressing = Addressing.fromWire(this.indirect, operands.length);
109
124
  const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
110
125
 
111
126
  const a = memory.get(srcOffset);
@@ -134,16 +149,23 @@ export class Mov extends Instruction {
134
149
  OperandType.UINT16,
135
150
  ];
136
151
 
137
- constructor(private indirect: number, private srcOffset: number, private dstOffset: number) {
152
+ constructor(
153
+ private indirect: number,
154
+ private srcOffset: number,
155
+ private dstOffset: number,
156
+ ) {
138
157
  super();
139
158
  }
140
159
 
141
160
  public async execute(context: AvmContext): Promise<void> {
142
161
  const memory = context.machineState.memory;
143
- context.machineState.consumeGas(this.gasCost());
162
+ const addressing = Addressing.fromWire(this.indirect);
163
+
164
+ context.machineState.consumeGas(
165
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
166
+ );
144
167
 
145
168
  const operands = [this.srcOffset, this.dstOffset];
146
- const addressing = Addressing.fromWire(this.indirect, operands.length);
147
169
  const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
148
170
  const a = memory.get(srcOffset);
149
171
  memory.set(dstOffset, a);
@@ -164,8 +186,8 @@ export class CalldataCopy extends Instruction {
164
186
 
165
187
  constructor(
166
188
  private indirect: number,
167
- private cdStartOffset: number,
168
189
  private copySizeOffset: number,
190
+ private cdStartOffset: number,
169
191
  private dstOffset: number,
170
192
  ) {
171
193
  super();
@@ -173,14 +195,19 @@ export class CalldataCopy extends Instruction {
173
195
 
174
196
  public async execute(context: AvmContext): Promise<void> {
175
197
  const memory = context.machineState.memory;
176
- const operands = [this.cdStartOffset, this.copySizeOffset, this.dstOffset];
177
- const addressing = Addressing.fromWire(this.indirect, operands.length);
178
- const [cdStartOffset, copySizeOffset, dstOffset] = addressing.resolve(operands, memory);
198
+ const addressing = Addressing.fromWire(this.indirect);
199
+
200
+ context.machineState.consumeGas(
201
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
202
+ );
203
+
204
+ const operands = [this.copySizeOffset, this.cdStartOffset, this.dstOffset];
205
+ const [copySizeOffset, cdStartOffset, dstOffset] = addressing.resolve(operands, memory);
179
206
 
180
207
  memory.checkTags(TypeTag.UINT32, cdStartOffset, copySizeOffset);
181
208
  const cdStart = memory.get(cdStartOffset).toNumber();
182
209
  const copySize = memory.get(copySizeOffset).toNumber();
183
- context.machineState.consumeGas(this.gasCost(copySize));
210
+ context.machineState.consumeGas(this.dynamicGasCost(copySize));
184
211
 
185
212
  // Values which are out-of-range of the calldata array will be set with Field(0);
186
213
  const slice = context.environment.calldata.slice(cdStart, cdStart + copySize).map(f => new Field(f));
@@ -197,16 +224,23 @@ export class ReturndataSize extends Instruction {
197
224
  // Informs (de)serialization. See Instruction.deserialize.
198
225
  static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
199
226
 
200
- constructor(private indirect: number, private dstOffset: number) {
227
+ constructor(
228
+ private indirect: number,
229
+ private dstOffset: number,
230
+ ) {
201
231
  super();
202
232
  }
203
233
 
204
234
  public async execute(context: AvmContext): Promise<void> {
205
235
  const memory = context.machineState.memory;
236
+ const addressing = Addressing.fromWire(this.indirect);
237
+
238
+ context.machineState.consumeGas(
239
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
240
+ );
241
+
206
242
  const operands = [this.dstOffset];
207
- const addressing = Addressing.fromWire(this.indirect, operands.length);
208
243
  const [dstOffset] = addressing.resolve(operands, memory);
209
- context.machineState.consumeGas(this.gasCost());
210
244
 
211
245
  memory.set(dstOffset, new Uint32(context.machineState.nestedReturndata.length));
212
246
  }
@@ -226,8 +260,8 @@ export class ReturndataCopy extends Instruction {
226
260
 
227
261
  constructor(
228
262
  private indirect: number,
229
- private rdStartOffset: number,
230
263
  private copySizeOffset: number,
264
+ private rdStartOffset: number,
231
265
  private dstOffset: number,
232
266
  ) {
233
267
  super();
@@ -235,14 +269,19 @@ export class ReturndataCopy extends Instruction {
235
269
 
236
270
  public async execute(context: AvmContext): Promise<void> {
237
271
  const memory = context.machineState.memory;
238
- const operands = [this.rdStartOffset, this.copySizeOffset, this.dstOffset];
239
- const addressing = Addressing.fromWire(this.indirect, operands.length);
240
- const [rdStartOffset, copySizeOffset, dstOffset] = addressing.resolve(operands, memory);
272
+ const addressing = Addressing.fromWire(this.indirect);
273
+
274
+ context.machineState.consumeGas(
275
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
276
+ );
277
+
278
+ const operands = [this.copySizeOffset, this.rdStartOffset, this.dstOffset];
279
+ const [copySizeOffset, rdStartOffset, dstOffset] = addressing.resolve(operands, memory);
241
280
 
242
281
  memory.checkTags(TypeTag.UINT32, rdStartOffset, copySizeOffset);
243
- const rdStart = memory.get(rdStartOffset).toNumber();
244
282
  const copySize = memory.get(copySizeOffset).toNumber();
245
- context.machineState.consumeGas(this.gasCost(copySize));
283
+ const rdStart = memory.get(rdStartOffset).toNumber();
284
+ context.machineState.consumeGas(this.dynamicGasCost(copySize));
246
285
 
247
286
  // Values which are out-of-range of the returndata array will be set with Field(0);
248
287
  const slice = context.machineState.nestedReturndata.slice(rdStart, rdStart + copySize).map(f => new Field(f));
@@ -1,4 +1,4 @@
1
- import { applyStringFormatting, createLogger } from '@aztec/foundation/log';
1
+ import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundation/log';
2
2
 
3
3
  import type { AvmContext } from '../avm_context.js';
4
4
  import { TypeTag } from '../avm_memory_types.js';
@@ -15,6 +15,7 @@ export class DebugLog extends Instruction {
15
15
  static readonly wireFormat: OperandType[] = [
16
16
  OperandType.UINT8, // Opcode
17
17
  OperandType.UINT8, // Indirect
18
+ OperandType.UINT16, // level memory address
18
19
  OperandType.UINT16, // message memory address
19
20
  OperandType.UINT16, // fields memory address
20
21
  OperandType.UINT16, // fields size address
@@ -23,6 +24,7 @@ export class DebugLog extends Instruction {
23
24
 
24
25
  constructor(
25
26
  private indirect: number,
27
+ private levelOffset: number,
26
28
  private messageOffset: number,
27
29
  private fieldsOffset: number,
28
30
  private fieldsSizeOffset: number,
@@ -33,28 +35,68 @@ export class DebugLog extends Instruction {
33
35
 
34
36
  public async execute(context: AvmContext): Promise<void> {
35
37
  const memory = context.machineState.memory;
36
- const operands = [this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
37
- const addressing = Addressing.fromWire(this.indirect, operands.length);
38
- const [messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
38
+ const addressing = Addressing.fromWire(this.indirect);
39
39
 
40
- memory.checkTag(TypeTag.UINT32, fieldsSizeOffset);
41
- const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
40
+ context.machineState.consumeGas(
41
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
42
+ );
42
43
 
43
- const rawMessage = memory.getSlice(messageOffset, this.messageSize);
44
- const fields = memory.getSlice(fieldsOffset, fieldsSize);
44
+ const operands = [this.levelOffset, this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
45
+ const [levelOffset, messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
45
46
 
46
- memory.checkTagsRange(TypeTag.UINT8, messageOffset, this.messageSize);
47
- memory.checkTagsRange(TypeTag.FIELD, fieldsOffset, fieldsSize);
47
+ // DebugLog is a no-op except unless the config is set to collect debug logs.
48
+ // Note that we still do address resolution and basic tag-checking (above)
49
+ // To avoid a special-case in the witness generator and circuit.
50
+ if (context.environment.config.collectDebugLogs) {
51
+ memory.checkTag(TypeTag.UINT8, levelOffset);
52
+ const levelNumber = memory.get(levelOffset).toNumber();
53
+ memory.checkTag(TypeTag.UINT32, fieldsSizeOffset);
54
+ const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
48
55
 
49
- context.machineState.consumeGas(this.gasCost(this.messageSize + fieldsSize));
56
+ const memoryReads = 1 /* level */ + 1 /* fieldsSize */ + this.messageSize /* message */ + fieldsSize; /* fields */
57
+ if (
58
+ context.persistableState.getDebugLogMemoryReads() + memoryReads >
59
+ context.environment.config.maxDebugLogMemoryReads
60
+ ) {
61
+ // Regular error on purpose: this is not a recoverable error.
62
+ throw new Error(
63
+ `Max debug log memory reads exceeded: ${context.persistableState.getDebugLogMemoryReads() + memoryReads} > ${context.environment.config.maxDebugLogMemoryReads}`,
64
+ );
65
+ }
66
+ context.persistableState.writeDebugLogMemoryReads(memoryReads);
50
67
 
51
- // Interpret str<N> = [u8; N] to string.
52
- const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
53
- const formattedStr = applyStringFormatting(
54
- messageAsStr,
55
- fields.map(field => field.toFr()),
56
- );
68
+ const rawMessage = memory.getSlice(messageOffset, this.messageSize);
69
+ const fields = memory.getSlice(fieldsOffset, fieldsSize);
70
+
71
+ memory.checkTagsRange(TypeTag.UINT8, messageOffset, this.messageSize);
72
+ memory.checkTagsRange(TypeTag.FIELD, fieldsOffset, fieldsSize);
73
+
74
+ // Interpret str<N> = [u8; N] to string.
75
+ const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
76
+
77
+ if (!LogLevels[levelNumber]) {
78
+ // Regular error on purpose: this is not a recoverable error.
79
+ throw new Error(`Invalid debug log level: ${levelNumber}`);
80
+ }
81
+
82
+ const level = LogLevels[levelNumber];
83
+
84
+ context.persistableState.writeDebugLog(
85
+ context.environment.address,
86
+ level,
87
+ messageAsStr,
88
+ fields.map(field => field.toFr()),
89
+ );
90
+
91
+ // Skips string formatting if the level is disabled.
92
+ if (DebugLog.logger.isLevelEnabled(level)) {
93
+ const formattedStr = applyStringFormatting(
94
+ messageAsStr,
95
+ fields.map(field => field.toFr()),
96
+ );
57
97
 
58
- DebugLog.logger.verbose(formattedStr);
98
+ DebugLog.logger[level](formattedStr);
99
+ }
100
+ }
59
101
  }
60
102
  }
@@ -14,7 +14,11 @@ abstract class BaseStorageInstruction extends Instruction {
14
14
  OperandType.UINT16,
15
15
  ];
16
16
 
17
- constructor(protected indirect: number, protected aOffset: number, protected bOffset: number) {
17
+ constructor(
18
+ protected indirect: number,
19
+ protected aOffset: number,
20
+ protected bOffset: number,
21
+ ) {
18
22
  super();
19
23
  }
20
24
  }
@@ -33,15 +37,24 @@ export class SStore extends BaseStorageInstruction {
33
37
  }
34
38
 
35
39
  const memory = context.machineState.memory;
36
- context.machineState.consumeGas(this.gasCost());
40
+ const addressing = Addressing.fromWire(this.indirect);
41
+
42
+ context.machineState.consumeGas(
43
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
44
+ );
37
45
 
38
46
  const operands = [this.aOffset, this.bOffset];
39
- const addressing = Addressing.fromWire(this.indirect, operands.length);
40
47
  const [srcOffset, slotOffset] = addressing.resolve(operands, memory);
48
+ // We read before tag checking since it's needed for gas cost calculation
49
+ const slot = memory.get(slotOffset).toFr();
50
+
51
+ context.machineState.consumeGas(
52
+ this.dynamicGasCost(Number(context.persistableState.isStorageCold(context.environment.address, slot))),
53
+ );
54
+
41
55
  memory.checkTag(TypeTag.FIELD, slotOffset);
42
56
  memory.checkTag(TypeTag.FIELD, srcOffset);
43
57
 
44
- const slot = memory.get(slotOffset).toFr();
45
58
  const value = memory.get(srcOffset).toFr();
46
59
  await context.persistableState.writeStorage(context.environment.address, slot, value);
47
60
  }
@@ -57,10 +70,13 @@ export class SLoad extends BaseStorageInstruction {
57
70
 
58
71
  public async execute(context: AvmContext): Promise<void> {
59
72
  const memory = context.machineState.memory;
60
- context.machineState.consumeGas(this.gasCost());
73
+ const addressing = Addressing.fromWire(this.indirect);
74
+
75
+ context.machineState.consumeGas(
76
+ this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
77
+ );
61
78
 
62
79
  const operands = [this.aOffset, this.bOffset];
63
- const addressing = Addressing.fromWire(this.indirect, operands.length);
64
80
  const [slotOffset, dstOffset] = addressing.resolve(operands, memory);
65
81
  memory.checkTag(TypeTag.FIELD, slotOffset);
66
82
 
@@ -0,0 +1,55 @@
1
+ import type { Fr } from '@aztec/foundation/fields';
2
+
3
+ import type { AvmContext } from './avm_context.js';
4
+ import { type AvmExecutionError, AvmRevertReason } from './errors.js';
5
+
6
+ async function createRevertReason(message: string, revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
7
+ // We drop the returnPc information.
8
+ const internalCallStack = context.machineState.internalCallStack.map(entry => entry.callPc);
9
+
10
+ // If we are reverting due to the same error that we have been tracking, we use the nested error as the cause.
11
+ let nestedError = undefined;
12
+ const revertDataEquals = (a: Fr[], b: Fr[]) => a.length === b.length && a.every((v, i) => v.equals(b[i]));
13
+ if (
14
+ context.machineState.collectedRevertInfo &&
15
+ revertDataEquals(context.machineState.collectedRevertInfo.revertDataRepresentative, revertData)
16
+ ) {
17
+ nestedError = context.machineState.collectedRevertInfo.recursiveRevertReason;
18
+ message = context.machineState.collectedRevertInfo.recursiveRevertReason.message;
19
+ }
20
+
21
+ const fnName = await context.persistableState.getPublicFunctionDebugName(context.environment);
22
+
23
+ return new AvmRevertReason(
24
+ message,
25
+ /*failingFunction=*/ {
26
+ contractAddress: context.environment.address,
27
+ functionName: fnName,
28
+ },
29
+ /*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
30
+ /*options=*/ { cause: nestedError },
31
+ );
32
+ }
33
+
34
+ /**
35
+ * Create a "revert reason" error for an exceptional halt.
36
+ *
37
+ * @param haltingError - the lower-level error causing the exceptional halt
38
+ * @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
39
+ */
40
+ export async function revertReasonFromExceptionalHalt(
41
+ haltingError: AvmExecutionError,
42
+ context: AvmContext,
43
+ ): Promise<AvmRevertReason> {
44
+ return await createRevertReason(haltingError.message, [], context);
45
+ }
46
+
47
+ /**
48
+ * Create a "revert reason" error for an explicit revert (a root cause).
49
+ *
50
+ * @param revertData - output data of the explicit REVERT instruction
51
+ * @param context - the context of the AVM execution used to extract the failingFunction and noirCallStack
52
+ */
53
+ export async function revertReasonFromExplicitRevert(revertData: Fr[], context: AvmContext): Promise<AvmRevertReason> {
54
+ return await createRevertReason('Assertion failed: ', revertData, context);
55
+ }
@@ -2,7 +2,10 @@
2
2
  * A Buffer-like class that automatically advances the position.
3
3
  */
4
4
  export class BufferCursor {
5
- constructor(private _buffer: Buffer, private _position: number = 0) {}
5
+ constructor(
6
+ private _buffer: Buffer,
7
+ private _position: number = 0,
8
+ ) {}
6
9
 
7
10
  public position(): number {
8
11
  return this._position;
@@ -1,3 +1,5 @@
1
+ import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
2
+
1
3
  import { AvmExecutionError, AvmParsingError, InvalidOpcodeError, InvalidProgramCounterError } from '../errors.js';
2
4
  import {
3
5
  Add,
@@ -53,106 +55,102 @@ import { MAX_OPCODE_VALUE, Opcode } from './instruction_serialization.js';
53
55
 
54
56
  export type InstructionDeserializer = (buf: BufferCursor | Buffer) => Instruction;
55
57
 
56
- export interface Serializable {
57
- serialize(): Buffer;
58
- }
59
-
60
58
  export interface Deserializable {
61
59
  deserialize: InstructionDeserializer;
62
60
  }
63
61
 
64
62
  export type InstructionSet = Map<Opcode, InstructionDeserializer>;
65
63
  export const INSTRUCTION_SET = new Map<Opcode, InstructionDeserializer>([
66
- [Opcode.ADD_8, Add.as(Add.wireFormat8).deserialize],
67
- [Opcode.ADD_16, Add.as(Add.wireFormat16).deserialize],
68
- [Opcode.SUB_8, Sub.as(Sub.wireFormat8).deserialize],
69
- [Opcode.SUB_16, Sub.as(Sub.wireFormat16).deserialize],
70
- [Opcode.MUL_8, Mul.as(Mul.wireFormat8).deserialize],
71
- [Opcode.MUL_16, Mul.as(Mul.wireFormat16).deserialize],
72
- [Opcode.DIV_8, Div.as(Div.wireFormat8).deserialize],
73
- [Opcode.DIV_16, Div.as(Div.wireFormat16).deserialize],
74
- [Opcode.FDIV_8, FieldDiv.as(FieldDiv.wireFormat8).deserialize],
75
- [Opcode.FDIV_16, FieldDiv.as(FieldDiv.wireFormat16).deserialize],
76
- [Opcode.EQ_8, Eq.as(Eq.wireFormat8).deserialize],
77
- [Opcode.EQ_16, Eq.as(Eq.wireFormat16).deserialize],
78
- [Opcode.LT_8, Lt.as(Lt.wireFormat8).deserialize],
79
- [Opcode.LT_16, Lt.as(Lt.wireFormat16).deserialize],
80
- [Opcode.LTE_8, Lte.as(Lte.wireFormat8).deserialize],
81
- [Opcode.LTE_16, Lte.as(Lte.wireFormat16).deserialize],
82
- [Opcode.AND_8, And.as(And.wireFormat8).deserialize],
83
- [Opcode.AND_16, And.as(And.wireFormat16).deserialize],
84
- [Opcode.OR_8, Or.as(Or.wireFormat8).deserialize],
85
- [Opcode.OR_16, Or.as(Or.wireFormat16).deserialize],
86
- [Opcode.XOR_8, Xor.as(Xor.wireFormat8).deserialize],
87
- [Opcode.XOR_16, Xor.as(Xor.wireFormat16).deserialize],
88
- [Opcode.NOT_8, Not.as(Not.wireFormat8).deserialize],
89
- [Opcode.NOT_16, Not.as(Not.wireFormat16).deserialize],
90
- [Opcode.SHL_8, Shl.as(Shl.wireFormat8).deserialize],
91
- [Opcode.SHL_16, Shl.as(Shl.wireFormat16).deserialize],
92
- [Opcode.SHR_8, Shr.as(Shr.wireFormat8).deserialize],
93
- [Opcode.SHR_16, Shr.as(Shr.wireFormat16).deserialize],
94
- [Opcode.CAST_8, Cast.as(Cast.wireFormat8).deserialize],
95
- [Opcode.CAST_16, Cast.as(Cast.wireFormat16).deserialize],
64
+ [Opcode.ADD_8, Add.as(Add.wireFormat8).fromBuffer],
65
+ [Opcode.ADD_16, Add.as(Add.wireFormat16).fromBuffer],
66
+ [Opcode.SUB_8, Sub.as(Sub.wireFormat8).fromBuffer],
67
+ [Opcode.SUB_16, Sub.as(Sub.wireFormat16).fromBuffer],
68
+ [Opcode.MUL_8, Mul.as(Mul.wireFormat8).fromBuffer],
69
+ [Opcode.MUL_16, Mul.as(Mul.wireFormat16).fromBuffer],
70
+ [Opcode.DIV_8, Div.as(Div.wireFormat8).fromBuffer],
71
+ [Opcode.DIV_16, Div.as(Div.wireFormat16).fromBuffer],
72
+ [Opcode.FDIV_8, FieldDiv.as(FieldDiv.wireFormat8).fromBuffer],
73
+ [Opcode.FDIV_16, FieldDiv.as(FieldDiv.wireFormat16).fromBuffer],
74
+ [Opcode.EQ_8, Eq.as(Eq.wireFormat8).fromBuffer],
75
+ [Opcode.EQ_16, Eq.as(Eq.wireFormat16).fromBuffer],
76
+ [Opcode.LT_8, Lt.as(Lt.wireFormat8).fromBuffer],
77
+ [Opcode.LT_16, Lt.as(Lt.wireFormat16).fromBuffer],
78
+ [Opcode.LTE_8, Lte.as(Lte.wireFormat8).fromBuffer],
79
+ [Opcode.LTE_16, Lte.as(Lte.wireFormat16).fromBuffer],
80
+ [Opcode.AND_8, And.as(And.wireFormat8).fromBuffer],
81
+ [Opcode.AND_16, And.as(And.wireFormat16).fromBuffer],
82
+ [Opcode.OR_8, Or.as(Or.wireFormat8).fromBuffer],
83
+ [Opcode.OR_16, Or.as(Or.wireFormat16).fromBuffer],
84
+ [Opcode.XOR_8, Xor.as(Xor.wireFormat8).fromBuffer],
85
+ [Opcode.XOR_16, Xor.as(Xor.wireFormat16).fromBuffer],
86
+ [Opcode.NOT_8, Not.as(Not.wireFormat8).fromBuffer],
87
+ [Opcode.NOT_16, Not.as(Not.wireFormat16).fromBuffer],
88
+ [Opcode.SHL_8, Shl.as(Shl.wireFormat8).fromBuffer],
89
+ [Opcode.SHL_16, Shl.as(Shl.wireFormat16).fromBuffer],
90
+ [Opcode.SHR_8, Shr.as(Shr.wireFormat8).fromBuffer],
91
+ [Opcode.SHR_16, Shr.as(Shr.wireFormat16).fromBuffer],
92
+ [Opcode.CAST_8, Cast.as(Cast.wireFormat8).fromBuffer],
93
+ [Opcode.CAST_16, Cast.as(Cast.wireFormat16).fromBuffer],
96
94
  // Execution Environment
97
- [Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).deserialize],
98
- [CalldataCopy.opcode, Instruction.deserialize.bind(CalldataCopy)],
99
- [SuccessCopy.opcode, Instruction.deserialize.bind(SuccessCopy)],
100
- [Opcode.RETURNDATASIZE, Instruction.deserialize.bind(ReturndataSize)],
101
- [Opcode.RETURNDATACOPY, Instruction.deserialize.bind(ReturndataCopy)],
95
+ [Opcode.GETENVVAR_16, GetEnvVar.as(GetEnvVar.wireFormat16).fromBuffer],
96
+ [CalldataCopy.opcode, Instruction.fromBuffer.bind(CalldataCopy)],
97
+ [SuccessCopy.opcode, Instruction.fromBuffer.bind(SuccessCopy)],
98
+ [Opcode.RETURNDATASIZE, Instruction.fromBuffer.bind(ReturndataSize)],
99
+ [Opcode.RETURNDATACOPY, Instruction.fromBuffer.bind(ReturndataCopy)],
102
100
 
103
101
  // Machine State - Internal Control Flow
104
- [Jump.opcode, Instruction.deserialize.bind(Jump)],
105
- [JumpI.opcode, Instruction.deserialize.bind(JumpI)],
106
- [InternalCall.opcode, Instruction.deserialize.bind(InternalCall)],
107
- [InternalReturn.opcode, Instruction.deserialize.bind(InternalReturn)],
108
- [Opcode.SET_8, Set.as(Set.wireFormat8).deserialize],
109
- [Opcode.SET_16, Set.as(Set.wireFormat16).deserialize],
110
- [Opcode.SET_32, Set.as(Set.wireFormat32).deserialize],
111
- [Opcode.SET_64, Set.as(Set.wireFormat64).deserialize],
112
- [Opcode.SET_128, Set.as(Set.wireFormat128).deserialize],
113
- [Opcode.SET_FF, Set.as(Set.wireFormatFF).deserialize],
114
- [Opcode.MOV_8, Mov.as(Mov.wireFormat8).deserialize],
115
- [Opcode.MOV_16, Mov.as(Mov.wireFormat16).deserialize],
102
+ [Jump.opcode, Instruction.fromBuffer.bind(Jump)],
103
+ [JumpI.opcode, Instruction.fromBuffer.bind(JumpI)],
104
+ [InternalCall.opcode, Instruction.fromBuffer.bind(InternalCall)],
105
+ [InternalReturn.opcode, Instruction.fromBuffer.bind(InternalReturn)],
106
+ [Opcode.SET_8, Set.as(Set.wireFormat8).fromBuffer],
107
+ [Opcode.SET_16, Set.as(Set.wireFormat16).fromBuffer],
108
+ [Opcode.SET_32, Set.as(Set.wireFormat32).fromBuffer],
109
+ [Opcode.SET_64, Set.as(Set.wireFormat64).fromBuffer],
110
+ [Opcode.SET_128, Set.as(Set.wireFormat128).fromBuffer],
111
+ [Opcode.SET_FF, Set.as(Set.wireFormatFF).fromBuffer],
112
+ [Opcode.MOV_8, Mov.as(Mov.wireFormat8).fromBuffer],
113
+ [Opcode.MOV_16, Mov.as(Mov.wireFormat16).fromBuffer],
116
114
 
117
115
  // World State
118
- [SLoad.opcode, Instruction.deserialize.bind(SLoad)], // Public Storage
119
- [SStore.opcode, Instruction.deserialize.bind(SStore)], // Public Storage
120
- [NoteHashExists.opcode, Instruction.deserialize.bind(NoteHashExists)], // Notes & Nullifiers
121
- [EmitNoteHash.opcode, Instruction.deserialize.bind(EmitNoteHash)], // Notes & Nullifiers
122
- [NullifierExists.opcode, Instruction.deserialize.bind(NullifierExists)], // Notes & Nullifiers
123
- [EmitNullifier.opcode, Instruction.deserialize.bind(EmitNullifier)], // Notes & Nullifiers
124
- [L1ToL2MessageExists.opcode, Instruction.deserialize.bind(L1ToL2MessageExists)], // Messages
116
+ [SLoad.opcode, Instruction.fromBuffer.bind(SLoad)], // Public Storage
117
+ [SStore.opcode, Instruction.fromBuffer.bind(SStore)], // Public Storage
118
+ [NoteHashExists.opcode, Instruction.fromBuffer.bind(NoteHashExists)], // Notes & Nullifiers
119
+ [EmitNoteHash.opcode, Instruction.fromBuffer.bind(EmitNoteHash)], // Notes & Nullifiers
120
+ [NullifierExists.opcode, Instruction.fromBuffer.bind(NullifierExists)], // Notes & Nullifiers
121
+ [EmitNullifier.opcode, Instruction.fromBuffer.bind(EmitNullifier)], // Notes & Nullifiers
122
+ [L1ToL2MessageExists.opcode, Instruction.fromBuffer.bind(L1ToL2MessageExists)], // Messages
125
123
 
126
124
  // Accrued Substate
127
- [EmitUnencryptedLog.opcode, Instruction.deserialize.bind(EmitUnencryptedLog)],
128
- [SendL2ToL1Message.opcode, Instruction.deserialize.bind(SendL2ToL1Message)],
129
- [GetContractInstance.opcode, Instruction.deserialize.bind(GetContractInstance)],
125
+ [EmitUnencryptedLog.opcode, Instruction.fromBuffer.bind(EmitUnencryptedLog)],
126
+ [SendL2ToL1Message.opcode, Instruction.fromBuffer.bind(SendL2ToL1Message)],
127
+ [GetContractInstance.opcode, Instruction.fromBuffer.bind(GetContractInstance)],
130
128
 
131
129
  // Control Flow - Contract Calls
132
- [Call.opcode, Instruction.deserialize.bind(Call)],
133
- [StaticCall.opcode, Instruction.deserialize.bind(StaticCall)],
134
- [Return.opcode, Instruction.deserialize.bind(Return)],
135
- [Opcode.REVERT_8, Revert.as(Revert.wireFormat8).deserialize],
136
- [Opcode.REVERT_16, Revert.as(Revert.wireFormat16).deserialize],
130
+ [Call.opcode, Instruction.fromBuffer.bind(Call)],
131
+ [StaticCall.opcode, Instruction.fromBuffer.bind(StaticCall)],
132
+ [Return.opcode, Instruction.fromBuffer.bind(Return)],
133
+ [Opcode.REVERT_8, Revert.as(Revert.wireFormat8).fromBuffer],
134
+ [Opcode.REVERT_16, Revert.as(Revert.wireFormat16).fromBuffer],
137
135
 
138
136
  // Misc
139
- [DebugLog.opcode, Instruction.deserialize.bind(DebugLog)],
137
+ [DebugLog.opcode, Instruction.fromBuffer.bind(DebugLog)],
140
138
 
141
139
  // Gadgets
142
- [EcAdd.opcode, Instruction.deserialize.bind(EcAdd)],
143
- [Poseidon2.opcode, Instruction.deserialize.bind(Poseidon2)],
144
- [Sha256Compression.opcode, Instruction.deserialize.bind(Sha256Compression)],
145
- [KeccakF1600.opcode, Instruction.deserialize.bind(KeccakF1600)],
140
+ [EcAdd.opcode, Instruction.fromBuffer.bind(EcAdd)],
141
+ [Poseidon2.opcode, Instruction.fromBuffer.bind(Poseidon2)],
142
+ [Sha256Compression.opcode, Instruction.fromBuffer.bind(Sha256Compression)],
143
+ [KeccakF1600.opcode, Instruction.fromBuffer.bind(KeccakF1600)],
146
144
 
147
145
  // Conversions
148
- [ToRadixBE.opcode, Instruction.deserialize.bind(ToRadixBE)],
146
+ [ToRadixBE.opcode, Instruction.fromBuffer.bind(ToRadixBE)],
149
147
  ]);
150
148
 
151
149
  /**
152
150
  * Serializes an array of instructions to bytecode.
153
151
  */
154
- export function encodeToBytecode(instructions: Serializable[]): Buffer {
155
- return Buffer.concat(instructions.map(i => i.serialize()));
152
+ export function encodeToBytecode(instructions: Bufferable[]): Buffer {
153
+ return serializeToBuffer(instructions);
156
154
  }
157
155
 
158
156
  // For testing only