@aztec/pxe 0.0.1-commit.9372f48 → 0.0.1-commit.949a33fd8

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 (248) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
  3. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
  4. package/dest/block_synchronizer/block_stream_source.js +37 -0
  5. package/dest/block_synchronizer/block_synchronizer.d.ts +9 -3
  6. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  7. package/dest/block_synchronizer/block_synchronizer.js +37 -11
  8. package/dest/config/index.d.ts +2 -2
  9. package/dest/config/index.d.ts.map +1 -1
  10. package/dest/config/index.js +8 -15
  11. package/dest/config/package_info.js +1 -1
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts +63 -29
  13. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  14. package/dest/contract_function_simulator/contract_function_simulator.js +207 -75
  15. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  16. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  17. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  18. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
  19. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
  21. package/dest/contract_function_simulator/index.d.ts +2 -1
  22. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  23. package/dest/contract_function_simulator/index.js +1 -0
  24. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
  25. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  26. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -10
  27. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
  28. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  29. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
  30. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
  32. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
  33. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  34. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -11
  35. package/dest/contract_function_simulator/oracle/interfaces.d.ts +63 -45
  36. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  37. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
  38. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
  39. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
  40. package/dest/contract_function_simulator/oracle/oracle.d.ts +76 -44
  41. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/oracle.js +307 -103
  43. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  44. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +58 -84
  45. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  46. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +122 -96
  47. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +126 -66
  48. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  49. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +366 -134
  50. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  51. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  52. package/dest/contract_function_simulator/pick_notes.js +20 -3
  53. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  54. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  55. package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
  56. package/dest/contract_logging.d.ts +27 -0
  57. package/dest/contract_logging.d.ts.map +1 -0
  58. package/dest/contract_logging.js +38 -0
  59. package/dest/contract_sync/contract_sync_service.d.ts +44 -0
  60. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  61. package/dest/contract_sync/contract_sync_service.js +116 -0
  62. package/dest/contract_sync/helpers.d.ts +28 -0
  63. package/dest/contract_sync/helpers.d.ts.map +1 -0
  64. package/dest/contract_sync/{index.js → helpers.js} +19 -13
  65. package/dest/debug/pxe_debug_utils.d.ts +14 -10
  66. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  67. package/dest/debug/pxe_debug_utils.js +16 -15
  68. package/dest/entrypoints/client/bundle/index.d.ts +3 -1
  69. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  70. package/dest/entrypoints/client/bundle/index.js +2 -0
  71. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  72. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  73. package/dest/entrypoints/client/bundle/utils.js +11 -3
  74. package/dest/entrypoints/client/lazy/index.d.ts +3 -1
  75. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  76. package/dest/entrypoints/client/lazy/index.js +2 -0
  77. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  78. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  79. package/dest/entrypoints/client/lazy/utils.js +11 -3
  80. package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
  81. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  82. package/dest/entrypoints/pxe_creation_options.js +3 -1
  83. package/dest/entrypoints/server/index.d.ts +4 -3
  84. package/dest/entrypoints/server/index.d.ts.map +1 -1
  85. package/dest/entrypoints/server/index.js +3 -2
  86. package/dest/entrypoints/server/utils.d.ts +2 -2
  87. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  88. package/dest/entrypoints/server/utils.js +11 -3
  89. package/dest/events/event_service.d.ts +3 -2
  90. package/dest/events/event_service.d.ts.map +1 -1
  91. package/dest/events/event_service.js +26 -5
  92. package/dest/events/private_event_filter_validator.d.ts +3 -2
  93. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  94. package/dest/events/private_event_filter_validator.js +15 -0
  95. package/dest/logs/log_service.d.ts +7 -7
  96. package/dest/logs/log_service.d.ts.map +1 -1
  97. package/dest/logs/log_service.js +34 -51
  98. package/dest/messages/message_context_service.d.ts +17 -0
  99. package/dest/messages/message_context_service.d.ts.map +1 -0
  100. package/dest/messages/message_context_service.js +36 -0
  101. package/dest/notes/note_service.d.ts +4 -4
  102. package/dest/notes/note_service.d.ts.map +1 -1
  103. package/dest/notes/note_service.js +17 -7
  104. package/dest/notes_filter.d.ts +24 -0
  105. package/dest/notes_filter.d.ts.map +1 -0
  106. package/dest/notes_filter.js +4 -0
  107. package/dest/oracle_version.d.ts +4 -3
  108. package/dest/oracle_version.d.ts.map +1 -1
  109. package/dest/oracle_version.js +20 -10
  110. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  111. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  112. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  113. package/dest/private_kernel/hints/index.d.ts +1 -1
  114. package/dest/private_kernel/hints/index.js +1 -1
  115. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  116. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  117. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  118. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  119. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  120. package/dest/private_kernel/hints/test_utils.js +203 -0
  121. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  122. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  123. package/dest/private_kernel/private_kernel_execution_prover.js +18 -13
  124. package/dest/private_kernel/private_kernel_oracle.d.ts +10 -6
  125. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  126. package/dest/private_kernel/private_kernel_oracle.js +19 -18
  127. package/dest/pxe.d.ts +85 -24
  128. package/dest/pxe.d.ts.map +1 -1
  129. package/dest/pxe.js +165 -84
  130. package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
  131. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  132. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  133. package/dest/storage/capsule_store/capsule_service.js +50 -0
  134. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  135. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  136. package/dest/storage/capsule_store/capsule_store.js +36 -28
  137. package/dest/storage/capsule_store/index.d.ts +2 -1
  138. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  139. package/dest/storage/capsule_store/index.js +1 -0
  140. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  141. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  142. package/dest/storage/contract_store/contract_store.js +148 -70
  143. package/dest/storage/metadata.d.ts +1 -1
  144. package/dest/storage/metadata.js +1 -1
  145. package/dest/storage/note_store/note_store.d.ts +3 -3
  146. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  147. package/dest/storage/note_store/note_store.js +6 -4
  148. package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
  149. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  150. package/dest/storage/private_event_store/private_event_store.js +3 -0
  151. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  152. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  153. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  154. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  155. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  156. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  157. package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
  158. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  159. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  160. package/dest/tagging/index.d.ts +3 -3
  161. package/dest/tagging/index.d.ts.map +1 -1
  162. package/dest/tagging/index.js +1 -1
  163. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
  164. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  165. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +8 -22
  166. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  167. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
  168. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  169. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  170. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
  171. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  172. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  173. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  174. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  175. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  176. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  177. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  178. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  179. package/package.json +25 -16
  180. package/src/bin/check_oracle_version.ts +4 -4
  181. package/src/block_synchronizer/block_stream_source.ts +52 -0
  182. package/src/block_synchronizer/block_synchronizer.ts +39 -11
  183. package/src/config/index.ts +3 -9
  184. package/src/config/package_info.ts +1 -1
  185. package/src/contract_function_simulator/contract_function_simulator.ts +367 -136
  186. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  187. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  188. package/src/contract_function_simulator/index.ts +1 -0
  189. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  190. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  191. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  192. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  193. package/src/contract_function_simulator/oracle/interfaces.ts +91 -53
  194. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  195. package/src/contract_function_simulator/oracle/oracle.ts +387 -142
  196. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  197. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +154 -185
  198. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +610 -165
  199. package/src/contract_function_simulator/pick_notes.ts +22 -3
  200. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  201. package/src/contract_logging.ts +52 -0
  202. package/src/contract_sync/contract_sync_service.ts +176 -0
  203. package/src/contract_sync/{index.ts → helpers.ts} +22 -22
  204. package/src/debug/pxe_debug_utils.ts +48 -18
  205. package/src/entrypoints/client/bundle/index.ts +2 -0
  206. package/src/entrypoints/client/bundle/utils.ts +11 -4
  207. package/src/entrypoints/client/lazy/index.ts +2 -0
  208. package/src/entrypoints/client/lazy/utils.ts +11 -4
  209. package/src/entrypoints/pxe_creation_options.ts +7 -0
  210. package/src/entrypoints/server/index.ts +3 -2
  211. package/src/entrypoints/server/utils.ts +9 -10
  212. package/src/events/event_service.ts +30 -5
  213. package/src/events/private_event_filter_validator.ts +21 -1
  214. package/src/logs/log_service.ts +64 -92
  215. package/src/messages/message_context_service.ts +44 -0
  216. package/src/notes/note_service.ts +19 -8
  217. package/src/notes_filter.ts +24 -0
  218. package/src/oracle_version.ts +20 -10
  219. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  220. package/src/private_kernel/hints/index.ts +1 -1
  221. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  222. package/src/private_kernel/hints/test_utils.ts +325 -0
  223. package/src/private_kernel/private_kernel_execution_prover.ts +18 -16
  224. package/src/private_kernel/private_kernel_oracle.ts +21 -21
  225. package/src/pxe.ts +305 -138
  226. package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
  227. package/src/storage/capsule_store/capsule_service.ts +90 -0
  228. package/src/storage/capsule_store/capsule_store.ts +44 -26
  229. package/src/storage/capsule_store/index.ts +1 -0
  230. package/src/storage/contract_store/contract_store.ts +181 -80
  231. package/src/storage/metadata.ts +1 -1
  232. package/src/storage/note_store/note_store.ts +9 -5
  233. package/src/storage/private_event_store/private_event_store.ts +4 -0
  234. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  235. package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
  236. package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
  237. package/src/tagging/get_all_logs_by_tags.ts +28 -4
  238. package/src/tagging/index.ts +2 -2
  239. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +12 -25
  240. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  241. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
  242. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
  243. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  244. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
  245. package/dest/contract_sync/index.d.ts +0 -23
  246. package/dest/contract_sync/index.d.ts.map +0 -1
  247. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  248. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
@@ -15,7 +15,9 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
15
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,17 +220,15 @@ export class Oracle {
137
220
  ].map(toACVMField);
138
221
  }
139
222
 
140
- async utilityGetNoteHashMembershipWitness(
223
+ // eslint-disable-next-line camelcase
224
+ async aztec_utl_getNoteHashMembershipWitness(
141
225
  [anchorBlockHash]: ACVMField[],
142
226
  [noteHash]: ACVMField[],
143
227
  ): Promise<(ACVMField | ACVMField[])[]> {
144
228
  const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
145
229
  const parsedNoteHash = Fr.fromString(noteHash);
146
230
 
147
- const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(
148
- parsedAnchorBlockHash,
149
- parsedNoteHash,
150
- );
231
+ const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(parsedAnchorBlockHash, parsedNoteHash);
151
232
  if (!witness) {
152
233
  throw new Error(
153
234
  `Note hash ${noteHash} not found in the note hash tree at anchor block hash ${parsedAnchorBlockHash.toString()}.`,
@@ -156,17 +237,15 @@ export class Oracle {
156
237
  return witness.toNoirRepresentation();
157
238
  }
158
239
 
159
- async utilityGetBlockHashMembershipWitness(
240
+ // eslint-disable-next-line camelcase
241
+ async aztec_utl_getBlockHashMembershipWitness(
160
242
  [anchorBlockHash]: ACVMField[],
161
243
  [blockHash]: ACVMField[],
162
244
  ): Promise<(ACVMField | ACVMField[])[]> {
163
245
  const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
164
246
  const parsedBlockHash = BlockHash.fromString(blockHash);
165
247
 
166
- const witness = await this.handlerAsUtility().utilityGetBlockHashMembershipWitness(
167
- parsedAnchorBlockHash,
168
- parsedBlockHash,
169
- );
248
+ const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(parsedAnchorBlockHash, parsedBlockHash);
170
249
  if (!witness) {
171
250
  throw new Error(
172
251
  `Block hash ${parsedBlockHash.toString()} not found in the archive tree at anchor block ${parsedAnchorBlockHash.toString()}.`,
@@ -175,17 +254,15 @@ export class Oracle {
175
254
  return witness.toNoirRepresentation();
176
255
  }
177
256
 
178
- async utilityGetNullifierMembershipWitness(
257
+ // eslint-disable-next-line camelcase
258
+ async aztec_utl_getNullifierMembershipWitness(
179
259
  [blockHash]: ACVMField[],
180
260
  [nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
181
261
  ): Promise<(ACVMField | ACVMField[])[]> {
182
262
  const parsedBlockHash = BlockHash.fromString(blockHash);
183
263
  const parsedNullifier = Fr.fromString(nullifier);
184
264
 
185
- const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(
186
- parsedBlockHash,
187
- parsedNullifier,
188
- );
265
+ const witness = await this.handlerAsUtility().getNullifierMembershipWitness(parsedBlockHash, parsedNullifier);
189
266
  if (!witness) {
190
267
  throw new Error(
191
268
  `Nullifier witness not found for nullifier ${parsedNullifier} at block hash ${parsedBlockHash.toString()}.`,
@@ -194,17 +271,15 @@ export class Oracle {
194
271
  return witness.toNoirRepresentation();
195
272
  }
196
273
 
197
- async utilityGetLowNullifierMembershipWitness(
274
+ // eslint-disable-next-line camelcase
275
+ async aztec_utl_getLowNullifierMembershipWitness(
198
276
  [blockHash]: ACVMField[],
199
277
  [nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
200
278
  ): Promise<(ACVMField | ACVMField[])[]> {
201
279
  const parsedBlockHash = BlockHash.fromString(blockHash);
202
280
  const parsedNullifier = Fr.fromString(nullifier);
203
281
 
204
- const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(
205
- parsedBlockHash,
206
- parsedNullifier,
207
- );
282
+ const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(parsedBlockHash, parsedNullifier);
208
283
  if (!witness) {
209
284
  throw new Error(
210
285
  `Low nullifier witness not found for nullifier ${parsedNullifier} at block hash ${parsedBlockHash.toString()}.`,
@@ -213,14 +288,15 @@ export class Oracle {
213
288
  return witness.toNoirRepresentation();
214
289
  }
215
290
 
216
- async utilityGetPublicDataWitness(
291
+ // eslint-disable-next-line camelcase
292
+ async aztec_utl_getPublicDataWitness(
217
293
  [blockHash]: ACVMField[],
218
294
  [leafSlot]: ACVMField[],
219
295
  ): Promise<(ACVMField | ACVMField[])[]> {
220
296
  const parsedBlockHash = BlockHash.fromString(blockHash);
221
297
  const parsedLeafSlot = Fr.fromString(leafSlot);
222
298
 
223
- const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(parsedBlockHash, parsedLeafSlot);
299
+ const witness = await this.handlerAsUtility().getPublicDataWitness(parsedBlockHash, parsedLeafSlot);
224
300
  if (!witness) {
225
301
  throw new Error(
226
302
  `Public data witness not found for slot ${parsedLeafSlot} at block hash ${parsedBlockHash.toString()}.`,
@@ -229,34 +305,45 @@ export class Oracle {
229
305
  return witness.toNoirRepresentation();
230
306
  }
231
307
 
232
- async utilityGetBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
308
+ // eslint-disable-next-line camelcase
309
+ async aztec_utl_getBlockHeader([blockNumber]: ACVMField[]): Promise<ACVMField[]> {
233
310
  const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
234
311
 
235
- const header = await this.handlerAsUtility().utilityGetBlockHeader(BlockNumber(parsedBlockNumber));
312
+ const header = await this.handlerAsUtility().getBlockHeader(BlockNumber(parsedBlockNumber));
236
313
  if (!header) {
237
314
  throw new Error(`Block header not found for block ${parsedBlockNumber}.`);
238
315
  }
239
316
  return header.toFields().map(toACVMField);
240
317
  }
241
318
 
242
- async utilityGetAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]> {
319
+ // eslint-disable-next-line camelcase
320
+ async aztec_utl_getAuthWitness([messageHash]: ACVMField[]): Promise<ACVMField[][]> {
243
321
  const messageHashField = Fr.fromString(messageHash);
244
- const witness = await this.handlerAsUtility().utilityGetAuthWitness(messageHashField);
322
+ const witness = await this.handlerAsUtility().getAuthWitness(messageHashField);
245
323
  if (!witness) {
246
324
  throw new Error(`Unknown auth witness for message hash ${messageHashField}`);
247
325
  }
248
326
  return [witness.map(toACVMField)];
249
327
  }
250
328
 
251
- async utilityGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]> {
329
+ // eslint-disable-next-line camelcase
330
+ async aztec_utl_getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
252
331
  const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
253
- const { publicKeys, partialAddress } =
254
- await this.handlerAsUtility().utilityGetPublicKeysAndPartialAddress(parsedAddress);
332
+ const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(parsedAddress);
255
333
 
256
- 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
+ }
257
343
  }
258
344
 
259
- async utilityGetNotes(
345
+ // eslint-disable-next-line camelcase
346
+ async aztec_utl_getNotes(
260
347
  [ownerSome]: ACVMField[],
261
348
  [ownerValue]: ACVMField[],
262
349
  [storageSlot]: ACVMField[],
@@ -278,7 +365,7 @@ export class Oracle {
278
365
  ): Promise<(ACVMField | ACVMField[])[]> {
279
366
  // Parse Option<AztecAddress>: ownerSome is 0 for None, 1 for Some
280
367
  const owner = Fr.fromString(ownerSome).toNumber() === 1 ? AztecAddress.fromString(ownerValue) : undefined;
281
- const noteDatas = await this.handlerAsUtility().utilityGetNotes(
368
+ const noteDatas = await this.handlerAsUtility().getNotes(
282
369
  owner,
283
370
  Fr.fromString(storageSlot),
284
371
  +numSelects,
@@ -317,7 +404,8 @@ export class Oracle {
317
404
  return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedHintedNoteLength);
318
405
  }
319
406
 
320
- privateNotifyCreatedNote(
407
+ // eslint-disable-next-line camelcase
408
+ aztec_prv_notifyCreatedNote(
321
409
  [owner]: ACVMField[],
322
410
  [storageSlot]: ACVMField[],
323
411
  [randomness]: ACVMField[],
@@ -326,7 +414,7 @@ export class Oracle {
326
414
  [noteHash]: ACVMField[],
327
415
  [counter]: ACVMField[],
328
416
  ): Promise<ACVMField[]> {
329
- this.handlerAsPrivate().privateNotifyCreatedNote(
417
+ this.handlerAsPrivate().notifyCreatedNote(
330
418
  AztecAddress.fromString(owner),
331
419
  Fr.fromString(storageSlot),
332
420
  Fr.fromString(randomness),
@@ -338,43 +426,47 @@ export class Oracle {
338
426
  return Promise.resolve([]);
339
427
  }
340
428
 
341
- async privateNotifyNullifiedNote(
429
+ // eslint-disable-next-line camelcase
430
+ async aztec_prv_notifyNullifiedNote(
342
431
  [innerNullifier]: ACVMField[],
343
432
  [noteHash]: ACVMField[],
344
433
  [counter]: ACVMField[],
345
434
  ): Promise<ACVMField[]> {
346
- await this.handlerAsPrivate().privateNotifyNullifiedNote(
347
- Fr.fromString(innerNullifier),
348
- Fr.fromString(noteHash),
349
- +counter,
350
- );
435
+ await this.handlerAsPrivate().notifyNullifiedNote(Fr.fromString(innerNullifier), Fr.fromString(noteHash), +counter);
351
436
  return [];
352
437
  }
353
438
 
354
- async privateNotifyCreatedNullifier([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
355
- 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));
356
442
  return [];
357
443
  }
358
444
 
359
- async privateIsNullifierPending([innerNullifier]: ACVMField[], [contractAddress]: ACVMField[]): Promise<ACVMField[]> {
360
- 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(
361
451
  Fr.fromString(innerNullifier),
362
452
  AztecAddress.fromString(contractAddress),
363
453
  );
364
454
  return [toACVMField(isPending)];
365
455
  }
366
456
 
367
- async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
368
- 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));
369
460
  return [toACVMField(exists)];
370
461
  }
371
462
 
372
- async utilityGetL1ToL2MembershipWitness(
463
+ // eslint-disable-next-line camelcase
464
+ async aztec_utl_getL1ToL2MembershipWitness(
373
465
  [contractAddress]: ACVMField[],
374
466
  [messageHash]: ACVMField[],
375
467
  [secret]: ACVMField[],
376
468
  ): Promise<(ACVMField | ACVMField[])[]> {
377
- const message = await this.handlerAsUtility().utilityGetL1ToL2MembershipWitness(
469
+ const message = await this.handlerAsUtility().getL1ToL2MembershipWitness(
378
470
  AztecAddress.fromString(contractAddress),
379
471
  Fr.fromString(messageHash),
380
472
  Fr.fromString(secret),
@@ -382,13 +474,14 @@ export class Oracle {
382
474
  return message.toNoirRepresentation();
383
475
  }
384
476
 
385
- async utilityStorageRead(
477
+ // eslint-disable-next-line camelcase
478
+ async aztec_utl_getFromPublicStorage(
386
479
  [blockHash]: ACVMField[],
387
480
  [contractAddress]: ACVMField[],
388
481
  [startStorageSlot]: ACVMField[],
389
482
  [numberOfElements]: ACVMField[],
390
483
  ): Promise<ACVMField[][]> {
391
- const values = await this.handlerAsUtility().utilityStorageRead(
484
+ const values = await this.handlerAsUtility().getFromPublicStorage(
392
485
  BlockHash.fromString(blockHash),
393
486
  new AztecAddress(Fr.fromString(contractAddress)),
394
487
  Fr.fromString(startStorageSlot),
@@ -397,7 +490,22 @@ export class Oracle {
397
490
  return [values.map(toACVMField)];
398
491
  }
399
492
 
400
- privateNotifyCreatedContractClassLog(
493
+ // eslint-disable-next-line camelcase
494
+ async aztec_utl_callUtilityFunction(
495
+ [contractAddress]: ACVMField[],
496
+ [functionSelector]: ACVMField[],
497
+ args: ACVMField[],
498
+ ): Promise<ACVMField[][]> {
499
+ const result = await this.handlerAsUtility().callUtilityFunction(
500
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
501
+ FunctionSelector.fromField(Fr.fromString(functionSelector)),
502
+ args.map(Fr.fromString),
503
+ );
504
+ return [result.map(toACVMField)];
505
+ }
506
+
507
+ // eslint-disable-next-line camelcase
508
+ aztec_prv_notifyCreatedContractClassLog(
401
509
  [contractAddress]: ACVMField[],
402
510
  message: ACVMField[],
403
511
  [length]: ACVMField[],
@@ -406,11 +514,12 @@ export class Oracle {
406
514
  const logFields = new ContractClassLogFields(message.map(Fr.fromString));
407
515
  const log = new ContractClassLog(new AztecAddress(Fr.fromString(contractAddress)), logFields, +length);
408
516
 
409
- this.handlerAsPrivate().privateNotifyCreatedContractClassLog(log, +counter);
517
+ this.handlerAsPrivate().notifyCreatedContractClassLog(log, +counter);
410
518
  return Promise.resolve([]);
411
519
  }
412
520
 
413
- utilityDebugLog(
521
+ // eslint-disable-next-line camelcase
522
+ async aztec_utl_log(
414
523
  level: ACVMField[],
415
524
  message: ACVMField[],
416
525
  _ignoredFieldsSize: ACVMField[],
@@ -419,20 +528,21 @@ export class Oracle {
419
528
  const levelFr = Fr.fromString(level[0]);
420
529
  const messageStr = message.map(acvmField => String.fromCharCode(Fr.fromString(acvmField).toNumber())).join('');
421
530
  const fieldsFr = fields.map(Fr.fromString);
422
- this.handlerAsMisc().utilityDebugLog(levelFr.toNumber(), messageStr, fieldsFr);
423
- return Promise.resolve([]);
531
+ await this.handlerAsMisc().log(levelFr.toNumber(), messageStr, fieldsFr);
532
+ return [];
424
533
  }
425
534
 
426
535
  // This function's name is directly hardcoded in `circuit_recorder.ts`. Don't forget to update it there if you
427
536
  // change the name here.
428
- async privateCallPrivateFunction(
537
+ // eslint-disable-next-line camelcase
538
+ async aztec_prv_callPrivateFunction(
429
539
  [contractAddress]: ACVMField[],
430
540
  [functionSelector]: ACVMField[],
431
541
  [argsHash]: ACVMField[],
432
542
  [sideEffectCounter]: ACVMField[],
433
543
  [isStaticCall]: ACVMField[],
434
544
  ): Promise<ACVMField[][]> {
435
- const { endSideEffectCounter, returnsHash } = await this.handlerAsPrivate().privateCallPrivateFunction(
545
+ const { endSideEffectCounter, returnsHash } = await this.handlerAsPrivate().callPrivateFunction(
436
546
  AztecAddress.fromField(Fr.fromString(contractAddress)),
437
547
  FunctionSelector.fromField(Fr.fromString(functionSelector)),
438
548
  Fr.fromString(argsHash),
@@ -442,113 +552,165 @@ export class Oracle {
442
552
  return [[endSideEffectCounter, returnsHash].map(toACVMField)];
443
553
  }
444
554
 
445
- async privateNotifyEnqueuedPublicFunctionCall(
446
- [contractAddress]: ACVMField[],
447
- [calldataHash]: ACVMField[],
448
- [sideEffectCounter]: ACVMField[],
449
- [isStaticCall]: ACVMField[],
450
- ): Promise<ACVMField[]> {
451
- await this.handlerAsPrivate().privateNotifyEnqueuedPublicFunctionCall(
452
- AztecAddress.fromString(contractAddress),
453
- Fr.fromString(calldataHash),
454
- Fr.fromString(sideEffectCounter).toNumber(),
455
- Fr.fromString(isStaticCall).toBool(),
456
- );
457
- return [];
458
- }
459
-
460
- async privateNotifySetPublicTeardownFunctionCall(
461
- [contractAddress]: ACVMField[],
462
- [calldataHash]: ACVMField[],
463
- [sideEffectCounter]: ACVMField[],
464
- [isStaticCall]: ACVMField[],
465
- ): Promise<ACVMField[]> {
466
- await this.handlerAsPrivate().privateNotifySetPublicTeardownFunctionCall(
467
- AztecAddress.fromString(contractAddress),
468
- Fr.fromString(calldataHash),
469
- Fr.fromString(sideEffectCounter).toNumber(),
470
- Fr.fromString(isStaticCall).toBool(),
471
- );
555
+ // eslint-disable-next-line camelcase
556
+ async aztec_prv_assertValidPublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
557
+ await this.handlerAsPrivate().assertValidPublicCalldata(Fr.fromString(calldataHash));
472
558
  return [];
473
559
  }
474
560
 
475
- async privateNotifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<
476
- ACVMField[]
477
- > {
478
- await this.handlerAsPrivate().privateNotifySetMinRevertibleSideEffectCounter(
479
- Fr.fromString(minRevertibleSideEffectCounter).toNumber(),
480
- );
561
+ // eslint-disable-next-line camelcase
562
+ async aztec_prv_notifyRevertiblePhaseStart([minRevertibleSideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
563
+ await this.handlerAsPrivate().notifyRevertiblePhaseStart(Fr.fromString(minRevertibleSideEffectCounter).toNumber());
481
564
  return Promise.resolve([]);
482
565
  }
483
566
 
484
- async privateIsSideEffectCounterRevertible([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
485
- const isRevertible = await this.handlerAsPrivate().privateIsSideEffectCounterRevertible(
567
+ // eslint-disable-next-line camelcase
568
+ async aztec_prv_isExecutionInRevertiblePhase([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
569
+ const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(
486
570
  Fr.fromString(sideEffectCounter).toNumber(),
487
571
  );
488
572
  return Promise.resolve([toACVMField(isRevertible)]);
489
573
  }
490
574
 
491
- async privateGetNextAppTagAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
492
- const tag = await this.handlerAsPrivate().privateGetNextAppTagAsSender(
575
+ // eslint-disable-next-line camelcase
576
+ async aztec_prv_getNextAppTagAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
577
+ const tag = await this.handlerAsPrivate().getNextAppTagAsSender(
493
578
  AztecAddress.fromString(sender),
494
579
  AztecAddress.fromString(recipient),
495
580
  );
496
581
  return [toACVMField(tag.value)];
497
582
  }
498
583
 
499
- async utilityFetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
500
- await this.handlerAsUtility().utilityFetchTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot));
584
+ // eslint-disable-next-line camelcase
585
+ async aztec_utl_getPendingTaggedLogs(
586
+ [pendingTaggedLogArrayBaseSlot]: ACVMField[],
587
+ [scope]: ACVMField[],
588
+ ): Promise<ACVMField[]> {
589
+ await this.handlerAsUtility().getPendingTaggedLogs(
590
+ Fr.fromString(pendingTaggedLogArrayBaseSlot),
591
+ AztecAddress.fromString(scope),
592
+ );
501
593
  return [];
502
594
  }
503
595
 
504
- async utilityValidateAndStoreEnqueuedNotesAndEvents(
596
+ // eslint-disable-next-line camelcase
597
+ async aztec_utl_getPendingTaggedLogs_v2([scope]: ACVMField[]): Promise<ACVMField[]> {
598
+ const slot = await this.handlerAsUtility().getPendingTaggedLogsV2(AztecAddress.fromString(scope));
599
+ return [toACVMField(slot)];
600
+ }
601
+
602
+ // eslint-disable-next-line camelcase
603
+ async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(
505
604
  [contractAddress]: ACVMField[],
506
605
  [noteValidationRequestsArrayBaseSlot]: ACVMField[],
507
606
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
607
+ [maxNotePackedLen]: ACVMField[],
608
+ [maxEventSerializedLen]: ACVMField[],
609
+ [scope]: ACVMField[],
508
610
  ): Promise<ACVMField[]> {
509
- await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(
611
+ await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
510
612
  AztecAddress.fromString(contractAddress),
511
613
  Fr.fromString(noteValidationRequestsArrayBaseSlot),
512
614
  Fr.fromString(eventValidationRequestsArrayBaseSlot),
615
+ Fr.fromString(maxNotePackedLen).toNumber(),
616
+ Fr.fromString(maxEventSerializedLen).toNumber(),
617
+ AztecAddress.fromString(scope),
513
618
  );
514
619
 
515
620
  return [];
516
621
  }
517
622
 
518
- async utilityBulkRetrieveLogs(
623
+ // eslint-disable-next-line camelcase
624
+ async aztec_utl_validateAndStoreEnqueuedNotesAndEvents_v2(
625
+ [noteValidationRequestsArrayBaseSlot]: ACVMField[],
626
+ [eventValidationRequestsArrayBaseSlot]: ACVMField[],
627
+ [maxNotePackedLen]: ACVMField[],
628
+ [maxEventSerializedLen]: ACVMField[],
629
+ [scope]: ACVMField[],
630
+ ): Promise<ACVMField[]> {
631
+ await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEventsV2(
632
+ Fr.fromString(noteValidationRequestsArrayBaseSlot),
633
+ Fr.fromString(eventValidationRequestsArrayBaseSlot),
634
+ Fr.fromString(maxNotePackedLen).toNumber(),
635
+ Fr.fromString(maxEventSerializedLen).toNumber(),
636
+ AztecAddress.fromString(scope),
637
+ );
638
+ return [];
639
+ }
640
+
641
+ // eslint-disable-next-line camelcase
642
+ async aztec_utl_getLogsByTag(
519
643
  [contractAddress]: ACVMField[],
520
644
  [logRetrievalRequestsArrayBaseSlot]: ACVMField[],
521
645
  [logRetrievalResponsesArrayBaseSlot]: ACVMField[],
646
+ [scope]: ACVMField[],
522
647
  ): Promise<ACVMField[]> {
523
- await this.handlerAsUtility().utilityBulkRetrieveLogs(
648
+ await this.handlerAsUtility().getLogsByTag(
524
649
  AztecAddress.fromString(contractAddress),
525
650
  Fr.fromString(logRetrievalRequestsArrayBaseSlot),
526
651
  Fr.fromString(logRetrievalResponsesArrayBaseSlot),
652
+ AztecAddress.fromString(scope),
653
+ );
654
+ return [];
655
+ }
656
+
657
+ // eslint-disable-next-line camelcase
658
+ async aztec_utl_getMessageContextsByTxHash(
659
+ [contractAddress]: ACVMField[],
660
+ [messageContextRequestsArrayBaseSlot]: ACVMField[],
661
+ [messageContextResponsesArrayBaseSlot]: ACVMField[],
662
+ [scope]: ACVMField[],
663
+ ): Promise<ACVMField[]> {
664
+ await this.handlerAsUtility().getMessageContextsByTxHash(
665
+ AztecAddress.fromString(contractAddress),
666
+ Fr.fromString(messageContextRequestsArrayBaseSlot),
667
+ Fr.fromString(messageContextResponsesArrayBaseSlot),
668
+ AztecAddress.fromString(scope),
527
669
  );
528
670
  return [];
529
671
  }
530
672
 
531
- async utilityStoreCapsule(
673
+ // eslint-disable-next-line camelcase
674
+ async aztec_utl_getLogsByTag_v2([requestArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
675
+ const responseSlot = await this.handlerAsUtility().getLogsByTagV2(Fr.fromString(requestArrayBaseSlot));
676
+ return [toACVMField(responseSlot)];
677
+ }
678
+
679
+ // eslint-disable-next-line camelcase
680
+ async aztec_utl_getMessageContextsByTxHash_v2([requestArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
681
+ const responseSlot = await this.handlerAsUtility().getMessageContextsByTxHashV2(
682
+ Fr.fromString(requestArrayBaseSlot),
683
+ );
684
+ return [toACVMField(responseSlot)];
685
+ }
686
+
687
+ // eslint-disable-next-line camelcase
688
+ aztec_utl_setCapsule(
532
689
  [contractAddress]: ACVMField[],
533
690
  [slot]: ACVMField[],
534
691
  capsule: ACVMField[],
692
+ [scope]: ACVMField[],
535
693
  ): Promise<ACVMField[]> {
536
- await this.handlerAsUtility().utilityStoreCapsule(
694
+ this.handlerAsUtility().setCapsule(
537
695
  AztecAddress.fromField(Fr.fromString(contractAddress)),
538
696
  Fr.fromString(slot),
539
697
  capsule.map(Fr.fromString),
698
+ AztecAddress.fromField(Fr.fromString(scope)),
540
699
  );
541
- return [];
700
+ return Promise.resolve([]);
542
701
  }
543
702
 
544
- async utilityLoadCapsule(
703
+ // eslint-disable-next-line camelcase
704
+ async aztec_utl_getCapsule(
545
705
  [contractAddress]: ACVMField[],
546
706
  [slot]: ACVMField[],
547
707
  [tSize]: ACVMField[],
708
+ [scope]: ACVMField[],
548
709
  ): Promise<(ACVMField | ACVMField[])[]> {
549
- const values = await this.handlerAsUtility().utilityLoadCapsule(
710
+ const values = await this.handlerAsUtility().getCapsule(
550
711
  AztecAddress.fromField(Fr.fromString(contractAddress)),
551
712
  Fr.fromString(slot),
713
+ AztecAddress.fromField(Fr.fromString(scope)),
552
714
  );
553
715
 
554
716
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
@@ -562,30 +724,86 @@ export class Oracle {
562
724
  }
563
725
  }
564
726
 
565
- async utilityDeleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
566
- await this.handlerAsUtility().utilityDeleteCapsule(
727
+ // eslint-disable-next-line camelcase
728
+ aztec_utl_deleteCapsule(
729
+ [contractAddress]: ACVMField[],
730
+ [slot]: ACVMField[],
731
+ [scope]: ACVMField[],
732
+ ): Promise<ACVMField[]> {
733
+ this.handlerAsUtility().deleteCapsule(
567
734
  AztecAddress.fromField(Fr.fromString(contractAddress)),
568
735
  Fr.fromString(slot),
736
+ AztecAddress.fromField(Fr.fromString(scope)),
569
737
  );
570
- return [];
738
+ return Promise.resolve([]);
571
739
  }
572
740
 
573
- async utilityCopyCapsule(
741
+ // eslint-disable-next-line camelcase
742
+ async aztec_utl_copyCapsule(
574
743
  [contractAddress]: ACVMField[],
575
744
  [srcSlot]: ACVMField[],
576
745
  [dstSlot]: ACVMField[],
577
746
  [numEntries]: ACVMField[],
747
+ [scope]: ACVMField[],
578
748
  ): Promise<ACVMField[]> {
579
- await this.handlerAsUtility().utilityCopyCapsule(
749
+ await this.handlerAsUtility().copyCapsule(
580
750
  AztecAddress.fromField(Fr.fromString(contractAddress)),
581
751
  Fr.fromString(srcSlot),
582
752
  Fr.fromString(dstSlot),
583
753
  Fr.fromString(numEntries).toNumber(),
754
+ AztecAddress.fromField(Fr.fromString(scope)),
584
755
  );
585
756
  return [];
586
757
  }
587
758
 
588
- async utilityAes128Decrypt(
759
+ // eslint-disable-next-line camelcase
760
+ aztec_utl_pushEphemeral([slot]: ACVMField[], elements: ACVMField[]): Promise<ACVMField[]> {
761
+ const newLen = this.handlerAsUtility().pushEphemeral(Fr.fromString(slot), elements.map(Fr.fromString));
762
+ return Promise.resolve([toACVMField(newLen)]);
763
+ }
764
+
765
+ // eslint-disable-next-line camelcase
766
+ aztec_utl_popEphemeral([slot]: ACVMField[]): Promise<ACVMField[][]> {
767
+ const element = this.handlerAsUtility().popEphemeral(Fr.fromString(slot));
768
+ return Promise.resolve([element.map(toACVMField)]);
769
+ }
770
+
771
+ // eslint-disable-next-line camelcase
772
+ aztec_utl_getEphemeral([slot]: ACVMField[], [index]: ACVMField[]): Promise<ACVMField[][]> {
773
+ const element = this.handlerAsUtility().getEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber());
774
+ return Promise.resolve([element.map(toACVMField)]);
775
+ }
776
+
777
+ // eslint-disable-next-line camelcase
778
+ aztec_utl_setEphemeral([slot]: ACVMField[], [index]: ACVMField[], elements: ACVMField[]): Promise<ACVMField[]> {
779
+ this.handlerAsUtility().setEphemeral(
780
+ Fr.fromString(slot),
781
+ Fr.fromString(index).toNumber(),
782
+ elements.map(Fr.fromString),
783
+ );
784
+ return Promise.resolve([]);
785
+ }
786
+
787
+ // eslint-disable-next-line camelcase
788
+ aztec_utl_getEphemeralLen([slot]: ACVMField[]): Promise<ACVMField[]> {
789
+ const len = this.handlerAsUtility().getEphemeralLen(Fr.fromString(slot));
790
+ return Promise.resolve([toACVMField(len)]);
791
+ }
792
+
793
+ // eslint-disable-next-line camelcase
794
+ aztec_utl_removeEphemeral([slot]: ACVMField[], [index]: ACVMField[]): Promise<ACVMField[]> {
795
+ this.handlerAsUtility().removeEphemeral(Fr.fromString(slot), Fr.fromString(index).toNumber());
796
+ return Promise.resolve([]);
797
+ }
798
+
799
+ // eslint-disable-next-line camelcase
800
+ aztec_utl_clearEphemeral([slot]: ACVMField[]): Promise<ACVMField[]> {
801
+ this.handlerAsUtility().clearEphemeral(Fr.fromString(slot));
802
+ return Promise.resolve([]);
803
+ }
804
+
805
+ // eslint-disable-next-line camelcase
806
+ async aztec_utl_decryptAes128(
589
807
  ciphertextBVecStorage: ACVMField[],
590
808
  [ciphertextLength]: ACVMField[],
591
809
  iv: ACVMField[],
@@ -595,36 +813,63 @@ export class Oracle {
595
813
  const ivBuffer = fromUintArray(iv, 8);
596
814
  const symKeyBuffer = fromUintArray(symKey, 8);
597
815
 
598
- const plaintext = await this.handlerAsUtility().utilityAes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
599
- return bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
816
+ // Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
817
+ try {
818
+ const plaintext = await this.handlerAsUtility().decryptAes128(ciphertext, ivBuffer, symKeyBuffer);
819
+ const [storage, length] = bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
820
+ return [toACVMField(1), storage, length];
821
+ } catch {
822
+ const zeroStorage = Array(ciphertextBVecStorage.length).fill(toACVMField(0));
823
+ return [toACVMField(0), zeroStorage, toACVMField(0)];
824
+ }
600
825
  }
601
826
 
602
- async utilityGetSharedSecret(
827
+ // eslint-disable-next-line camelcase
828
+ async aztec_utl_getSharedSecret(
603
829
  [address]: ACVMField[],
604
830
  [ephPKField0]: ACVMField[],
605
831
  [ephPKField1]: ACVMField[],
606
832
  [ephPKField2]: ACVMField[],
833
+ [contractAddress]: ACVMField[],
607
834
  ): Promise<ACVMField[]> {
608
- const secret = await this.handlerAsUtility().utilityGetSharedSecret(
835
+ const secret = await this.handlerAsUtility().getSharedSecret(
609
836
  AztecAddress.fromField(Fr.fromString(address)),
610
837
  Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
838
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
611
839
  );
612
- return secret.toFields().map(toACVMField);
840
+ return [toACVMField(secret)];
841
+ }
842
+
843
+ // eslint-disable-next-line camelcase
844
+ aztec_utl_setContractSyncCacheInvalid(
845
+ [contractAddress]: ACVMField[],
846
+ scopes: ACVMField[],
847
+ [scopeCount]: ACVMField[],
848
+ ): Promise<ACVMField[]> {
849
+ const scopeAddresses = scopes.slice(0, +scopeCount).map(s => AztecAddress.fromField(Fr.fromString(s)));
850
+ this.handlerAsUtility().setContractSyncCacheInvalid(
851
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
852
+ scopeAddresses,
853
+ );
854
+ return Promise.resolve([]);
613
855
  }
614
856
 
615
- async utilityEmitOffchainEffect(data: ACVMField[]) {
616
- await this.handlerAsPrivate().utilityEmitOffchainEffect(data.map(Fr.fromString));
857
+ // eslint-disable-next-line camelcase
858
+ async aztec_utl_emitOffchainEffect(data: ACVMField[]) {
859
+ await this.handlerAsUtility().emitOffchainEffect(data.map(Fr.fromString));
617
860
  return [];
618
861
  }
619
862
 
620
- async privateGetSenderForTags(): Promise<ACVMField[]> {
621
- const sender = await this.handlerAsPrivate().privateGetSenderForTags();
863
+ // eslint-disable-next-line camelcase
864
+ async aztec_prv_getSenderForTags(): Promise<ACVMField[]> {
865
+ const sender = await this.handlerAsPrivate().getSenderForTags();
622
866
  // Return [1, address] for Some(address), [0, 0] for None
623
867
  return sender ? [toACVMField(1n), toACVMField(sender)] : [toACVMField(0n), toACVMField(0n)];
624
868
  }
625
869
 
626
- async privateSetSenderForTags([senderForTags]: ACVMField[]): Promise<ACVMField[]> {
627
- await this.handlerAsPrivate().privateSetSenderForTags(AztecAddress.fromField(Fr.fromString(senderForTags)));
870
+ // eslint-disable-next-line camelcase
871
+ async aztec_prv_setSenderForTags([senderForTags]: ACVMField[]): Promise<ACVMField[]> {
872
+ await this.handlerAsPrivate().setSenderForTags(AztecAddress.fromField(Fr.fromString(senderForTags)));
628
873
  return [];
629
874
  }
630
875
  }