@aztec/pxe 0.0.1-commit.ee80a48 → 0.0.1-commit.f103f88

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 (234) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +4 -2
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +13 -1
  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 +8 -15
  8. package/dest/config/package_info.js +1 -1
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts +63 -29
  10. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  11. package/dest/contract_function_simulator/contract_function_simulator.js +205 -72
  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 +61 -45
  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 +300 -103
  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 -78
  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 -86
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +118 -63
  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 +315 -123
  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 +116 -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} +14 -15
  62. package/dest/debug/pxe_debug_utils.d.ts +14 -10
  63. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  64. package/dest/debug/pxe_debug_utils.js +16 -15
  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 +11 -3
  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 +2 -2
  75. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  76. package/dest/entrypoints/client/lazy/utils.js +11 -3
  77. package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
  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 +11 -3
  86. package/dest/events/event_service.d.ts +3 -2
  87. package/dest/events/event_service.d.ts.map +1 -1
  88. package/dest/events/event_service.js +16 -4
  89. package/dest/logs/log_service.d.ts +7 -7
  90. package/dest/logs/log_service.d.ts.map +1 -1
  91. package/dest/logs/log_service.js +33 -48
  92. package/dest/messages/message_context_service.d.ts +17 -0
  93. package/dest/messages/message_context_service.d.ts.map +1 -0
  94. package/dest/messages/message_context_service.js +36 -0
  95. package/dest/notes/note_service.d.ts +4 -4
  96. package/dest/notes/note_service.d.ts.map +1 -1
  97. package/dest/notes/note_service.js +17 -7
  98. package/dest/notes_filter.d.ts +24 -0
  99. package/dest/notes_filter.d.ts.map +1 -0
  100. package/dest/notes_filter.js +4 -0
  101. package/dest/oracle_version.d.ts +4 -3
  102. package/dest/oracle_version.d.ts.map +1 -1
  103. package/dest/oracle_version.js +20 -10
  104. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  105. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  106. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  107. package/dest/private_kernel/hints/index.d.ts +1 -1
  108. package/dest/private_kernel/hints/index.js +1 -1
  109. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  110. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  111. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  112. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  113. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  114. package/dest/private_kernel/hints/test_utils.js +203 -0
  115. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  116. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  117. package/dest/private_kernel/private_kernel_execution_prover.js +19 -11
  118. package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
  119. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  120. package/dest/private_kernel/private_kernel_oracle.js +7 -3
  121. package/dest/pxe.d.ts +74 -24
  122. package/dest/pxe.d.ts.map +1 -1
  123. package/dest/pxe.js +132 -74
  124. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  125. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  126. package/dest/storage/capsule_store/capsule_service.js +50 -0
  127. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  128. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  129. package/dest/storage/capsule_store/capsule_store.js +33 -28
  130. package/dest/storage/capsule_store/index.d.ts +2 -1
  131. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  132. package/dest/storage/capsule_store/index.js +1 -0
  133. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  134. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  135. package/dest/storage/contract_store/contract_store.js +145 -69
  136. package/dest/storage/metadata.d.ts +1 -1
  137. package/dest/storage/metadata.js +1 -1
  138. package/dest/storage/note_store/note_store.d.ts +3 -3
  139. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  140. package/dest/storage/note_store/note_store.js +6 -4
  141. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  142. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  143. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  144. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  145. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  146. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  147. package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
  148. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  149. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  150. package/dest/tagging/index.d.ts +3 -3
  151. package/dest/tagging/index.d.ts.map +1 -1
  152. package/dest/tagging/index.js +1 -1
  153. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
  154. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  155. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +7 -21
  156. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  157. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
  158. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  159. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  160. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
  161. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  162. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  163. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  164. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  165. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  166. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  167. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  168. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  169. package/package.json +25 -16
  170. package/src/bin/check_oracle_version.ts +4 -4
  171. package/src/block_synchronizer/block_synchronizer.ts +12 -0
  172. package/src/config/index.ts +3 -9
  173. package/src/config/package_info.ts +1 -1
  174. package/src/contract_function_simulator/contract_function_simulator.ts +365 -133
  175. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  176. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  177. package/src/contract_function_simulator/index.ts +1 -0
  178. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  179. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  180. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  181. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  182. package/src/contract_function_simulator/oracle/interfaces.ts +82 -54
  183. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  184. package/src/contract_function_simulator/oracle/oracle.ts +373 -142
  185. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  186. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +134 -180
  187. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +530 -153
  188. package/src/contract_function_simulator/pick_notes.ts +9 -2
  189. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  190. package/src/contract_logging.ts +52 -0
  191. package/src/contract_sync/contract_sync_service.ts +176 -0
  192. package/src/contract_sync/{index.ts → helpers.ts} +14 -35
  193. package/src/debug/pxe_debug_utils.ts +48 -18
  194. package/src/entrypoints/client/bundle/index.ts +2 -0
  195. package/src/entrypoints/client/bundle/utils.ts +11 -4
  196. package/src/entrypoints/client/lazy/index.ts +2 -0
  197. package/src/entrypoints/client/lazy/utils.ts +11 -4
  198. package/src/entrypoints/pxe_creation_options.ts +7 -0
  199. package/src/entrypoints/server/index.ts +3 -2
  200. package/src/entrypoints/server/utils.ts +9 -10
  201. package/src/events/event_service.ts +17 -4
  202. package/src/logs/log_service.ts +63 -91
  203. package/src/messages/message_context_service.ts +44 -0
  204. package/src/notes/note_service.ts +19 -8
  205. package/src/notes_filter.ts +24 -0
  206. package/src/oracle_version.ts +20 -10
  207. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  208. package/src/private_kernel/hints/index.ts +1 -1
  209. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  210. package/src/private_kernel/hints/test_utils.ts +325 -0
  211. package/src/private_kernel/private_kernel_execution_prover.ts +19 -12
  212. package/src/private_kernel/private_kernel_oracle.ts +7 -7
  213. package/src/pxe.ts +236 -127
  214. package/src/storage/capsule_store/capsule_service.ts +90 -0
  215. package/src/storage/capsule_store/capsule_store.ts +34 -26
  216. package/src/storage/capsule_store/index.ts +1 -0
  217. package/src/storage/contract_store/contract_store.ts +174 -75
  218. package/src/storage/metadata.ts +1 -1
  219. package/src/storage/note_store/note_store.ts +9 -5
  220. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  221. package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
  222. package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
  223. package/src/tagging/get_all_logs_by_tags.ts +28 -4
  224. package/src/tagging/index.ts +2 -2
  225. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +9 -24
  226. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  227. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
  228. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
  229. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  230. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
  231. package/dest/contract_sync/index.d.ts +0 -24
  232. package/dest/contract_sync/index.d.ts.map +0 -1
  233. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  234. 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,8 @@ export class Oracle {
397
490
  return [values.map(toACVMField)];
398
491
  }
399
492
 
400
- privateNotifyCreatedContractClassLog(
493
+ // eslint-disable-next-line camelcase
494
+ aztec_prv_notifyCreatedContractClassLog(
401
495
  [contractAddress]: ACVMField[],
402
496
  message: ACVMField[],
403
497
  [length]: ACVMField[],
@@ -406,11 +500,12 @@ export class Oracle {
406
500
  const logFields = new ContractClassLogFields(message.map(Fr.fromString));
407
501
  const log = new ContractClassLog(new AztecAddress(Fr.fromString(contractAddress)), logFields, +length);
408
502
 
409
- this.handlerAsPrivate().privateNotifyCreatedContractClassLog(log, +counter);
503
+ this.handlerAsPrivate().notifyCreatedContractClassLog(log, +counter);
410
504
  return Promise.resolve([]);
411
505
  }
412
506
 
413
- utilityDebugLog(
507
+ // eslint-disable-next-line camelcase
508
+ async aztec_utl_log(
414
509
  level: ACVMField[],
415
510
  message: ACVMField[],
416
511
  _ignoredFieldsSize: ACVMField[],
@@ -419,20 +514,21 @@ export class Oracle {
419
514
  const levelFr = Fr.fromString(level[0]);
420
515
  const messageStr = message.map(acvmField => String.fromCharCode(Fr.fromString(acvmField).toNumber())).join('');
421
516
  const fieldsFr = fields.map(Fr.fromString);
422
- this.handlerAsMisc().utilityDebugLog(levelFr.toNumber(), messageStr, fieldsFr);
423
- return Promise.resolve([]);
517
+ await this.handlerAsMisc().log(levelFr.toNumber(), messageStr, fieldsFr);
518
+ return [];
424
519
  }
425
520
 
426
521
  // This function's name is directly hardcoded in `circuit_recorder.ts`. Don't forget to update it there if you
427
522
  // change the name here.
428
- async privateCallPrivateFunction(
523
+ // eslint-disable-next-line camelcase
524
+ async aztec_prv_callPrivateFunction(
429
525
  [contractAddress]: ACVMField[],
430
526
  [functionSelector]: ACVMField[],
431
527
  [argsHash]: ACVMField[],
432
528
  [sideEffectCounter]: ACVMField[],
433
529
  [isStaticCall]: ACVMField[],
434
530
  ): Promise<ACVMField[][]> {
435
- const { endSideEffectCounter, returnsHash } = await this.handlerAsPrivate().privateCallPrivateFunction(
531
+ const { endSideEffectCounter, returnsHash } = await this.handlerAsPrivate().callPrivateFunction(
436
532
  AztecAddress.fromField(Fr.fromString(contractAddress)),
437
533
  FunctionSelector.fromField(Fr.fromString(functionSelector)),
438
534
  Fr.fromString(argsHash),
@@ -442,113 +538,165 @@ export class Oracle {
442
538
  return [[endSideEffectCounter, returnsHash].map(toACVMField)];
443
539
  }
444
540
 
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
- );
541
+ // eslint-disable-next-line camelcase
542
+ async aztec_prv_assertValidPublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
543
+ await this.handlerAsPrivate().assertValidPublicCalldata(Fr.fromString(calldataHash));
472
544
  return [];
473
545
  }
474
546
 
475
- async privateNotifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]): Promise<
476
- ACVMField[]
477
- > {
478
- await this.handlerAsPrivate().privateNotifySetMinRevertibleSideEffectCounter(
479
- Fr.fromString(minRevertibleSideEffectCounter).toNumber(),
480
- );
547
+ // eslint-disable-next-line camelcase
548
+ async aztec_prv_notifyRevertiblePhaseStart([minRevertibleSideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
549
+ await this.handlerAsPrivate().notifyRevertiblePhaseStart(Fr.fromString(minRevertibleSideEffectCounter).toNumber());
481
550
  return Promise.resolve([]);
482
551
  }
483
552
 
484
- async privateIsSideEffectCounterRevertible([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
485
- 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(
486
556
  Fr.fromString(sideEffectCounter).toNumber(),
487
557
  );
488
558
  return Promise.resolve([toACVMField(isRevertible)]);
489
559
  }
490
560
 
491
- async privateGetNextAppTagAsSender([sender]: ACVMField[], [recipient]: ACVMField[]): Promise<ACVMField[]> {
492
- 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(
493
564
  AztecAddress.fromString(sender),
494
565
  AztecAddress.fromString(recipient),
495
566
  );
496
567
  return [toACVMField(tag.value)];
497
568
  }
498
569
 
499
- async utilityFetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
500
- 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
+ );
501
579
  return [];
502
580
  }
503
581
 
504
- 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(
505
590
  [contractAddress]: ACVMField[],
506
591
  [noteValidationRequestsArrayBaseSlot]: ACVMField[],
507
592
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
593
+ [maxNotePackedLen]: ACVMField[],
594
+ [maxEventSerializedLen]: ACVMField[],
595
+ [scope]: ACVMField[],
508
596
  ): Promise<ACVMField[]> {
509
- await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(
597
+ await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
510
598
  AztecAddress.fromString(contractAddress),
511
599
  Fr.fromString(noteValidationRequestsArrayBaseSlot),
512
600
  Fr.fromString(eventValidationRequestsArrayBaseSlot),
601
+ Fr.fromString(maxNotePackedLen).toNumber(),
602
+ Fr.fromString(maxEventSerializedLen).toNumber(),
603
+ AztecAddress.fromString(scope),
513
604
  );
514
605
 
515
606
  return [];
516
607
  }
517
608
 
518
- 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(
519
629
  [contractAddress]: ACVMField[],
520
630
  [logRetrievalRequestsArrayBaseSlot]: ACVMField[],
521
631
  [logRetrievalResponsesArrayBaseSlot]: ACVMField[],
632
+ [scope]: ACVMField[],
522
633
  ): Promise<ACVMField[]> {
523
- await this.handlerAsUtility().utilityBulkRetrieveLogs(
634
+ await this.handlerAsUtility().getLogsByTag(
524
635
  AztecAddress.fromString(contractAddress),
525
636
  Fr.fromString(logRetrievalRequestsArrayBaseSlot),
526
637
  Fr.fromString(logRetrievalResponsesArrayBaseSlot),
638
+ AztecAddress.fromString(scope),
527
639
  );
528
640
  return [];
529
641
  }
530
642
 
531
- 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(
532
675
  [contractAddress]: ACVMField[],
533
676
  [slot]: ACVMField[],
534
677
  capsule: ACVMField[],
678
+ [scope]: ACVMField[],
535
679
  ): Promise<ACVMField[]> {
536
- await this.handlerAsUtility().utilityStoreCapsule(
680
+ this.handlerAsUtility().setCapsule(
537
681
  AztecAddress.fromField(Fr.fromString(contractAddress)),
538
682
  Fr.fromString(slot),
539
683
  capsule.map(Fr.fromString),
684
+ AztecAddress.fromField(Fr.fromString(scope)),
540
685
  );
541
- return [];
686
+ return Promise.resolve([]);
542
687
  }
543
688
 
544
- async utilityLoadCapsule(
689
+ // eslint-disable-next-line camelcase
690
+ async aztec_utl_getCapsule(
545
691
  [contractAddress]: ACVMField[],
546
692
  [slot]: ACVMField[],
547
693
  [tSize]: ACVMField[],
694
+ [scope]: ACVMField[],
548
695
  ): Promise<(ACVMField | ACVMField[])[]> {
549
- const values = await this.handlerAsUtility().utilityLoadCapsule(
696
+ const values = await this.handlerAsUtility().getCapsule(
550
697
  AztecAddress.fromField(Fr.fromString(contractAddress)),
551
698
  Fr.fromString(slot),
699
+ AztecAddress.fromField(Fr.fromString(scope)),
552
700
  );
553
701
 
554
702
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
@@ -562,30 +710,86 @@ export class Oracle {
562
710
  }
563
711
  }
564
712
 
565
- async utilityDeleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
566
- 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(
567
720
  AztecAddress.fromField(Fr.fromString(contractAddress)),
568
721
  Fr.fromString(slot),
722
+ AztecAddress.fromField(Fr.fromString(scope)),
569
723
  );
570
- return [];
724
+ return Promise.resolve([]);
571
725
  }
572
726
 
573
- async utilityCopyCapsule(
727
+ // eslint-disable-next-line camelcase
728
+ async aztec_utl_copyCapsule(
574
729
  [contractAddress]: ACVMField[],
575
730
  [srcSlot]: ACVMField[],
576
731
  [dstSlot]: ACVMField[],
577
732
  [numEntries]: ACVMField[],
733
+ [scope]: ACVMField[],
578
734
  ): Promise<ACVMField[]> {
579
- await this.handlerAsUtility().utilityCopyCapsule(
735
+ await this.handlerAsUtility().copyCapsule(
580
736
  AztecAddress.fromField(Fr.fromString(contractAddress)),
581
737
  Fr.fromString(srcSlot),
582
738
  Fr.fromString(dstSlot),
583
739
  Fr.fromString(numEntries).toNumber(),
740
+ AztecAddress.fromField(Fr.fromString(scope)),
584
741
  );
585
742
  return [];
586
743
  }
587
744
 
588
- 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(
589
793
  ciphertextBVecStorage: ACVMField[],
590
794
  [ciphertextLength]: ACVMField[],
591
795
  iv: ACVMField[],
@@ -595,36 +799,63 @@ export class Oracle {
595
799
  const ivBuffer = fromUintArray(iv, 8);
596
800
  const symKeyBuffer = fromUintArray(symKey, 8);
597
801
 
598
- const plaintext = await this.handlerAsUtility().utilityAes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
599
- 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
+ }
600
811
  }
601
812
 
602
- async utilityGetSharedSecret(
813
+ // eslint-disable-next-line camelcase
814
+ async aztec_utl_getSharedSecret(
603
815
  [address]: ACVMField[],
604
816
  [ephPKField0]: ACVMField[],
605
817
  [ephPKField1]: ACVMField[],
606
818
  [ephPKField2]: ACVMField[],
819
+ [contractAddress]: ACVMField[],
607
820
  ): Promise<ACVMField[]> {
608
- const secret = await this.handlerAsUtility().utilityGetSharedSecret(
821
+ const secret = await this.handlerAsUtility().getSharedSecret(
609
822
  AztecAddress.fromField(Fr.fromString(address)),
610
823
  Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
824
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
611
825
  );
612
- 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([]);
613
841
  }
614
842
 
615
- async utilityEmitOffchainEffect(data: ACVMField[]) {
616
- 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));
617
846
  return [];
618
847
  }
619
848
 
620
- async privateGetSenderForTags(): Promise<ACVMField[]> {
621
- 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();
622
852
  // Return [1, address] for Some(address), [0, 0] for None
623
853
  return sender ? [toACVMField(1n), toACVMField(sender)] : [toACVMField(0n), toACVMField(0n)];
624
854
  }
625
855
 
626
- async privateSetSenderForTags([senderForTags]: ACVMField[]): Promise<ACVMField[]> {
627
- 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)));
628
859
  return [];
629
860
  }
630
861
  }