@aztec/pxe 0.0.1-commit.e6bd8901 → 0.0.1-commit.ec7ac5448

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 (257) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +5 -3
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +17 -5
  5. package/dest/config/index.d.ts +2 -2
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +1 -1
  8. package/dest/config/package_info.js +1 -1
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts +60 -31
  10. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  11. package/dest/contract_function_simulator/contract_function_simulator.js +201 -74
  12. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  13. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  14. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  15. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
  16. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
  18. package/dest/contract_function_simulator/index.d.ts +2 -1
  19. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/index.js +1 -0
  21. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
  22. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  23. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -10
  24. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
  25. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  26. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
  27. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
  29. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
  30. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -11
  32. package/dest/contract_function_simulator/oracle/interfaces.d.ts +62 -46
  33. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  34. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
  35. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
  36. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
  37. package/dest/contract_function_simulator/oracle/oracle.d.ts +75 -44
  38. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/oracle/oracle.js +310 -113
  40. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  41. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +53 -79
  42. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  43. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +109 -89
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +124 -67
  45. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  46. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +326 -140
  47. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  48. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  49. package/dest/contract_function_simulator/pick_notes.js +9 -2
  50. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  51. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  52. package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
  53. package/dest/contract_logging.d.ts +27 -0
  54. package/dest/contract_logging.d.ts.map +1 -0
  55. package/dest/contract_logging.js +38 -0
  56. package/dest/contract_sync/contract_sync_service.d.ts +44 -0
  57. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  58. package/dest/contract_sync/contract_sync_service.js +104 -0
  59. package/dest/contract_sync/helpers.d.ts +28 -0
  60. package/dest/contract_sync/helpers.d.ts.map +1 -0
  61. package/dest/contract_sync/{index.js → helpers.js} +20 -16
  62. package/dest/debug/pxe_debug_utils.d.ts +24 -10
  63. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  64. package/dest/debug/pxe_debug_utils.js +28 -18
  65. package/dest/entrypoints/client/bundle/index.d.ts +3 -1
  66. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  67. package/dest/entrypoints/client/bundle/index.js +2 -0
  68. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  69. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  70. package/dest/entrypoints/client/bundle/utils.js +23 -9
  71. package/dest/entrypoints/client/lazy/index.d.ts +3 -1
  72. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  73. package/dest/entrypoints/client/lazy/index.js +2 -0
  74. package/dest/entrypoints/client/lazy/utils.d.ts +3 -3
  75. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  76. package/dest/entrypoints/client/lazy/utils.js +24 -10
  77. package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
  78. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  79. package/dest/entrypoints/pxe_creation_options.js +3 -1
  80. package/dest/entrypoints/server/index.d.ts +4 -3
  81. package/dest/entrypoints/server/index.d.ts.map +1 -1
  82. package/dest/entrypoints/server/index.js +3 -2
  83. package/dest/entrypoints/server/utils.d.ts +2 -2
  84. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  85. package/dest/entrypoints/server/utils.js +30 -11
  86. package/dest/events/event_service.d.ts +5 -5
  87. package/dest/events/event_service.d.ts.map +1 -1
  88. package/dest/events/event_service.js +20 -9
  89. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  90. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  91. package/dest/job_coordinator/job_coordinator.js +3 -2
  92. package/dest/logs/log_service.d.ts +8 -9
  93. package/dest/logs/log_service.d.ts.map +1 -1
  94. package/dest/logs/log_service.js +38 -62
  95. package/dest/messages/message_context_service.d.ts +17 -0
  96. package/dest/messages/message_context_service.d.ts.map +1 -0
  97. package/dest/messages/message_context_service.js +36 -0
  98. package/dest/notes/note_service.d.ts +7 -8
  99. package/dest/notes/note_service.d.ts.map +1 -1
  100. package/dest/notes/note_service.js +23 -15
  101. package/dest/notes_filter.d.ts +24 -0
  102. package/dest/notes_filter.d.ts.map +1 -0
  103. package/dest/notes_filter.js +4 -0
  104. package/dest/oracle_version.d.ts +4 -3
  105. package/dest/oracle_version.d.ts.map +1 -1
  106. package/dest/oracle_version.js +20 -10
  107. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  108. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  109. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  110. package/dest/private_kernel/hints/index.d.ts +1 -1
  111. package/dest/private_kernel/hints/index.js +1 -1
  112. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  113. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  114. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  115. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  116. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  117. package/dest/private_kernel/hints/test_utils.js +203 -0
  118. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  119. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  120. package/dest/private_kernel/private_kernel_execution_prover.js +21 -13
  121. package/dest/private_kernel/private_kernel_oracle.d.ts +8 -4
  122. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  123. package/dest/private_kernel/private_kernel_oracle.js +7 -3
  124. package/dest/pxe.d.ts +73 -24
  125. package/dest/pxe.d.ts.map +1 -1
  126. package/dest/pxe.js +131 -78
  127. package/dest/storage/address_store/address_store.d.ts +1 -1
  128. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  129. package/dest/storage/address_store/address_store.js +12 -11
  130. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  131. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  132. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
  133. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  134. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  135. package/dest/storage/capsule_store/capsule_service.js +50 -0
  136. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  137. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  138. package/dest/storage/capsule_store/capsule_store.js +39 -36
  139. package/dest/storage/capsule_store/index.d.ts +2 -1
  140. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  141. package/dest/storage/capsule_store/index.js +1 -0
  142. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  143. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  144. package/dest/storage/contract_store/contract_store.js +157 -72
  145. package/dest/storage/metadata.d.ts +1 -1
  146. package/dest/storage/metadata.js +1 -1
  147. package/dest/storage/note_store/note_store.d.ts +13 -3
  148. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  149. package/dest/storage/note_store/note_store.js +147 -107
  150. package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
  151. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  152. package/dest/storage/private_event_store/private_event_store.js +84 -61
  153. package/dest/storage/private_event_store/stored_private_event.d.ts +4 -4
  154. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -1
  155. package/dest/storage/private_event_store/stored_private_event.js +2 -2
  156. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  157. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  158. package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
  159. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  160. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  161. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  162. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  163. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  164. package/dest/storage/tagging_store/sender_tagging_store.js +233 -137
  165. package/dest/tagging/get_all_logs_by_tags.d.ts +4 -4
  166. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  167. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  168. package/dest/tagging/index.d.ts +3 -3
  169. package/dest/tagging/index.d.ts.map +1 -1
  170. package/dest/tagging/index.js +1 -1
  171. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -6
  172. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  173. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +7 -7
  174. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  175. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +7 -8
  176. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  177. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  178. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -9
  179. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  180. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  181. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  182. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  183. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  184. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +6 -8
  185. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  186. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  187. package/package.json +25 -16
  188. package/src/bin/check_oracle_version.ts +4 -4
  189. package/src/block_synchronizer/block_synchronizer.ts +29 -19
  190. package/src/config/index.ts +1 -1
  191. package/src/config/package_info.ts +1 -1
  192. package/src/contract_function_simulator/contract_function_simulator.ts +360 -133
  193. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  194. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  195. package/src/contract_function_simulator/index.ts +1 -0
  196. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  197. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  198. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  199. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  200. package/src/contract_function_simulator/oracle/interfaces.ts +90 -62
  201. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  202. package/src/contract_function_simulator/oracle/oracle.ts +391 -150
  203. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  204. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +136 -187
  205. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +544 -174
  206. package/src/contract_function_simulator/pick_notes.ts +9 -2
  207. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  208. package/src/contract_logging.ts +52 -0
  209. package/src/contract_sync/contract_sync_service.ts +170 -0
  210. package/src/contract_sync/{index.ts → helpers.ts} +23 -25
  211. package/src/debug/pxe_debug_utils.ts +63 -19
  212. package/src/entrypoints/client/bundle/index.ts +2 -0
  213. package/src/entrypoints/client/bundle/utils.ts +18 -18
  214. package/src/entrypoints/client/lazy/index.ts +2 -0
  215. package/src/entrypoints/client/lazy/utils.ts +19 -18
  216. package/src/entrypoints/pxe_creation_options.ts +9 -1
  217. package/src/entrypoints/server/index.ts +3 -2
  218. package/src/entrypoints/server/utils.ts +24 -29
  219. package/src/events/event_service.ts +21 -10
  220. package/src/job_coordinator/job_coordinator.ts +4 -3
  221. package/src/logs/log_service.ts +72 -106
  222. package/src/messages/message_context_service.ts +44 -0
  223. package/src/notes/note_service.ts +24 -16
  224. package/src/notes_filter.ts +24 -0
  225. package/src/oracle_version.ts +20 -10
  226. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  227. package/src/private_kernel/hints/index.ts +1 -1
  228. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  229. package/src/private_kernel/hints/test_utils.ts +325 -0
  230. package/src/private_kernel/private_kernel_execution_prover.ts +25 -15
  231. package/src/private_kernel/private_kernel_oracle.ts +9 -9
  232. package/src/pxe.ts +243 -131
  233. package/src/storage/address_store/address_store.ts +15 -15
  234. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
  235. package/src/storage/capsule_store/capsule_service.ts +90 -0
  236. package/src/storage/capsule_store/capsule_store.ts +42 -34
  237. package/src/storage/capsule_store/index.ts +1 -0
  238. package/src/storage/contract_store/contract_store.ts +186 -76
  239. package/src/storage/metadata.ts +1 -1
  240. package/src/storage/note_store/note_store.ts +166 -132
  241. package/src/storage/private_event_store/private_event_store.ts +102 -81
  242. package/src/storage/private_event_store/stored_private_event.ts +3 -3
  243. package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
  244. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  245. package/src/storage/tagging_store/sender_tagging_store.ts +287 -156
  246. package/src/tagging/get_all_logs_by_tags.ts +31 -7
  247. package/src/tagging/index.ts +2 -2
  248. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +9 -12
  249. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  250. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +12 -17
  251. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +25 -12
  252. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  253. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +30 -29
  254. package/dest/contract_sync/index.d.ts +0 -23
  255. package/dest/contract_sync/index.d.ts.map +0 -1
  256. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  257. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
@@ -12,10 +12,12 @@ import {
12
12
  } from '@aztec/simulator/client';
13
13
  import { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
14
14
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
15
- import { L2BlockHash } from '@aztec/stdlib/block';
15
+ import { BlockHash } from '@aztec/stdlib/block';
16
16
  import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
17
17
 
18
+ import { ORACLE_VERSION_MAJOR, ORACLE_VERSION_MINOR } from '../../oracle_version.js';
18
19
  import type { IMiscOracle, IPrivateExecutionOracle, IUtilityExecutionOracle } from './interfaces.js';
20
+ import { buildLegacyOracleCallbacks } from './legacy_oracle_mappings.js';
19
21
  import { packAsHintedNote } from './note_packing_utils.js';
20
22
 
21
23
  export class UnavailableOracleError extends Error {
@@ -26,6 +28,25 @@ export class UnavailableOracleError extends Error {
26
28
 
27
29
  /**
28
30
  * A data source that has all the apis required by Aztec.nr.
31
+ *
32
+ * ## Oracle naming conventions
33
+ *
34
+ * We try to keep oracle naming consistent, please see below the conventions we adhere to.
35
+ *
36
+ * Each oracle method name has the form `aztec_{scope}_{verb}{Object}`, where:
37
+ *
38
+ * - **Scope prefix** indicates the execution context required:
39
+ * - `aztec_prv_` — available only during private function execution.
40
+ * - `aztec_utl_` — available during both utility and private execution.
41
+ *
42
+ * - **Verb** signals the operation's semantics (verb-first, then object):
43
+ * - `get` — read / lookup / get data from oracle into contract.
44
+ * - `does`/`is`/`has` — predicate (returns boolean).
45
+ * - `emit`/`notify` — propagate data from contract to oracle.
46
+ * - `set` — contract driven oracle state mutation (capsules, execution cache, tagging, etc).
47
+ * - `call` — trigger nested execution (control flow).
48
+ * - `assert` — validate a condition, throw on failure.
49
+ * - Standalone verbs (`delete`, `copy`, `decrypt`, `log`, etc) are used when no generic verb fits.
29
50
  */
30
51
  export class Oracle {
31
52
  constructor(private handler: IMiscOracle | IUtilityExecutionOracle | IPrivateExecutionOracle) {}
@@ -69,12 +90,12 @@ export class Oracle {
69
90
  name => !excludedProps.includes(name as (typeof excludedProps)[number]),
70
91
  );
71
92
 
72
- // Validate oracle names - these must be prefixed with either "private" or "utility" to indicate their scope
93
+ // Validate oracle names - these must be prefixed with either "aztec_prv_" or "aztec_utl_" to indicate their scope
73
94
  // and must correspond to a function on the Oracle class.
74
95
  oracleNames.forEach(name => {
75
- if (!name.startsWith('private') && !name.startsWith('utility')) {
96
+ if (!name.startsWith('aztec_prv_') && !name.startsWith('aztec_utl_')) {
76
97
  throw new Error(
77
- `Oracle function "${name}" must be prefixed with either "private" or "utility" to indicate its scope`,
98
+ `Oracle function "${name}" must be prefixed with either "aztec_prv_" or "aztec_utl_" to indicate its scope`,
78
99
  );
79
100
  }
80
101
 
@@ -85,48 +106,110 @@ export class Oracle {
85
106
  });
86
107
 
87
108
  // Build callback object and return it
88
- return oracleNames.reduce((acc, name) => {
109
+ const callback = oracleNames.reduce((acc, name) => {
89
110
  const method = this[name as keyof Omit<Oracle, (typeof excludedProps)[number]>];
90
111
  acc[name] = method.bind(this);
91
112
  return acc;
92
113
  }, {} as ACIRCallback);
114
+
115
+ const allCallbacks = { ...callback, ...buildLegacyOracleCallbacks(this) };
116
+
117
+ // Wrap in a Proxy to intercept access to missing oracle names and provide enhanced error messages when the
118
+ // contract's minor version is higher than the PXE's (i.e. the contract expects oracles that were added in a newer
119
+ // minor version).
120
+ const handler = this.handler;
121
+ return new Proxy(allCallbacks, {
122
+ get(target, prop: string) {
123
+ if (prop in target) {
124
+ return target[prop];
125
+ }
126
+ // Return a function that throws with an enhanced error message if applicable
127
+ return () => {
128
+ type NonOracleFunctionGetContractOracleVersion = {
129
+ nonOracleFunctionGetContractOracleVersion(): { major: number; minor: number } | undefined;
130
+ };
131
+
132
+ let contractVersion = undefined;
133
+ if ('nonOracleFunctionGetContractOracleVersion' in handler) {
134
+ contractVersion = (
135
+ handler as unknown as NonOracleFunctionGetContractOracleVersion
136
+ ).nonOracleFunctionGetContractOracleVersion();
137
+ }
138
+ if (!contractVersion) {
139
+ throw new Error(
140
+ `Oracle '${prop}' not found and the contract's oracle version is unknown (the version check oracle ` +
141
+ `was not called before '${prop}'). This usually means the contract was not compiled with the ` +
142
+ `#[aztec] macro, which injects the version check as the first oracle call in every private/utility ` +
143
+ `external function. If you're using a custom entry point, ensure assert_compatible_oracle_version() ` +
144
+ `is called before any other oracle calls. See https://docs.aztec.network/errors/8`,
145
+ );
146
+ } else if (contractVersion.minor > ORACLE_VERSION_MINOR) {
147
+ throw new Error(
148
+ `Oracle '${prop}' not found.` +
149
+ ` This usually means the contract requires a newer private execution environment than you have.` +
150
+ ` Upgrade your private execution environment to a compatible version. The contract was compiled with` +
151
+ ` Aztec.nr oracle version ${contractVersion.major}.${contractVersion.minor}, but this private` +
152
+ ` execution environment only supports up to ${ORACLE_VERSION_MAJOR}.${ORACLE_VERSION_MINOR}.` +
153
+ ` See https://docs.aztec.network/errors/8`,
154
+ );
155
+ } else {
156
+ throw new Error(
157
+ `Oracle '${prop}' not found.` +
158
+ ` The contract's oracle version (${contractVersion.major}.${contractVersion.minor}) is compatible` +
159
+ ` with this private execution environment (${ORACLE_VERSION_MAJOR}.${ORACLE_VERSION_MINOR}), so all` +
160
+ ` standard oracles should be available. This could mean the contract was compiled against a modified` +
161
+ ` version of Aztec.nr, or that it references an oracle that does not exist.` +
162
+ ` See https://docs.aztec.network/errors/8`,
163
+ );
164
+ }
165
+ };
166
+ },
167
+ });
93
168
  }
94
169
 
95
- utilityAssertCompatibleOracleVersion([version]: ACVMField[]) {
96
- this.handlerAsMisc().utilityAssertCompatibleOracleVersion(Fr.fromString(version).toNumber());
170
+ // eslint-disable-next-line camelcase
171
+ aztec_utl_assertCompatibleOracleVersionV2([major]: ACVMField[], [minor]: ACVMField[]) {
172
+ this.handlerAsMisc().assertCompatibleOracleVersion(
173
+ Fr.fromString(major).toNumber(),
174
+ Fr.fromString(minor).toNumber(),
175
+ );
97
176
  return Promise.resolve([]);
98
177
  }
99
178
 
100
- utilityGetRandomField(): Promise<ACVMField[]> {
101
- const val = this.handlerAsMisc().utilityGetRandomField();
179
+ // eslint-disable-next-line camelcase
180
+ aztec_utl_getRandomField(): Promise<ACVMField[]> {
181
+ const val = this.handlerAsMisc().getRandomField();
102
182
  return Promise.resolve([toACVMField(val)]);
103
183
  }
104
184
 
105
- privateStoreInExecutionCache(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
106
- this.handlerAsPrivate().privateStoreInExecutionCache(values.map(Fr.fromString), Fr.fromString(hash));
185
+ // eslint-disable-next-line camelcase
186
+ aztec_prv_setHashPreimage(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
187
+ this.handlerAsPrivate().setHashPreimage(values.map(Fr.fromString), Fr.fromString(hash));
107
188
  return Promise.resolve([]);
108
189
  }
109
190
 
110
- async privateLoadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
111
- const values = await this.handlerAsPrivate().privateLoadFromExecutionCache(Fr.fromString(returnsHash));
191
+ // eslint-disable-next-line camelcase
192
+ async aztec_prv_getHashPreimage([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
193
+ const values = await this.handlerAsPrivate().getHashPreimage(Fr.fromString(returnsHash));
112
194
  return [values.map(toACVMField)];
113
195
  }
114
196
 
115
- utilityGetUtilityContext(): Promise<(ACVMField | ACVMField[])[]> {
116
- const context = this.handlerAsUtility().utilityGetUtilityContext();
197
+ // eslint-disable-next-line camelcase
198
+ aztec_utl_getUtilityContext(): Promise<(ACVMField | ACVMField[])[]> {
199
+ const context = this.handlerAsUtility().getUtilityContext();
117
200
  return Promise.resolve(context.toNoirRepresentation());
118
201
  }
119
202
 
120
- async utilityGetKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
121
- const keyValidationRequest = await this.handlerAsUtility().utilityGetKeyValidationRequest(Fr.fromString(pkMHash));
203
+ // eslint-disable-next-line camelcase
204
+ async aztec_utl_getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
205
+ const keyValidationRequest = await this.handlerAsUtility().getKeyValidationRequest(Fr.fromString(pkMHash));
122
206
 
123
207
  return keyValidationRequest.toFields().map(toACVMField);
124
208
  }
125
209
 
126
- async utilityGetContractInstance([address]: ACVMField[]): Promise<ACVMField[]> {
127
- const instance = await this.handlerAsUtility().utilityGetContractInstance(
128
- AztecAddress.fromField(Fr.fromString(address)),
129
- );
210
+ // eslint-disable-next-line camelcase
211
+ async aztec_utl_getContractInstance([address]: ACVMField[]): Promise<ACVMField[]> {
212
+ const instance = await this.handlerAsUtility().getContractInstance(AztecAddress.fromField(Fr.fromString(address)));
130
213
 
131
214
  return [
132
215
  instance.salt,
@@ -137,45 +220,49 @@ export class Oracle {
137
220
  ].map(toACVMField);
138
221
  }
139
222
 
140
- async utilityGetNoteHashMembershipWitness(
141
- [blockHash]: ACVMField[],
142
- [leafValue]: ACVMField[],
223
+ // eslint-disable-next-line camelcase
224
+ async aztec_utl_getNoteHashMembershipWitness(
225
+ [anchorBlockHash]: ACVMField[],
226
+ [noteHash]: ACVMField[],
143
227
  ): Promise<(ACVMField | ACVMField[])[]> {
144
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
145
- const parsedLeafValue = Fr.fromString(leafValue);
228
+ const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
229
+ const parsedNoteHash = Fr.fromString(noteHash);
146
230
 
147
- const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(parsedBlockHash, parsedLeafValue);
231
+ const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(parsedAnchorBlockHash, parsedNoteHash);
148
232
  if (!witness) {
149
- throw new Error(`Leaf ${leafValue} not found in the note hash tree at block hash ${parsedBlockHash.toString()}.`);
233
+ throw new Error(
234
+ `Note hash ${noteHash} not found in the note hash tree at anchor block hash ${parsedAnchorBlockHash.toString()}.`,
235
+ );
150
236
  }
151
237
  return witness.toNoirRepresentation();
152
238
  }
153
239
 
154
- async utilityGetArchiveMembershipWitness(
240
+ // eslint-disable-next-line camelcase
241
+ async aztec_utl_getBlockHashMembershipWitness(
242
+ [anchorBlockHash]: ACVMField[],
155
243
  [blockHash]: ACVMField[],
156
- [leafValue]: ACVMField[],
157
244
  ): Promise<(ACVMField | ACVMField[])[]> {
158
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
159
- const parsedLeafValue = Fr.fromString(leafValue);
245
+ const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
246
+ const parsedBlockHash = BlockHash.fromString(blockHash);
160
247
 
161
- const witness = await this.handlerAsUtility().utilityGetArchiveMembershipWitness(parsedBlockHash, parsedLeafValue);
248
+ const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(parsedAnchorBlockHash, parsedBlockHash);
162
249
  if (!witness) {
163
- throw new Error(`Leaf ${leafValue} not found in the archive tree at block hash ${parsedBlockHash.toString()}.`);
250
+ throw new Error(
251
+ `Block hash ${parsedBlockHash.toString()} not found in the archive tree at anchor block ${parsedAnchorBlockHash.toString()}.`,
252
+ );
164
253
  }
165
254
  return witness.toNoirRepresentation();
166
255
  }
167
256
 
168
- async utilityGetNullifierMembershipWitness(
257
+ // eslint-disable-next-line camelcase
258
+ async aztec_utl_getNullifierMembershipWitness(
169
259
  [blockHash]: ACVMField[],
170
260
  [nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
171
261
  ): Promise<(ACVMField | ACVMField[])[]> {
172
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
262
+ const parsedBlockHash = BlockHash.fromString(blockHash);
173
263
  const parsedNullifier = Fr.fromString(nullifier);
174
264
 
175
- const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(
176
- parsedBlockHash,
177
- parsedNullifier,
178
- );
265
+ const witness = await this.handlerAsUtility().getNullifierMembershipWitness(parsedBlockHash, parsedNullifier);
179
266
  if (!witness) {
180
267
  throw new Error(
181
268
  `Nullifier witness not found for nullifier ${parsedNullifier} at block hash ${parsedBlockHash.toString()}.`,
@@ -184,17 +271,15 @@ export class Oracle {
184
271
  return witness.toNoirRepresentation();
185
272
  }
186
273
 
187
- async utilityGetLowNullifierMembershipWitness(
274
+ // eslint-disable-next-line camelcase
275
+ async aztec_utl_getLowNullifierMembershipWitness(
188
276
  [blockHash]: ACVMField[],
189
277
  [nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
190
278
  ): Promise<(ACVMField | ACVMField[])[]> {
191
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
279
+ const parsedBlockHash = BlockHash.fromString(blockHash);
192
280
  const parsedNullifier = Fr.fromString(nullifier);
193
281
 
194
- const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(
195
- parsedBlockHash,
196
- parsedNullifier,
197
- );
282
+ const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(parsedBlockHash, parsedNullifier);
198
283
  if (!witness) {
199
284
  throw new Error(
200
285
  `Low nullifier witness not found for nullifier ${parsedNullifier} at block hash ${parsedBlockHash.toString()}.`,
@@ -203,14 +288,15 @@ export class Oracle {
203
288
  return witness.toNoirRepresentation();
204
289
  }
205
290
 
206
- async utilityGetPublicDataWitness(
291
+ // eslint-disable-next-line camelcase
292
+ async aztec_utl_getPublicDataWitness(
207
293
  [blockHash]: ACVMField[],
208
294
  [leafSlot]: ACVMField[],
209
295
  ): Promise<(ACVMField | ACVMField[])[]> {
210
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
296
+ const parsedBlockHash = BlockHash.fromString(blockHash);
211
297
  const parsedLeafSlot = Fr.fromString(leafSlot);
212
298
 
213
- const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(parsedBlockHash, parsedLeafSlot);
299
+ const witness = await this.handlerAsUtility().getPublicDataWitness(parsedBlockHash, parsedLeafSlot);
214
300
  if (!witness) {
215
301
  throw new Error(
216
302
  `Public data witness not found for slot ${parsedLeafSlot} at block hash ${parsedBlockHash.toString()}.`,
@@ -219,34 +305,45 @@ export class Oracle {
219
305
  return witness.toNoirRepresentation();
220
306
  }
221
307
 
222
- async utilityGetBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
308
+ // eslint-disable-next-line camelcase
309
+ async aztec_utl_getBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
223
310
  const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
224
311
 
225
- const header = await this.handlerAsUtility().utilityGetBlockHeader(BlockNumber(parsedBlockNumber));
312
+ const header = await this.handlerAsUtility().getBlockHeader(BlockNumber(parsedBlockNumber));
226
313
  if (!header) {
227
314
  throw new Error(`Block header not found for block ${parsedBlockNumber}.`);
228
315
  }
229
316
  return header.toFields().map(toACVMField);
230
317
  }
231
318
 
232
- async utilityGetAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]> {
319
+ // eslint-disable-next-line camelcase
320
+ async aztec_utl_getAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]> {
233
321
  const messageHashField = Fr.fromString(messageHash);
234
- const witness = await this.handlerAsUtility().utilityGetAuthWitness(messageHashField);
322
+ const witness = await this.handlerAsUtility().getAuthWitness(messageHashField);
235
323
  if (!witness) {
236
324
  throw new Error(`Unknown auth witness for message hash ${messageHashField}`);
237
325
  }
238
326
  return [witness.map(toACVMField)];
239
327
  }
240
328
 
241
- async utilityGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]> {
329
+ // eslint-disable-next-line camelcase
330
+ async aztec_utl_getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
242
331
  const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
243
- const { publicKeys, partialAddress } =
244
- await this.handlerAsUtility().utilityGetPublicKeysAndPartialAddress(parsedAddress);
332
+ const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(parsedAddress);
245
333
 
246
- return [[...publicKeys.toFields(), partialAddress].map(toACVMField)];
334
+ // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
335
+ // with two fields: `some` (a boolean) and `value` (a field array in this case).
336
+ if (result === undefined) {
337
+ // No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
338
+ return [toACVMField(0), Array(13).fill(toACVMField(0))];
339
+ } else {
340
+ // Data was found so we set `some` to 1 and return it along with `value`.
341
+ return [toACVMField(1), [...result.publicKeys.toFields(), result.partialAddress].map(toACVMField)];
342
+ }
247
343
  }
248
344
 
249
- async utilityGetNotes(
345
+ // eslint-disable-next-line camelcase
346
+ async aztec_utl_getNotes(
250
347
  [ownerSome]: ACVMField[],
251
348
  [ownerValue]: ACVMField[],
252
349
  [storageSlot]: ACVMField[],
@@ -268,7 +365,7 @@ export class Oracle {
268
365
  ): Promise<(ACVMField | ACVMField[])[]> {
269
366
  // Parse Option<AztecAddress>: ownerSome is 0 for None, 1 for Some
270
367
  const owner = Fr.fromString(ownerSome).toNumber() === 1 ? AztecAddress.fromString(ownerValue) : undefined;
271
- const noteDatas = await this.handlerAsUtility().utilityGetNotes(
368
+ const noteDatas = await this.handlerAsUtility().getNotes(
272
369
  owner,
273
370
  Fr.fromString(storageSlot),
274
371
  +numSelects,
@@ -307,7 +404,8 @@ export class Oracle {
307
404
  return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedHintedNoteLength);
308
405
  }
309
406
 
310
- privateNotifyCreatedNote(
407
+ // eslint-disable-next-line camelcase
408
+ aztec_prv_notifyCreatedNote(
311
409
  [owner]: ACVMField[],
312
410
  [storageSlot]: ACVMField[],
313
411
  [randomness]: ACVMField[],
@@ -316,7 +414,7 @@ export class Oracle {
316
414
  [noteHash]: ACVMField[],
317
415
  [counter]: ACVMField[],
318
416
  ): Promise<ACVMField[]> {
319
- this.handlerAsPrivate().privateNotifyCreatedNote(
417
+ this.handlerAsPrivate().notifyCreatedNote(
320
418
  AztecAddress.fromString(owner),
321
419
  Fr.fromString(storageSlot),
322
420
  Fr.fromString(randomness),
@@ -328,43 +426,47 @@ export class Oracle {
328
426
  return Promise.resolve([]);
329
427
  }
330
428
 
331
- async privateNotifyNullifiedNote(
429
+ // eslint-disable-next-line camelcase
430
+ async aztec_prv_notifyNullifiedNote(
332
431
  [innerNullifier]: ACVMField[],
333
432
  [noteHash]: ACVMField[],
334
433
  [counter]: ACVMField[],
335
434
  ): Promise<ACVMField[]> {
336
- await this.handlerAsPrivate().privateNotifyNullifiedNote(
337
- Fr.fromString(innerNullifier),
338
- Fr.fromString(noteHash),
339
- +counter,
340
- );
435
+ await this.handlerAsPrivate().notifyNullifiedNote(Fr.fromString(innerNullifier), Fr.fromString(noteHash), +counter);
341
436
  return [];
342
437
  }
343
438
 
344
- async privateNotifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
345
- await this.handlerAsPrivate().privateNotifyCreatedNullifier(Fr.fromString(innerNullifier));
439
+ // eslint-disable-next-line camelcase
440
+ async aztec_prv_notifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
441
+ await this.handlerAsPrivate().notifyCreatedNullifier(Fr.fromString(innerNullifier));
346
442
  return [];
347
443
  }
348
444
 
349
- async privateIsNullifierPending([innerNullifier]: ACVMField[], [contractAddress]: ACVMField[]): Promise<ACVMField[]> {
350
- const isPending = await this.handlerAsPrivate().privateIsNullifierPending(
445
+ // eslint-disable-next-line camelcase
446
+ async aztec_prv_isNullifierPending(
447
+ [innerNullifier]: ACVMField[],
448
+ [contractAddress]: ACVMField[],
449
+ ): Promise<ACVMField[]> {
450
+ const isPending = await this.handlerAsPrivate().isNullifierPending(
351
451
  Fr.fromString(innerNullifier),
352
452
  AztecAddress.fromString(contractAddress),
353
453
  );
354
454
  return [toACVMField(isPending)];
355
455
  }
356
456
 
357
- async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
358
- const exists = await this.handlerAsUtility().utilityCheckNullifierExists(Fr.fromString(innerNullifier));
457
+ // eslint-disable-next-line camelcase
458
+ async aztec_utl_doesNullifierExist([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
459
+ const exists = await this.handlerAsUtility().doesNullifierExist(Fr.fromString(innerNullifier));
359
460
  return [toACVMField(exists)];
360
461
  }
361
462
 
362
- async utilityGetL1ToL2MembershipWitness(
463
+ // eslint-disable-next-line camelcase
464
+ async aztec_utl_getL1ToL2MembershipWitness(
363
465
  [contractAddress]: ACVMField[],
364
466
  [messageHash]: ACVMField[],
365
467
  [secret]: ACVMField[],
366
468
  ): Promise<(ACVMField | ACVMField[])[]> {
367
- const message = await this.handlerAsUtility().utilityGetL1ToL2MembershipWitness(
469
+ const message = await this.handlerAsUtility().getL1ToL2MembershipWitness(
368
470
  AztecAddress.fromString(contractAddress),
369
471
  Fr.fromString(messageHash),
370
472
  Fr.fromString(secret),
@@ -372,14 +474,15 @@ export class Oracle {
372
474
  return message.toNoirRepresentation();
373
475
  }
374
476
 
375
- async utilityStorageRead(
477
+ // eslint-disable-next-line camelcase
478
+ async aztec_utl_getFromPublicStorage(
376
479
  [blockHash]: ACVMField[],
377
480
  [contractAddress]: ACVMField[],
378
481
  [startStorageSlot]: ACVMField[],
379
482
  [numberOfElements]: ACVMField[],
380
483
  ): Promise<ACVMField[][]> {
381
- const values = await this.handlerAsUtility().utilityStorageRead(
382
- L2BlockHash.fromString(blockHash),
484
+ const values = await this.handlerAsUtility().getFromPublicStorage(
485
+ BlockHash.fromString(blockHash),
383
486
  new AztecAddress(Fr.fromString(contractAddress)),
384
487
  Fr.fromString(startStorageSlot),
385
488
  +numberOfElements,
@@ -387,7 +490,8 @@ export class Oracle {
387
490
  return [values.map(toACVMField)];
388
491
  }
389
492
 
390
- privateNotifyCreatedContractClassLog(
493
+ // eslint-disable-next-line camelcase
494
+ aztec_prv_notifyCreatedContractClassLog(
391
495
  [contractAddress]: ACVMField[],
392
496
  message: ACVMField[],
393
497
  [length]: ACVMField[],
@@ -396,11 +500,12 @@ export class Oracle {
396
500
  const logFields = new ContractClassLogFields(message.map(Fr.fromString));
397
501
  const log = new ContractClassLog(new AztecAddress(Fr.fromString(contractAddress)), logFields, +length);
398
502
 
399
- this.handlerAsPrivate().privateNotifyCreatedContractClassLog(log, +counter);
503
+ this.handlerAsPrivate().notifyCreatedContractClassLog(log, +counter);
400
504
  return Promise.resolve([]);
401
505
  }
402
506
 
403
- utilityDebugLog(
507
+ // eslint-disable-next-line camelcase
508
+ async aztec_utl_log(
404
509
  level: ACVMField[],
405
510
  message: ACVMField[],
406
511
  _ignoredFieldsSize: ACVMField[],
@@ -409,20 +514,21 @@ export class Oracle {
409
514
  const levelFr = Fr.fromString(level[0]);
410
515
  const messageStr = message.map(acvmField => String.fromCharCode(Fr.fromString(acvmField).toNumber())).join('');
411
516
  const fieldsFr = fields.map(Fr.fromString);
412
- this.handlerAsMisc().utilityDebugLog(levelFr.toNumber(), messageStr, fieldsFr);
413
- return Promise.resolve([]);
517
+ await this.handlerAsMisc().log(levelFr.toNumber(), messageStr, fieldsFr);
518
+ return [];
414
519
  }
415
520
 
416
521
  // This function's name is directly hardcoded in `circuit_recorder.ts`. Don't forget to update it there if you
417
522
  // change the name here.
418
- async privateCallPrivateFunction(
523
+ // eslint-disable-next-line camelcase
524
+ async aztec_prv_callPrivateFunction(
419
525
  [contractAddress]: ACVMField[],
420
526
  [functionSelector]: ACVMField[],
421
527
  [argsHash]: ACVMField[],
422
528
  [sideEffectCounter]: ACVMField[],
423
529
  [isStaticCall]: ACVMField[],
424
530
  ): Promise<ACVMField[][]> {
425
- const { endSideEffectCounter, returnsHash } = await this.handlerAsPrivate().privateCallPrivateFunction(
531
+ const { endSideEffectCounter, returnsHash } = await this.handlerAsPrivate().callPrivateFunction(
426
532
  AztecAddress.fromField(Fr.fromString(contractAddress)),
427
533
  FunctionSelector.fromField(Fr.fromString(functionSelector)),
428
534
  Fr.fromString(argsHash),
@@ -432,113 +538,165 @@ export class Oracle {
432
538
  return [[endSideEffectCounter, returnsHash].map(toACVMField)];
433
539
  }
434
540
 
435
- async privateNotifyEnqueuedPublicFunctionCall(
436
- [contractAddress]: ACVMField[],
437
- [calldataHash]: ACVMField[],
438
- [sideEffectCounter]: ACVMField[],
439
- [isStaticCall]: ACVMField[],
440
- ): Promise<ACVMField[]> {
441
- await this.handlerAsPrivate().privateNotifyEnqueuedPublicFunctionCall(
442
- AztecAddress.fromString(contractAddress),
443
- Fr.fromString(calldataHash),
444
- Fr.fromString(sideEffectCounter).toNumber(),
445
- Fr.fromString(isStaticCall).toBool(),
446
- );
541
+ // eslint-disable-next-line camelcase
542
+ async aztec_prv_assertValidPublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
543
+ await this.handlerAsPrivate().assertValidPublicCalldata(Fr.fromString(calldataHash));
447
544
  return [];
448
545
  }
449
546
 
450
- async privateNotifySetPublicTeardownFunctionCall(
451
- [contractAddress]: ACVMField[],
452
- [calldataHash]: ACVMField[],
453
- [sideEffectCounter]: ACVMField[],
454
- [isStaticCall]: ACVMField[],
455
- ): Promise<ACVMField[]> {
456
- await this.handlerAsPrivate().privateNotifySetPublicTeardownFunctionCall(
457
- AztecAddress.fromString(contractAddress),
458
- Fr.fromString(calldataHash),
459
- Fr.fromString(sideEffectCounter).toNumber(),
460
- Fr.fromString(isStaticCall).toBool(),
461
- );
462
- return [];
463
- }
464
-
465
- async privateNotifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<
466
- ACVMField[]
467
- > {
468
- await this.handlerAsPrivate().privateNotifySetMinRevertibleSideEffectCounter(
469
- Fr.fromString(minRevertibleSideEffectCounter).toNumber(),
470
- );
547
+ // eslint-disable-next-line camelcase
548
+ async aztec_prv_notifyRevertiblePhaseStart([minRevertibleSideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
549
+ await this.handlerAsPrivate().notifyRevertiblePhaseStart(Fr.fromString(minRevertibleSideEffectCounter).toNumber());
471
550
  return Promise.resolve([]);
472
551
  }
473
552
 
474
- async privateIsSideEffectCounterRevertible([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
475
- const isRevertible = await this.handlerAsPrivate().privateIsSideEffectCounterRevertible(
553
+ // eslint-disable-next-line camelcase
554
+ async aztec_prv_isExecutionInRevertiblePhase([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
555
+ const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(
476
556
  Fr.fromString(sideEffectCounter).toNumber(),
477
557
  );
478
558
  return Promise.resolve([toACVMField(isRevertible)]);
479
559
  }
480
560
 
481
- async privateGetNextAppTagAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
482
- const tag = await this.handlerAsPrivate().privateGetNextAppTagAsSender(
561
+ // eslint-disable-next-line camelcase
562
+ async aztec_prv_getNextAppTagAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
563
+ const tag = await this.handlerAsPrivate().getNextAppTagAsSender(
483
564
  AztecAddress.fromString(sender),
484
565
  AztecAddress.fromString(recipient),
485
566
  );
486
567
  return [toACVMField(tag.value)];
487
568
  }
488
569
 
489
- async utilityFetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
490
- await this.handlerAsUtility().utilityFetchTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot));
570
+ // eslint-disable-next-line camelcase
571
+ async aztec_utl_getPendingTaggedLogs(
572
+ [pendingTaggedLogArrayBaseSlot]: ACVMField[],
573
+ [scope]: ACVMField[],
574
+ ): Promise<ACVMField[]> {
575
+ await this.handlerAsUtility().getPendingTaggedLogs(
576
+ Fr.fromString(pendingTaggedLogArrayBaseSlot),
577
+ AztecAddress.fromString(scope),
578
+ );
491
579
  return [];
492
580
  }
493
581
 
494
- async utilityValidateAndStoreEnqueuedNotesAndEvents(
582
+ // eslint-disable-next-line camelcase
583
+ async aztec_utl_getPendingTaggedLogs_v2([scope]: ACVMField[]): Promise<ACVMField[]> {
584
+ const slot = await this.handlerAsUtility().getPendingTaggedLogsV2(AztecAddress.fromString(scope));
585
+ return [toACVMField(slot)];
586
+ }
587
+
588
+ // eslint-disable-next-line camelcase
589
+ async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(
495
590
  [contractAddress]: ACVMField[],
496
591
  [noteValidationRequestsArrayBaseSlot]: ACVMField[],
497
592
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
593
+ [maxNotePackedLen]: ACVMField[],
594
+ [maxEventSerializedLen]: ACVMField[],
595
+ [scope]: ACVMField[],
498
596
  ): Promise<ACVMField[]> {
499
- await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(
597
+ await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
500
598
  AztecAddress.fromString(contractAddress),
501
599
  Fr.fromString(noteValidationRequestsArrayBaseSlot),
502
600
  Fr.fromString(eventValidationRequestsArrayBaseSlot),
601
+ Fr.fromString(maxNotePackedLen).toNumber(),
602
+ Fr.fromString(maxEventSerializedLen).toNumber(),
603
+ AztecAddress.fromString(scope),
503
604
  );
504
605
 
505
606
  return [];
506
607
  }
507
608
 
508
- async utilityBulkRetrieveLogs(
609
+ // eslint-disable-next-line camelcase
610
+ async aztec_utl_validateAndStoreEnqueuedNotesAndEvents_v2(
611
+ [noteValidationRequestsArrayBaseSlot]: ACVMField[],
612
+ [eventValidationRequestsArrayBaseSlot]: ACVMField[],
613
+ [maxNotePackedLen]: ACVMField[],
614
+ [maxEventSerializedLen]: ACVMField[],
615
+ [scope]: ACVMField[],
616
+ ): Promise<ACVMField[]> {
617
+ await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEventsV2(
618
+ Fr.fromString(noteValidationRequestsArrayBaseSlot),
619
+ Fr.fromString(eventValidationRequestsArrayBaseSlot),
620
+ Fr.fromString(maxNotePackedLen).toNumber(),
621
+ Fr.fromString(maxEventSerializedLen).toNumber(),
622
+ AztecAddress.fromString(scope),
623
+ );
624
+ return [];
625
+ }
626
+
627
+ // eslint-disable-next-line camelcase
628
+ async aztec_utl_getLogsByTag(
509
629
  [contractAddress]: ACVMField[],
510
630
  [logRetrievalRequestsArrayBaseSlot]: ACVMField[],
511
631
  [logRetrievalResponsesArrayBaseSlot]: ACVMField[],
632
+ [scope]: ACVMField[],
512
633
  ): Promise<ACVMField[]> {
513
- await this.handlerAsUtility().utilityBulkRetrieveLogs(
634
+ await this.handlerAsUtility().getLogsByTag(
514
635
  AztecAddress.fromString(contractAddress),
515
636
  Fr.fromString(logRetrievalRequestsArrayBaseSlot),
516
637
  Fr.fromString(logRetrievalResponsesArrayBaseSlot),
638
+ AztecAddress.fromString(scope),
517
639
  );
518
640
  return [];
519
641
  }
520
642
 
521
- async utilityStoreCapsule(
643
+ // eslint-disable-next-line camelcase
644
+ async aztec_utl_getMessageContextsByTxHash(
645
+ [contractAddress]: ACVMField[],
646
+ [messageContextRequestsArrayBaseSlot]: ACVMField[],
647
+ [messageContextResponsesArrayBaseSlot]: ACVMField[],
648
+ [scope]: ACVMField[],
649
+ ): Promise<ACVMField[]> {
650
+ await this.handlerAsUtility().getMessageContextsByTxHash(
651
+ AztecAddress.fromString(contractAddress),
652
+ Fr.fromString(messageContextRequestsArrayBaseSlot),
653
+ Fr.fromString(messageContextResponsesArrayBaseSlot),
654
+ AztecAddress.fromString(scope),
655
+ );
656
+ return [];
657
+ }
658
+
659
+ // eslint-disable-next-line camelcase
660
+ async aztec_utl_getLogsByTag_v2([requestArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
661
+ const responseSlot = await this.handlerAsUtility().getLogsByTagV2(Fr.fromString(requestArrayBaseSlot));
662
+ return [toACVMField(responseSlot)];
663
+ }
664
+
665
+ // eslint-disable-next-line camelcase
666
+ async aztec_utl_getMessageContextsByTxHash_v2([requestArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
667
+ const responseSlot = await this.handlerAsUtility().getMessageContextsByTxHashV2(
668
+ Fr.fromString(requestArrayBaseSlot),
669
+ );
670
+ return [toACVMField(responseSlot)];
671
+ }
672
+
673
+ // eslint-disable-next-line camelcase
674
+ aztec_utl_setCapsule(
522
675
  [contractAddress]: ACVMField[],
523
676
  [slot]: ACVMField[],
524
677
  capsule: ACVMField[],
678
+ [scope]: ACVMField[],
525
679
  ): Promise<ACVMField[]> {
526
- await this.handlerAsUtility().utilityStoreCapsule(
680
+ this.handlerAsUtility().setCapsule(
527
681
  AztecAddress.fromField(Fr.fromString(contractAddress)),
528
682
  Fr.fromString(slot),
529
683
  capsule.map(Fr.fromString),
684
+ AztecAddress.fromField(Fr.fromString(scope)),
530
685
  );
531
- return [];
686
+ return Promise.resolve([]);
532
687
  }
533
688
 
534
- async utilityLoadCapsule(
689
+ // eslint-disable-next-line camelcase
690
+ async aztec_utl_getCapsule(
535
691
  [contractAddress]: ACVMField[],
536
692
  [slot]: ACVMField[],
537
693
  [tSize]: ACVMField[],
694
+ [scope]: ACVMField[],
538
695
  ): Promise<(ACVMField | ACVMField[])[]> {
539
- const values = await this.handlerAsUtility().utilityLoadCapsule(
696
+ const values = await this.handlerAsUtility().getCapsule(
540
697
  AztecAddress.fromField(Fr.fromString(contractAddress)),
541
698
  Fr.fromString(slot),
699
+ AztecAddress.fromField(Fr.fromString(scope)),
542
700
  );
543
701
 
544
702
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
@@ -552,30 +710,86 @@ export class Oracle {
552
710
  }
553
711
  }
554
712
 
555
- async utilityDeleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
556
- await this.handlerAsUtility().utilityDeleteCapsule(
713
+ // eslint-disable-next-line camelcase
714
+ aztec_utl_deleteCapsule(
715
+ [contractAddress]: ACVMField[],
716
+ [slot]: ACVMField[],
717
+ [scope]: ACVMField[],
718
+ ): Promise<ACVMField[]> {
719
+ this.handlerAsUtility().deleteCapsule(
557
720
  AztecAddress.fromField(Fr.fromString(contractAddress)),
558
721
  Fr.fromString(slot),
722
+ AztecAddress.fromField(Fr.fromString(scope)),
559
723
  );
560
- return [];
724
+ return Promise.resolve([]);
561
725
  }
562
726
 
563
- async utilityCopyCapsule(
727
+ // eslint-disable-next-line camelcase
728
+ async aztec_utl_copyCapsule(
564
729
  [contractAddress]: ACVMField[],
565
730
  [srcSlot]: ACVMField[],
566
731
  [dstSlot]: ACVMField[],
567
732
  [numEntries]: ACVMField[],
733
+ [scope]: ACVMField[],
568
734
  ): Promise<ACVMField[]> {
569
- await this.handlerAsUtility().utilityCopyCapsule(
735
+ await this.handlerAsUtility().copyCapsule(
570
736
  AztecAddress.fromField(Fr.fromString(contractAddress)),
571
737
  Fr.fromString(srcSlot),
572
738
  Fr.fromString(dstSlot),
573
739
  Fr.fromString(numEntries).toNumber(),
740
+ AztecAddress.fromField(Fr.fromString(scope)),
574
741
  );
575
742
  return [];
576
743
  }
577
744
 
578
- async utilityAes128Decrypt(
745
+ // eslint-disable-next-line camelcase
746
+ aztec_utl_pushEphemeral([slot]: ACVMField[], elements: ACVMField[]): Promise<ACVMField[]> {
747
+ const newLen = this.handlerAsUtility().pushEphemeral(Fr.fromString(slot), elements.map(Fr.fromString));
748
+ return Promise.resolve([toACVMField(newLen)]);
749
+ }
750
+
751
+ // eslint-disable-next-line camelcase
752
+ aztec_utl_popEphemeral([slot]: ACVMField[]): Promise<ACVMField[][]> {
753
+ const element = this.handlerAsUtility().popEphemeral(Fr.fromString(slot));
754
+ return Promise.resolve([element.map(toACVMField)]);
755
+ }
756
+
757
+ // eslint-disable-next-line camelcase
758
+ aztec_utl_getEphemeral([slot]: ACVMField[], [index]: ACVMField[]): Promise<ACVMField[][]> {
759
+ const element = this.handlerAsUtility().getEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber());
760
+ return Promise.resolve([element.map(toACVMField)]);
761
+ }
762
+
763
+ // eslint-disable-next-line camelcase
764
+ aztec_utl_setEphemeral([slot]: ACVMField[], [index]: ACVMField[], elements: ACVMField[]): Promise<ACVMField[]> {
765
+ this.handlerAsUtility().setEphemeral(
766
+ Fr.fromString(slot),
767
+ Fr.fromString(index).toNumber(),
768
+ elements.map(Fr.fromString),
769
+ );
770
+ return Promise.resolve([]);
771
+ }
772
+
773
+ // eslint-disable-next-line camelcase
774
+ aztec_utl_getEphemeralLen([slot]: ACVMField[]): Promise<ACVMField[]> {
775
+ const len = this.handlerAsUtility().getEphemeralLen(Fr.fromString(slot));
776
+ return Promise.resolve([toACVMField(len)]);
777
+ }
778
+
779
+ // eslint-disable-next-line camelcase
780
+ aztec_utl_removeEphemeral([slot]: ACVMField[], [index]: ACVMField[]): Promise<ACVMField[]> {
781
+ this.handlerAsUtility().removeEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber());
782
+ return Promise.resolve([]);
783
+ }
784
+
785
+ // eslint-disable-next-line camelcase
786
+ aztec_utl_clearEphemeral([slot]: ACVMField[]): Promise<ACVMField[]> {
787
+ this.handlerAsUtility().clearEphemeral(Fr.fromString(slot));
788
+ return Promise.resolve([]);
789
+ }
790
+
791
+ // eslint-disable-next-line camelcase
792
+ async aztec_utl_decryptAes128(
579
793
  ciphertextBVecStorage: ACVMField[],
580
794
  [ciphertextLength]: ACVMField[],
581
795
  iv: ACVMField[],
@@ -585,36 +799,63 @@ export class Oracle {
585
799
  const ivBuffer = fromUintArray(iv, 8);
586
800
  const symKeyBuffer = fromUintArray(symKey, 8);
587
801
 
588
- const plaintext = await this.handlerAsUtility().utilityAes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
589
- return bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
802
+ // Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
803
+ try {
804
+ const plaintext = await this.handlerAsUtility().decryptAes128(ciphertext, ivBuffer, symKeyBuffer);
805
+ const [storage, length] = bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
806
+ return [toACVMField(1), storage, length];
807
+ } catch {
808
+ const zeroStorage = Array(ciphertextBVecStorage.length).fill(toACVMField(0));
809
+ return [toACVMField(0), zeroStorage, toACVMField(0)];
810
+ }
590
811
  }
591
812
 
592
- async utilityGetSharedSecret(
813
+ // eslint-disable-next-line camelcase
814
+ async aztec_utl_getSharedSecret(
593
815
  [address]: ACVMField[],
594
816
  [ephPKField0]: ACVMField[],
595
817
  [ephPKField1]: ACVMField[],
596
818
  [ephPKField2]: ACVMField[],
819
+ [contractAddress]: ACVMField[],
597
820
  ): Promise<ACVMField[]> {
598
- const secret = await this.handlerAsUtility().utilityGetSharedSecret(
821
+ const secret = await this.handlerAsUtility().getSharedSecret(
599
822
  AztecAddress.fromField(Fr.fromString(address)),
600
823
  Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
824
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
601
825
  );
602
- return secret.toFields().map(toACVMField);
826
+ return [toACVMField(secret)];
827
+ }
828
+
829
+ // eslint-disable-next-line camelcase
830
+ aztec_utl_setContractSyncCacheInvalid(
831
+ [contractAddress]: ACVMField[],
832
+ scopes: ACVMField[],
833
+ [scopeCount]: ACVMField[],
834
+ ): Promise<ACVMField[]> {
835
+ const scopeAddresses = scopes.slice(0, +scopeCount).map(s => AztecAddress.fromField(Fr.fromString(s)));
836
+ this.handlerAsUtility().setContractSyncCacheInvalid(
837
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
838
+ scopeAddresses,
839
+ );
840
+ return Promise.resolve([]);
603
841
  }
604
842
 
605
- async utilityEmitOffchainEffect(data: ACVMField[]) {
606
- await this.handlerAsPrivate().utilityEmitOffchainEffect(data.map(Fr.fromString));
843
+ // eslint-disable-next-line camelcase
844
+ async aztec_utl_emitOffchainEffect(data: ACVMField[]) {
845
+ await this.handlerAsUtility().emitOffchainEffect(data.map(Fr.fromString));
607
846
  return [];
608
847
  }
609
848
 
610
- async privateGetSenderForTags(): Promise<ACVMField[]> {
611
- const sender = await this.handlerAsPrivate().privateGetSenderForTags();
849
+ // eslint-disable-next-line camelcase
850
+ async aztec_prv_getSenderForTags(): Promise<ACVMField[]> {
851
+ const sender = await this.handlerAsPrivate().getSenderForTags();
612
852
  // Return [1, address] for Some(address), [0, 0] for None
613
853
  return sender ? [toACVMField(1n), toACVMField(sender)] : [toACVMField(0n), toACVMField(0n)];
614
854
  }
615
855
 
616
- async privateSetSenderForTags([senderForTags]: ACVMField[]): Promise<ACVMField[]> {
617
- await this.handlerAsPrivate().privateSetSenderForTags(AztecAddress.fromField(Fr.fromString(senderForTags)));
856
+ // eslint-disable-next-line camelcase
857
+ async aztec_prv_setSenderForTags([senderForTags]: ACVMField[]): Promise<ACVMField[]> {
858
+ await this.handlerAsPrivate().setSenderForTags(AztecAddress.fromField(Fr.fromString(senderForTags)));
618
859
  return [];
619
860
  }
620
861
  }