@aztec/simulator 3.0.0-canary.a9708bd → 3.0.0-devnet.20251212

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 (342) hide show
  1. package/dest/client.d.ts +1 -1
  2. package/dest/common/errors.d.ts +2 -8
  3. package/dest/common/errors.d.ts.map +1 -1
  4. package/dest/common/index.d.ts +1 -1
  5. package/dest/common/stats/index.d.ts +1 -1
  6. package/dest/common/stats/stats.d.ts +1 -1
  7. package/dest/private/acvm/acvm.d.ts +1 -1
  8. package/dest/private/acvm/acvm_types.d.ts +1 -1
  9. package/dest/private/acvm/deserialize.d.ts +2 -2
  10. package/dest/private/acvm/deserialize.d.ts.map +1 -1
  11. package/dest/private/acvm/deserialize.js +1 -1
  12. package/dest/private/acvm/index.d.ts +1 -1
  13. package/dest/private/acvm/serialize.d.ts +2 -2
  14. package/dest/private/acvm/serialize.d.ts.map +1 -1
  15. package/dest/private/acvm/serialize.js +1 -1
  16. package/dest/private/acvm_native.d.ts +2 -3
  17. package/dest/private/acvm_native.d.ts.map +1 -1
  18. package/dest/private/acvm_native.js +15 -13
  19. package/dest/private/acvm_wasm.d.ts +1 -1
  20. package/dest/private/acvm_wasm.d.ts.map +1 -1
  21. package/dest/private/acvm_wasm_with_blobs.d.ts +1 -1
  22. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -1
  23. package/dest/private/circuit_recording/circuit_recorder.d.ts +1 -1
  24. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  25. package/dest/private/circuit_recording/circuit_recorder.js +1 -1
  26. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +1 -1
  27. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  28. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +1 -1
  29. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
  30. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +2 -2
  31. package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
  32. package/dest/private/circuit_simulator.d.ts +1 -1
  33. package/dest/private/factory.d.ts +1 -1
  34. package/dest/public/avm/avm_context.d.ts +2 -2
  35. package/dest/public/avm/avm_context.d.ts.map +1 -1
  36. package/dest/public/avm/avm_contract_call_result.d.ts +2 -2
  37. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  38. package/dest/public/avm/avm_execution_environment.d.ts +5 -4
  39. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  40. package/dest/public/avm/avm_execution_environment.js +5 -5
  41. package/dest/public/avm/avm_gas.d.ts +2 -2
  42. package/dest/public/avm/avm_gas.d.ts.map +1 -1
  43. package/dest/public/avm/avm_gas.js +2 -2
  44. package/dest/public/avm/avm_machine_state.d.ts +2 -2
  45. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  46. package/dest/public/avm/avm_memory_types.d.ts +20 -14
  47. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  48. package/dest/public/avm/avm_memory_types.js +10 -3
  49. package/dest/public/avm/avm_simulator.d.ts +4 -3
  50. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  51. package/dest/public/avm/avm_simulator.js +19 -25
  52. package/dest/public/avm/avm_simulator_interface.d.ts +1 -1
  53. package/dest/public/avm/errors.d.ts +13 -16
  54. package/dest/public/avm/errors.d.ts.map +1 -1
  55. package/dest/public/avm/errors.js +21 -22
  56. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +3 -2
  57. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  58. package/dest/public/avm/fixtures/avm_simulation_tester.js +14 -6
  59. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +4 -2
  60. package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
  61. package/dest/public/avm/fixtures/base_avm_simulation_tester.js +23 -1
  62. package/dest/public/avm/fixtures/initializers.d.ts +2 -3
  63. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
  64. package/dest/public/avm/fixtures/initializers.js +6 -4
  65. package/dest/public/avm/fixtures/utils.d.ts +4 -3
  66. package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
  67. package/dest/public/avm/fixtures/utils.js +3 -2
  68. package/dest/public/avm/index.d.ts +1 -1
  69. package/dest/public/avm/opcodes/accrued_substate.d.ts +3 -3
  70. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  71. package/dest/public/avm/opcodes/accrued_substate.js +7 -7
  72. package/dest/public/avm/opcodes/addressing_mode.d.ts +1 -1
  73. package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
  74. package/dest/public/avm/opcodes/addressing_mode.js +4 -5
  75. package/dest/public/avm/opcodes/arithmetic.d.ts +10 -8
  76. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  77. package/dest/public/avm/opcodes/arithmetic.js +11 -1
  78. package/dest/public/avm/opcodes/bitwise.d.ts +5 -5
  79. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  80. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  81. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  82. package/dest/public/avm/opcodes/contract.d.ts +1 -1
  83. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  84. package/dest/public/avm/opcodes/control_flow.d.ts +1 -1
  85. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  86. package/dest/public/avm/opcodes/conversion.d.ts +1 -1
  87. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  88. package/dest/public/avm/opcodes/conversion.js +3 -0
  89. package/dest/public/avm/opcodes/ec_add.d.ts +2 -2
  90. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  91. package/dest/public/avm/opcodes/ec_add.js +6 -6
  92. package/dest/public/avm/opcodes/environment_getters.d.ts +1 -1
  93. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  94. package/dest/public/avm/opcodes/environment_getters.js +5 -7
  95. package/dest/public/avm/opcodes/external_calls.d.ts +1 -1
  96. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  97. package/dest/public/avm/opcodes/external_calls.js +0 -1
  98. package/dest/public/avm/opcodes/hashing.d.ts +2 -2
  99. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  100. package/dest/public/avm/opcodes/hashing.js +3 -1
  101. package/dest/public/avm/opcodes/index.d.ts +1 -1
  102. package/dest/public/avm/opcodes/instruction.d.ts +2 -2
  103. package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
  104. package/dest/public/avm/opcodes/instruction.js +5 -6
  105. package/dest/public/avm/opcodes/instruction_impl.d.ts +1 -1
  106. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  107. package/dest/public/avm/opcodes/memory.d.ts +2 -2
  108. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  109. package/dest/public/avm/opcodes/memory.js +1 -1
  110. package/dest/public/avm/opcodes/misc.d.ts +3 -2
  111. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  112. package/dest/public/avm/opcodes/misc.js +28 -8
  113. package/dest/public/avm/opcodes/storage.d.ts +3 -3
  114. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  115. package/dest/public/avm/revert_reason.d.ts +2 -2
  116. package/dest/public/avm/revert_reason.d.ts.map +1 -1
  117. package/dest/public/avm/revert_reason.js +3 -2
  118. package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -1
  119. package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
  120. package/dest/public/avm/serialization/bytecode_serialization.d.ts +1 -1
  121. package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  122. package/dest/public/avm/serialization/bytecode_serialization.js +9 -6
  123. package/dest/public/avm/serialization/instruction_serialization.d.ts +9 -1
  124. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  125. package/dest/public/avm/serialization/instruction_serialization.js +11 -1
  126. package/dest/public/avm/test_utils.d.ts +4 -4
  127. package/dest/public/avm/test_utils.d.ts.map +1 -1
  128. package/dest/public/avm/test_utils.js +7 -10
  129. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  130. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  131. package/dest/public/contracts_db_checkpoint.js +30 -0
  132. package/dest/public/db_interfaces.d.ts +14 -2
  133. package/dest/public/db_interfaces.d.ts.map +1 -1
  134. package/dest/public/debug_fn_name.d.ts +15 -2
  135. package/dest/public/debug_fn_name.d.ts.map +1 -1
  136. package/dest/public/debug_fn_name.js +19 -0
  137. package/dest/public/executor_metrics.d.ts +3 -2
  138. package/dest/public/executor_metrics.d.ts.map +1 -1
  139. package/dest/public/executor_metrics.js +1 -1
  140. package/dest/public/executor_metrics_interface.d.ts +3 -2
  141. package/dest/public/executor_metrics_interface.d.ts.map +1 -1
  142. package/dest/public/fixtures/amm_test.d.ts +1 -1
  143. package/dest/public/fixtures/amm_test.js +2 -2
  144. package/dest/public/fixtures/bulk_test.d.ts +1 -1
  145. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  146. package/dest/public/fixtures/bulk_test.js +64 -131
  147. package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
  148. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  149. package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
  150. package/dest/public/fixtures/custom_bytecode_tests.d.ts +10 -0
  151. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
  152. package/dest/public/fixtures/custom_bytecode_tests.js +130 -0
  153. package/dest/public/fixtures/index.d.ts +3 -2
  154. package/dest/public/fixtures/index.d.ts.map +1 -1
  155. package/dest/public/fixtures/index.js +2 -1
  156. package/dest/public/fixtures/minimal_public_tx.d.ts +4 -4
  157. package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -1
  158. package/dest/public/fixtures/minimal_public_tx.js +8 -22
  159. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +11 -4
  160. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  161. package/dest/public/fixtures/public_tx_simulation_tester.js +29 -10
  162. package/dest/public/fixtures/simple_contract_data_source.d.ts +5 -4
  163. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
  164. package/dest/public/fixtures/simple_contract_data_source.js +4 -4
  165. package/dest/public/fixtures/token_test.d.ts +6 -2
  166. package/dest/public/fixtures/token_test.d.ts.map +1 -1
  167. package/dest/public/fixtures/token_test.js +13 -12
  168. package/dest/public/fixtures/utils.d.ts +2 -2
  169. package/dest/public/fixtures/utils.d.ts.map +1 -1
  170. package/dest/public/fixtures/utils.js +4 -4
  171. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +46 -0
  172. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  173. package/dest/public/fuzzing/avm_fuzzer_simulator.js +136 -0
  174. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  175. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  176. package/dest/public/fuzzing/avm_simulator_bin.js +84 -0
  177. package/dest/public/hinting_db_sources.d.ts +15 -4
  178. package/dest/public/hinting_db_sources.d.ts.map +1 -1
  179. package/dest/public/hinting_db_sources.js +69 -13
  180. package/dest/public/index.d.ts +3 -2
  181. package/dest/public/index.d.ts.map +1 -1
  182. package/dest/public/index.js +1 -1
  183. package/dest/public/public_db_sources.d.ts +24 -65
  184. package/dest/public/public_db_sources.d.ts.map +1 -1
  185. package/dest/public/public_db_sources.js +85 -132
  186. package/dest/public/public_errors.d.ts +12 -0
  187. package/dest/public/public_errors.d.ts.map +1 -0
  188. package/dest/public/public_errors.js +13 -0
  189. package/dest/public/public_processor/guarded_merkle_tree.d.ts +5 -2
  190. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  191. package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
  192. package/dest/public/public_processor/public_processor.d.ts +11 -13
  193. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  194. package/dest/public/public_processor/public_processor.js +61 -43
  195. package/dest/public/public_processor/public_processor_metrics.d.ts +1 -1
  196. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  197. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -0
  198. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
  199. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +94 -0
  200. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +38 -0
  201. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
  202. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +93 -0
  203. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
  204. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
  205. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
  206. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
  207. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
  208. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +170 -0
  209. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +22 -0
  210. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
  211. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
  212. package/dest/public/public_tx_simulator/factories.d.ts +13 -0
  213. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  214. package/dest/public/public_tx_simulator/factories.js +28 -0
  215. package/dest/public/public_tx_simulator/index.d.ts +6 -1
  216. package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
  217. package/dest/public/public_tx_simulator/index.js +3 -0
  218. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +16 -8
  219. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -1
  220. package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +7 -8
  221. package/dest/public/public_tx_simulator/public_tx_context.d.ts +9 -4
  222. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  223. package/dest/public/public_tx_simulator/public_tx_context.js +22 -10
  224. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +22 -29
  225. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  226. package/dest/public/public_tx_simulator/public_tx_simulator.js +178 -127
  227. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -0
  228. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  229. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  230. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +4 -3
  231. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -1
  232. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +2 -2
  233. package/dest/public/side_effect_errors.d.ts +42 -2
  234. package/dest/public/side_effect_errors.d.ts.map +1 -1
  235. package/dest/public/side_effect_errors.js +70 -1
  236. package/dest/public/side_effect_trace.d.ts +13 -7
  237. package/dest/public/side_effect_trace.d.ts.map +1 -1
  238. package/dest/public/side_effect_trace.js +36 -21
  239. package/dest/public/side_effect_trace_interface.d.ts +9 -4
  240. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  241. package/dest/public/state_manager/index.d.ts +1 -1
  242. package/dest/public/state_manager/nullifiers.d.ts +2 -5
  243. package/dest/public/state_manager/nullifiers.d.ts.map +1 -1
  244. package/dest/public/state_manager/nullifiers.js +1 -6
  245. package/dest/public/state_manager/public_storage.d.ts +2 -2
  246. package/dest/public/state_manager/public_storage.d.ts.map +1 -1
  247. package/dest/public/state_manager/public_storage.js +1 -1
  248. package/dest/public/state_manager/state_manager.d.ts +16 -13
  249. package/dest/public/state_manager/state_manager.d.ts.map +1 -1
  250. package/dest/public/state_manager/state_manager.js +64 -21
  251. package/dest/public/test_executor_metrics.d.ts +4 -3
  252. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  253. package/dest/public/test_executor_metrics.js +5 -4
  254. package/dest/public/unique_class_ids.d.ts +1 -1
  255. package/dest/public/unique_class_ids.d.ts.map +1 -1
  256. package/dest/public/utils.d.ts +1 -1
  257. package/dest/server.d.ts +1 -1
  258. package/dest/testing.d.ts +1 -1
  259. package/package.json +24 -19
  260. package/src/common/errors.ts +1 -1
  261. package/src/private/acvm/deserialize.ts +1 -1
  262. package/src/private/acvm/serialize.ts +1 -1
  263. package/src/private/acvm_native.ts +18 -11
  264. package/src/private/circuit_recording/circuit_recorder.ts +1 -1
  265. package/src/private/circuit_recording/simulator_recorder_wrapper.ts +1 -1
  266. package/src/public/avm/avm_context.ts +1 -1
  267. package/src/public/avm/avm_contract_call_result.ts +1 -1
  268. package/src/public/avm/avm_execution_environment.ts +4 -3
  269. package/src/public/avm/avm_gas.ts +5 -5
  270. package/src/public/avm/avm_machine_state.ts +1 -1
  271. package/src/public/avm/avm_memory_types.ts +12 -3
  272. package/src/public/avm/avm_simulator.ts +24 -33
  273. package/src/public/avm/errors.ts +24 -27
  274. package/src/public/avm/fixtures/avm_simulation_tester.ts +14 -4
  275. package/src/public/avm/fixtures/base_avm_simulation_tester.ts +33 -1
  276. package/src/public/avm/fixtures/initializers.ts +7 -8
  277. package/src/public/avm/fixtures/utils.ts +3 -2
  278. package/src/public/avm/opcodes/accrued_substate.ts +4 -4
  279. package/src/public/avm/opcodes/addressing_mode.ts +5 -5
  280. package/src/public/avm/opcodes/arithmetic.ts +13 -1
  281. package/src/public/avm/opcodes/conversion.ts +4 -0
  282. package/src/public/avm/opcodes/ec_add.ts +6 -6
  283. package/src/public/avm/opcodes/environment_getters.ts +6 -8
  284. package/src/public/avm/opcodes/external_calls.ts +0 -1
  285. package/src/public/avm/opcodes/hashing.ts +3 -1
  286. package/src/public/avm/opcodes/instruction.ts +8 -6
  287. package/src/public/avm/opcodes/memory.ts +1 -1
  288. package/src/public/avm/opcodes/misc.ts +41 -7
  289. package/src/public/avm/revert_reason.ts +6 -3
  290. package/src/public/avm/serialization/bytecode_serialization.ts +17 -6
  291. package/src/public/avm/serialization/instruction_serialization.ts +13 -1
  292. package/src/public/avm/test_utils.ts +7 -15
  293. package/src/public/contracts_db_checkpoint.ts +41 -0
  294. package/src/public/db_interfaces.ts +16 -1
  295. package/src/public/debug_fn_name.ts +26 -1
  296. package/src/public/executor_metrics.ts +2 -1
  297. package/src/public/executor_metrics_interface.ts +2 -1
  298. package/src/public/fixtures/amm_test.ts +2 -2
  299. package/src/public/fixtures/bulk_test.ts +42 -24
  300. package/src/public/fixtures/custom_bytecode_tester.ts +49 -0
  301. package/src/public/fixtures/custom_bytecode_tests.ts +159 -0
  302. package/src/public/fixtures/index.ts +2 -1
  303. package/src/public/fixtures/minimal_public_tx.ts +9 -33
  304. package/src/public/fixtures/public_tx_simulation_tester.ts +52 -17
  305. package/src/public/fixtures/simple_contract_data_source.ts +8 -9
  306. package/src/public/fixtures/token_test.ts +18 -10
  307. package/src/public/fixtures/utils.ts +4 -4
  308. package/src/public/fuzzing/avm_fuzzer_simulator.ts +233 -0
  309. package/src/public/fuzzing/avm_simulator_bin.ts +121 -0
  310. package/src/public/hinting_db_sources.ts +113 -10
  311. package/src/public/index.ts +8 -1
  312. package/src/public/public_db_sources.ts +112 -175
  313. package/src/public/public_errors.ts +14 -0
  314. package/src/public/public_processor/guarded_merkle_tree.ts +6 -1
  315. package/src/public/public_processor/public_processor.ts +92 -70
  316. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +116 -0
  317. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +155 -0
  318. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
  319. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +236 -0
  320. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
  321. package/src/public/public_tx_simulator/factories.ts +41 -0
  322. package/src/public/public_tx_simulator/index.ts +5 -0
  323. package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +13 -14
  324. package/src/public/public_tx_simulator/public_tx_context.ts +20 -7
  325. package/src/public/public_tx_simulator/public_tx_simulator.ts +265 -179
  326. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +10 -0
  327. package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +4 -13
  328. package/src/public/side_effect_errors.ts +91 -1
  329. package/src/public/side_effect_trace.ts +49 -24
  330. package/src/public/side_effect_trace_interface.ts +7 -1
  331. package/src/public/state_manager/nullifiers.ts +2 -8
  332. package/src/public/state_manager/public_storage.ts +1 -1
  333. package/src/public/state_manager/state_manager.ts +87 -39
  334. package/src/public/test_executor_metrics.ts +7 -5
  335. package/dest/public/bytecode_errors.d.ts +0 -4
  336. package/dest/public/bytecode_errors.d.ts.map +0 -1
  337. package/dest/public/bytecode_errors.js +0 -6
  338. package/dest/public/tx_contract_cache.d.ts +0 -41
  339. package/dest/public/tx_contract_cache.d.ts.map +0 -1
  340. package/dest/public/tx_contract_cache.js +0 -49
  341. package/src/public/bytecode_errors.ts +0 -6
  342. package/src/public/tx_contract_cache.ts +0 -69
@@ -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,
@@ -39,16 +41,30 @@ export class DebugLog extends Instruction {
39
41
  this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
40
42
  );
41
43
 
42
- const operands = [this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
43
- const [messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
44
+ const operands = [this.levelOffset, this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
45
+ const [levelOffset, messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
44
46
 
45
- // DebugLog is a no-op except when doing client-initiated simulation with debug logging enabled.
47
+ // DebugLog is a no-op except unless the config is set to collect debug logs.
46
48
  // Note that we still do address resolution and basic tag-checking (above)
47
49
  // To avoid a special-case in the witness generator and circuit.
48
- if (context.environment.clientInitiatedSimulation && DebugLog.logger.isLevelEnabled('verbose')) {
50
+ if (context.environment.config.collectDebugLogs) {
51
+ memory.checkTag(TypeTag.UINT8, levelOffset);
52
+ const levelNumber = memory.get(levelOffset).toNumber();
49
53
  memory.checkTag(TypeTag.UINT32, fieldsSizeOffset);
50
54
  const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
51
55
 
56
+ const memoryReads = 1 /* level */ + 1 /* fieldsSize */ + this.messageSize /* message */ + fieldsSize; /* fields */
57
+ if (
58
+ context.persistableState.getDebugLogMemoryReads() + memoryReads >
59
+ context.environment.config.collectionLimits.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.collectionLimits.maxDebugLogMemoryReads}`,
64
+ );
65
+ }
66
+ context.persistableState.writeDebugLogMemoryReads(memoryReads);
67
+
52
68
  const rawMessage = memory.getSlice(messageOffset, this.messageSize);
53
69
  const fields = memory.getSlice(fieldsOffset, fieldsSize);
54
70
 
@@ -57,12 +73,30 @@ export class DebugLog extends Instruction {
57
73
 
58
74
  // Interpret str<N> = [u8; N] to string.
59
75
  const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
60
- const formattedStr = applyStringFormatting(
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,
61
87
  messageAsStr,
62
88
  fields.map(field => field.toFr()),
63
89
  );
64
90
 
65
- DebugLog.logger.verbose(formattedStr);
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
+ );
97
+
98
+ DebugLog.logger[level](formattedStr);
99
+ }
66
100
  }
67
101
  }
68
102
  }
@@ -1,4 +1,4 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
 
3
3
  import type { AvmContext } from './avm_context.js';
4
4
  import { type AvmExecutionError, AvmRevertReason } from './errors.js';
@@ -18,13 +18,16 @@ async function createRevertReason(message: string, revertData: Fr[], context: Av
18
18
  message = context.machineState.collectedRevertInfo.recursiveRevertReason.message;
19
19
  }
20
20
 
21
- const fnName = await context.persistableState.getPublicFunctionDebugName(context.environment);
21
+ const { functionSelector, functionName } = await context.persistableState.getPublicFunctionSelectorAndName(
22
+ context.environment,
23
+ );
22
24
 
23
25
  return new AvmRevertReason(
24
26
  message,
25
27
  /*failingFunction=*/ {
26
28
  contractAddress: context.environment.address,
27
- functionName: fnName,
29
+ functionSelector,
30
+ functionName,
28
31
  },
29
32
  /*noirCallStack=*/ [...internalCallStack, context.machineState.pc].map(pc => `0.${pc}`),
30
33
  /*options=*/ { cause: nestedError },
@@ -1,6 +1,13 @@
1
1
  import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
2
2
 
3
- import { AvmExecutionError, AvmParsingError, InvalidOpcodeError, InvalidProgramCounterError } from '../errors.js';
3
+ import {
4
+ AvmExecutionError,
5
+ AvmParsingError,
6
+ InvalidOpcodeError,
7
+ InvalidProgramCounterError,
8
+ InvalidTagValueError,
9
+ duringInstrFetch,
10
+ } from '../errors.js';
4
11
  import {
5
12
  Add,
6
13
  And,
@@ -172,7 +179,7 @@ export function decodeInstructionFromBytecode(
172
179
  instructionSet: InstructionSet = INSTRUCTION_SET,
173
180
  ): [Instruction, number] {
174
181
  if (pc >= bytecode.length) {
175
- throw new InvalidProgramCounterError(pc, bytecode.length);
182
+ throw new InvalidProgramCounterError(pc, bytecode.length - 1);
176
183
  }
177
184
 
178
185
  try {
@@ -182,7 +189,7 @@ export function decodeInstructionFromBytecode(
182
189
 
183
190
  if (opcode > MAX_OPCODE_VALUE) {
184
191
  throw new InvalidOpcodeError(
185
- `Opcode ${opcode} (0x${opcode.toString(16)}) value is not in the range of valid opcodes.`,
192
+ `Opcode ${opcode} (0x${opcode.toString(16)}) value is not in the range of valid opcodes (at PC ${pc}).`,
186
193
  );
187
194
  }
188
195
 
@@ -192,13 +199,17 @@ export function decodeInstructionFromBytecode(
192
199
  }
193
200
 
194
201
  const instructionDeserializer: InstructionDeserializer = instructionDeserializerOrUndef;
202
+
195
203
  const instruction = instructionDeserializer(cursor);
196
204
  return [instruction, cursor.position() - startingPosition];
197
205
  } catch (error) {
198
- if (error instanceof InvalidOpcodeError || error instanceof AvmExecutionError) {
199
- throw error;
206
+ if (error instanceof InvalidTagValueError || error instanceof InvalidOpcodeError) {
207
+ throw duringInstrFetch(error, pc);
208
+ } else if (error instanceof AvmExecutionError) {
209
+ throw new AvmParsingError(`Instruction parsing error at pc ${pc}: ${error.message}`);
200
210
  } else {
201
- throw new AvmParsingError(`${error}`);
211
+ const msg = error instanceof Error ? `: ${error.message}` : '';
212
+ throw new AvmParsingError(`Instruction fetching error at pc ${pc}${msg}`);
202
213
  }
203
214
  }
204
215
  }
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
 
3
3
  import { strict as assert } from 'assert';
4
4
 
@@ -124,6 +124,18 @@ const OPERAND_SPEC = new Map<OperandType, [number, (offset: number) => OperandNa
124
124
  [OperandType.TAG, [1, Buffer.prototype.readUint8, Buffer.prototype.writeUint8]],
125
125
  ]);
126
126
 
127
+ /**
128
+ * Returns the size of an operand in bytes.
129
+ * Should not be called with unknown operand types.
130
+ * @param operandType
131
+ * @returns number size in bytes
132
+ * @throws AssertionError if the operand type is unknown
133
+ */
134
+ export function getOperandSize(operandType: OperandType): number {
135
+ assert(OPERAND_SPEC.has(operandType), `Unknown operand type: ${operandType}`);
136
+ return OPERAND_SPEC.get(operandType)![0];
137
+ }
138
+
127
139
  function readUintBE(buf: Buffer, offset: number, totalBytes: number): bigint {
128
140
  let value: bigint = 0n;
129
141
  for (let i = 0; i < totalBytes; ++i) {
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
3
3
 
4
4
  import type { jest } from '@jest/globals';
@@ -27,13 +27,12 @@ export function mockStorageReadWithMap(worldStateDB: PublicTreesDB, mockedStorag
27
27
  );
28
28
  }
29
29
 
30
- export function mockNoteHashExists(worldStateDB: PublicTreesDB, _leafIndex: bigint, value?: Fr) {
30
+ export function mockGetNoteHash(worldStateDB: PublicTreesDB, _leafIndex: bigint, value?: Fr) {
31
31
  (worldStateDB as jest.Mocked<PublicTreesDB>).getNoteHash.mockImplementation((index: bigint) => {
32
- if (index == _leafIndex) {
32
+ if (index == _leafIndex && value) {
33
33
  return Promise.resolve(value);
34
34
  } else {
35
- // This is ok for now since the traceing functions handle it
36
- return Promise.resolve(undefined);
35
+ return Promise.resolve(Fr.ZERO);
37
36
  }
38
37
  });
39
38
  }
@@ -42,19 +41,12 @@ export function mockCheckNullifierExists(worldStateDB: PublicTreesDB, exists: bo
42
41
  (worldStateDB as jest.Mocked<PublicTreesDB>).checkNullifierExists.mockResolvedValue(exists);
43
42
  }
44
43
 
45
- export function mockL1ToL2MessageExists(
46
- worldStateDB: PublicTreesDB,
47
- leafIndex: bigint,
48
- value: Fr,
49
- valueAtOtherIndices?: Fr,
50
- ) {
44
+ export function mockGetL1ToL2LeafValue(worldStateDB: PublicTreesDB, leafIndex: bigint, value?: Fr) {
51
45
  (worldStateDB as jest.Mocked<PublicTreesDB>).getL1ToL2LeafValue.mockImplementation((index: bigint) => {
52
- if (index == leafIndex) {
46
+ if (index == leafIndex && value) {
53
47
  return Promise.resolve(value);
54
48
  } else {
55
- // any indices other than mockAtLeafIndex will return a different value
56
- // (or undefined if no value is specified for other indices)
57
- return Promise.resolve(valueAtOtherIndices!);
49
+ return Promise.resolve(Fr.ZERO!);
58
50
  }
59
51
  });
60
52
  }
@@ -0,0 +1,41 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
+ import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
4
+
5
+ export class ContractsDbCheckpoint {
6
+ private instances: Map<string, ContractInstanceWithAddress> = new Map();
7
+ private classes: Map<string, ContractClassPublic> = new Map();
8
+ private bytecodeCommitments: Map<string, Fr> = new Map();
9
+
10
+ public addInstance(address: AztecAddress, instance: ContractInstanceWithAddress): void {
11
+ this.instances.set(address.toString(), instance);
12
+ }
13
+
14
+ public addClass(classId: Fr, contractClass: ContractClassPublic): void {
15
+ this.classes.set(classId.toString(), contractClass);
16
+ }
17
+
18
+ public addBytecodeCommitment(classId: Fr, commitment: Fr): void {
19
+ this.bytecodeCommitments.set(classId.toString(), commitment);
20
+ }
21
+
22
+ public getInstance(address: AztecAddress): ContractInstanceWithAddress | undefined {
23
+ return this.instances.get(address.toString());
24
+ }
25
+
26
+ public getClass(classId: Fr): ContractClassPublic | undefined {
27
+ return this.classes.get(classId.toString());
28
+ }
29
+
30
+ public getBytecodeCommitment(classId: Fr): Fr | undefined {
31
+ return this.bytecodeCommitments.get(classId.toString());
32
+ }
33
+
34
+ public deepCopy(): ContractsDbCheckpoint {
35
+ const copy = new ContractsDbCheckpoint();
36
+ this.instances.forEach((value, key) => copy.instances.set(key, value));
37
+ this.classes.forEach((value, key) => copy.classes.set(key, value));
38
+ this.bytecodeCommitments.forEach((value, key) => copy.bytecodeCommitments.set(key, value));
39
+ return copy;
40
+ }
41
+ }
@@ -1,4 +1,4 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { FunctionSelector } from '@aztec/stdlib/abi';
3
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
@@ -58,4 +58,19 @@ export interface PublicContractsDBInterface {
58
58
  * @returns The name of the function or undefined if not found.
59
59
  */
60
60
  getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
61
+
62
+ /**
63
+ * Creates a checkpoint of the current contract state.
64
+ */
65
+ createCheckpoint(): void;
66
+
67
+ /**
68
+ * Commits the current checkpoint, merging its state with the parent.
69
+ */
70
+ commitCheckpoint(): void;
71
+
72
+ /**
73
+ * Reverts the current checkpoint, discarding its state.
74
+ */
75
+ revertCheckpoint(): void;
61
76
  }
@@ -1,4 +1,4 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { FunctionSelector } from '@aztec/stdlib/abi';
3
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
 
@@ -16,3 +16,28 @@ export async function getPublicFunctionDebugName(
16
16
  const selector = FunctionSelector.fromField(calldata[0]);
17
17
  return (await db.getDebugFunctionName(contractAddress, selector)) ?? selector.toString();
18
18
  }
19
+
20
+ /**
21
+ * Get the function selector and optional debug name for a public function.
22
+ * Returns the selector and name separately, with name only populated if a debug name is available.
23
+ * @param db - The contracts database
24
+ * @param contractAddress - The contract address
25
+ * @param calldata - The calldata (selector is in calldata[0])
26
+ * @returns An object with functionSelector (always if calldata[0] exists) and functionName (only if debug name found)
27
+ */
28
+ export async function getPublicFunctionSelectorAndName(
29
+ db: PublicContractsDBInterface,
30
+ contractAddress: AztecAddress,
31
+ calldata: Fr[],
32
+ ): Promise<{ functionSelector?: FunctionSelector; functionName?: string }> {
33
+ // Public function is dispatched and therefore the target function is passed in the first argument.
34
+ if (!calldata[0]) {
35
+ return {};
36
+ }
37
+ const selector = FunctionSelector.fromField(calldata[0]);
38
+ const debugName = await db.getDebugFunctionName(contractAddress, selector);
39
+ return {
40
+ functionSelector: selector,
41
+ functionName: debugName ?? undefined,
42
+ };
43
+ }
@@ -1,4 +1,5 @@
1
1
  import type { RevertCode } from '@aztec/stdlib/avm';
2
+ import type { GasUsed } from '@aztec/stdlib/gas';
2
3
  import {
3
4
  Attributes,
4
5
  type Histogram,
@@ -70,7 +71,7 @@ export class ExecutorMetrics implements ExecutorMetricsInterface {
70
71
  // do nothing (unimplemented)
71
72
  }
72
73
 
73
- stopRecordingTxSimulation(_txLabel: string, _revertedCode?: RevertCode) {
74
+ stopRecordingTxSimulation(_txLabel: string, _gasUsed?: GasUsed, _revertedCode?: RevertCode) {
74
75
  // do nothing (unimplemented)
75
76
  }
76
77
 
@@ -1,8 +1,9 @@
1
1
  import type { RevertCode } from '@aztec/stdlib/avm';
2
+ import type { GasUsed } from '@aztec/stdlib/gas';
2
3
 
3
4
  export interface ExecutorMetricsInterface {
4
5
  startRecordingTxSimulation(txLabel: string): void;
5
- stopRecordingTxSimulation(txLabel: string, revertedCode?: RevertCode): void;
6
+ stopRecordingTxSimulation(txLabel: string, gasUsed?: GasUsed, revertedCode?: RevertCode): void;
6
7
  recordEnqueuedCallSimulation(fnName: string, durationMs: number, manaUsed: number, totalInstructions: number): void;
7
8
  recordEnqueuedCallSimulationFailure(
8
9
  fnName: string,
@@ -1,6 +1,6 @@
1
1
  import { GeneratorIndex } from '@aztec/constants';
2
- import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto';
3
- import { Fr } from '@aztec/foundation/fields';
2
+ import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
4
4
  import type { Logger } from '@aztec/foundation/log';
5
5
  import { Timer } from '@aztec/foundation/timer';
6
6
  import type { ContractArtifact } from '@aztec/stdlib/abi';
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { Logger } from '@aztec/foundation/log';
3
3
  import { Timer } from '@aztec/foundation/timer';
4
4
  import type { ContractArtifact } from '@aztec/stdlib/abi';
@@ -20,11 +20,19 @@ export async function bulkTest(
20
20
  avmTestContractArtifact,
21
21
  );
22
22
 
23
+ // Needed since we invoke the Fee Juice Contract in the bulk test.registerFeeJuiceContract
24
+ await tester.registerFeeJuiceContract();
25
+ // Register multiple different protocol contracts (to ensure we don't dedup bytecode hashing events):
26
+ await tester.registerAuthContract();
27
+ await tester.registerInstanceRegistryContract();
28
+
23
29
  // Get a deployed contract instance to pass to the contract
24
30
  // for it to use as "expected" values when testing contract instance retrieval.
25
31
  const expectContractInstance = avmTestContract;
26
32
  const argsField = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
27
- const argsU8 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
33
+ const argsU8 = [1, 2, 3, 4, 5, 6, 7, 8].map(x => new Fr(x));
34
+ argsU8.push(new Fr(2n ** 128n + 9n)); // Trigger truncation from large (> 128 bits) value (canonical decomposition event)
35
+ argsU8.push(new Fr(2n ** 125n + 10n)); // Trigger truncation from small (< 128 bits) value (no canonical decomposition event)
28
36
  const args = [
29
37
  argsField,
30
38
  argsU8,
@@ -45,6 +53,26 @@ export async function bulkTest(
45
53
  fnName: 'bulk_testing',
46
54
  args,
47
55
  },
56
+ // 3 calls creating calldata + asserting calldata copy:
57
+ {
58
+ address: avmTestContract.address,
59
+ fnName: 'assert_calldata_copy_large',
60
+ args: [Array.from({ length: 300 }, () => Fr.random()), /* with_selector: */ true],
61
+ },
62
+ {
63
+ address: avmTestContract.address,
64
+ fnName: 'assert_calldata_copy',
65
+ args: [argsField.slice(3), /* with_selector: */ true],
66
+ },
67
+ {
68
+ address: avmTestContract.address,
69
+ fnName: 'assert_calldata_copy_large',
70
+ args: [Array.from({ length: 300 }, () => Fr.random()), /* with_selector: */ true],
71
+ },
72
+ // 3 calls to external contracts
73
+ { address: avmTestContract.address, fnName: 'call_fee_juice', args: [] },
74
+ { address: avmTestContract.address, fnName: 'call_auth_registry', args: [] },
75
+ { address: avmTestContract.address, fnName: 'call_instance_registry', args: [] },
48
76
  ],
49
77
  /*teardownCall=*/ undefined,
50
78
  /*feePayer*/ undefined,
@@ -78,25 +106,22 @@ export async function megaBulkTest(
78
106
  deployer,
79
107
  avmTestContractArtifact,
80
108
  );
109
+
110
+ // Needed since we invoke the Fee Juice Contract in the bulk test.registerFeeJuiceContract
111
+ await tester.registerFeeJuiceContract();
112
+
81
113
  // Get a deployed contract instance to pass to the contract
82
114
  // for it to use as "expected" values when testing contract instance retrieval.
83
115
  const expectContractInstance = avmTestContract;
84
116
  const argsField0 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
85
- const argsField1 = [2, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
86
- const argsField2 = [3, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
87
- const argsField3 = [4, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
88
- const argsField4 = [5, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
89
- const argsField5 = [6, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
90
- const argsField6 = [7, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
91
- const argsField7 = [8, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
92
- const argsField8 = [9, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
93
- const argsField9 = [10, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
94
- const argsField10 = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
95
- const argsField11 = [12, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
96
- const argsField12 = [13, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
97
- const argsField13 = [14, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
98
- const argsField14 = [15, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
99
- const argsField15 = [16, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
117
+ const argsField1 = [3, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
118
+ const argsField2 = [5, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
119
+ const argsField3 = [7, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
120
+ const argsField4 = [9, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
121
+ const argsField5 = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
122
+ const argsField6 = [13, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
123
+ const argsField7 = [15, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
124
+ const argsField8 = [17, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
100
125
  const argsU8 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
101
126
  const genArgs = (argsField: Fr[]) => [
102
127
  argsField,
@@ -123,13 +148,6 @@ export async function megaBulkTest(
123
148
  { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField6) },
124
149
  { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField7) },
125
150
  { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField8) },
126
- { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField9) },
127
- { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField10) },
128
- { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField11) },
129
- { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField12) },
130
- { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField13) },
131
- { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField14) },
132
- { address: avmTestContract.address, fnName: 'bulk_testing', args: genArgs(argsField15) },
133
151
  ],
134
152
  /*teardownCall=*/ undefined,
135
153
  /*feePayer*/ undefined,
@@ -0,0 +1,49 @@
1
+ import { FunctionType, emptyContractArtifact, emptyFunctionArtifact } from '@aztec/stdlib/abi';
2
+ import type { PublicTxResult } from '@aztec/stdlib/avm';
3
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+
5
+ import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
6
+
7
+ /**
8
+ *
9
+ * Test custom bytecode (simulation or proving) with the provided bytecode.
10
+ * @param bytecode - The bytecode buffer to use
11
+ * @param tester - The tester to use (simulation or proving)
12
+ * @param txLabel - The label of the transaction
13
+ * @param contractName - The name of the contract (default: 'CustomBytecodeContract')
14
+ */
15
+ export async function testCustomBytecode(
16
+ bytecode: Buffer,
17
+ tester: PublicTxSimulationTester,
18
+ txLabel: string,
19
+ contractName: string = 'CustomBytecodeContract',
20
+ ): Promise<PublicTxResult> {
21
+ const deployer = AztecAddress.fromNumber(42);
22
+
23
+ const contractArtifact = emptyContractArtifact();
24
+ contractArtifact.name = contractName;
25
+ contractArtifact.functions = [emptyFunctionArtifact()];
26
+ contractArtifact.functions[0].name = 'public_dispatch';
27
+ contractArtifact.functions[0].functionType = FunctionType.PUBLIC;
28
+ contractArtifact.functions[0].bytecode = bytecode;
29
+
30
+ const testContract = await tester.registerAndDeployContract(
31
+ /*constructorArgs=*/ [],
32
+ deployer,
33
+ /*contractArtifact=*/ contractArtifact,
34
+ );
35
+
36
+ // EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
37
+ return await tester.executeTxWithLabel(
38
+ /*txLabel=*/ txLabel,
39
+ /*sender=*/ deployer,
40
+ /*setupCalls=*/ [],
41
+ /*appCalls=*/ [
42
+ {
43
+ address: testContract.address,
44
+ fnName: 'public_dispatch',
45
+ args: [],
46
+ },
47
+ ],
48
+ );
49
+ }