@aztec/pxe 0.0.1-commit.b1c78909e → 0.0.1-commit.b2a5d0dd1

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 (210) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +6 -2
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +19 -1
  5. package/dest/config/index.d.ts +1 -1
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +7 -14
  8. package/dest/contract_function_simulator/contract_function_simulator.d.ts +13 -5
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  10. package/dest/contract_function_simulator/contract_function_simulator.js +35 -10
  11. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  12. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  13. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  14. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -5
  15. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  16. package/dest/contract_function_simulator/execution_tagging_index_cache.js +17 -9
  17. package/dest/contract_function_simulator/index.d.ts +2 -1
  18. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/index.js +1 -0
  20. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
  21. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +3 -6
  23. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
  24. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  25. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
  26. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
  27. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -4
  28. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  29. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +3 -6
  30. package/dest/contract_function_simulator/oracle/interfaces.d.ts +32 -19
  31. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  32. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
  33. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
  34. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
  35. package/dest/contract_function_simulator/oracle/oracle.d.ts +50 -18
  36. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  37. package/dest/contract_function_simulator/oracle/oracle.js +186 -39
  38. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  39. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +12 -23
  40. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  41. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +30 -28
  42. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +74 -42
  43. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +252 -87
  45. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  46. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  47. package/dest/contract_function_simulator/pick_notes.js +20 -3
  48. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  49. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  50. package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
  51. package/dest/contract_logging.d.ts +9 -4
  52. package/dest/contract_logging.d.ts.map +1 -1
  53. package/dest/contract_logging.js +21 -6
  54. package/dest/contract_sync/contract_sync_service.d.ts +6 -5
  55. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  56. package/dest/contract_sync/contract_sync_service.js +62 -43
  57. package/dest/contract_sync/helpers.d.ts +2 -3
  58. package/dest/contract_sync/helpers.d.ts.map +1 -1
  59. package/dest/contract_sync/helpers.js +7 -2
  60. package/dest/debug/pxe_debug_utils.d.ts +3 -3
  61. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  62. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  63. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  64. package/dest/entrypoints/client/bundle/index.js +0 -1
  65. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  66. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  67. package/dest/entrypoints/client/bundle/utils.js +2 -2
  68. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  69. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  70. package/dest/entrypoints/client/lazy/index.js +0 -1
  71. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  72. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  73. package/dest/entrypoints/client/lazy/utils.js +2 -2
  74. package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
  75. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  76. package/dest/entrypoints/pxe_creation_options.js +3 -1
  77. package/dest/entrypoints/server/index.d.ts +2 -3
  78. package/dest/entrypoints/server/index.d.ts.map +1 -1
  79. package/dest/entrypoints/server/index.js +1 -2
  80. package/dest/entrypoints/server/utils.d.ts +2 -2
  81. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  82. package/dest/entrypoints/server/utils.js +2 -2
  83. package/dest/events/event_service.d.ts +3 -2
  84. package/dest/events/event_service.d.ts.map +1 -1
  85. package/dest/events/event_service.js +26 -5
  86. package/dest/events/private_event_filter_validator.d.ts +3 -2
  87. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  88. package/dest/events/private_event_filter_validator.js +15 -0
  89. package/dest/logs/log_service.d.ts +7 -8
  90. package/dest/logs/log_service.d.ts.map +1 -1
  91. package/dest/logs/log_service.js +27 -37
  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 -5
  96. package/dest/notes/note_service.d.ts.map +1 -1
  97. package/dest/notes/note_service.js +14 -5
  98. package/dest/notes_filter.d.ts +2 -3
  99. package/dest/notes_filter.d.ts.map +1 -1
  100. package/dest/oracle_version.d.ts +4 -3
  101. package/dest/oracle_version.d.ts.map +1 -1
  102. package/dest/oracle_version.js +20 -10
  103. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  104. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  105. package/dest/private_kernel/private_kernel_execution_prover.js +4 -7
  106. package/dest/private_kernel/private_kernel_oracle.d.ts +5 -5
  107. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  108. package/dest/private_kernel/private_kernel_oracle.js +12 -15
  109. package/dest/pxe.d.ts +10 -7
  110. package/dest/pxe.d.ts.map +1 -1
  111. package/dest/pxe.js +58 -35
  112. package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
  113. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  114. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  115. package/dest/storage/capsule_store/capsule_service.js +50 -0
  116. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  117. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  118. package/dest/storage/capsule_store/capsule_store.js +36 -28
  119. package/dest/storage/capsule_store/index.d.ts +2 -1
  120. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  121. package/dest/storage/capsule_store/index.js +1 -0
  122. package/dest/storage/contract_store/contract_store.d.ts +1 -1
  123. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  124. package/dest/storage/contract_store/contract_store.js +4 -2
  125. package/dest/storage/metadata.d.ts +1 -1
  126. package/dest/storage/metadata.js +1 -1
  127. package/dest/storage/note_store/note_store.d.ts +1 -1
  128. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  129. package/dest/storage/note_store/note_store.js +2 -2
  130. package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
  131. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  132. package/dest/storage/private_event_store/private_event_store.js +3 -0
  133. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  134. package/dest/storage/tagging_store/sender_tagging_store.d.ts +26 -25
  135. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  136. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  137. package/dest/tagging/index.d.ts +2 -2
  138. package/dest/tagging/index.d.ts.map +1 -1
  139. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +2 -2
  140. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  141. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +2 -16
  142. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +1 -1
  143. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  144. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +10 -1
  145. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  146. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  147. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  148. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +2 -1
  149. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  150. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +24 -11
  151. package/package.json +16 -16
  152. package/src/bin/check_oracle_version.ts +4 -4
  153. package/src/block_synchronizer/block_synchronizer.ts +22 -2
  154. package/src/config/index.ts +2 -8
  155. package/src/contract_function_simulator/contract_function_simulator.ts +49 -14
  156. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  157. package/src/contract_function_simulator/execution_tagging_index_cache.ts +16 -11
  158. package/src/contract_function_simulator/index.ts +1 -0
  159. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -4
  160. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  161. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
  162. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -4
  163. package/src/contract_function_simulator/oracle/interfaces.ts +51 -17
  164. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  165. package/src/contract_function_simulator/oracle/oracle.ts +258 -34
  166. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  167. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +40 -34
  168. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +423 -114
  169. package/src/contract_function_simulator/pick_notes.ts +22 -3
  170. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  171. package/src/contract_logging.ts +18 -5
  172. package/src/contract_sync/contract_sync_service.ts +99 -75
  173. package/src/contract_sync/helpers.ts +4 -4
  174. package/src/debug/pxe_debug_utils.ts +3 -3
  175. package/src/entrypoints/client/bundle/index.ts +0 -1
  176. package/src/entrypoints/client/bundle/utils.ts +2 -3
  177. package/src/entrypoints/client/lazy/index.ts +0 -1
  178. package/src/entrypoints/client/lazy/utils.ts +2 -3
  179. package/src/entrypoints/pxe_creation_options.ts +7 -0
  180. package/src/entrypoints/server/index.ts +1 -2
  181. package/src/entrypoints/server/utils.ts +2 -3
  182. package/src/events/event_service.ts +30 -5
  183. package/src/events/private_event_filter_validator.ts +21 -1
  184. package/src/logs/log_service.ts +57 -78
  185. package/src/messages/message_context_service.ts +44 -0
  186. package/src/notes/note_service.ts +18 -8
  187. package/src/notes_filter.ts +1 -3
  188. package/src/oracle_version.ts +20 -10
  189. package/src/private_kernel/private_kernel_execution_prover.ts +4 -9
  190. package/src/private_kernel/private_kernel_oracle.ts +14 -14
  191. package/src/pxe.ts +113 -42
  192. package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
  193. package/src/storage/capsule_store/capsule_service.ts +90 -0
  194. package/src/storage/capsule_store/capsule_store.ts +44 -26
  195. package/src/storage/capsule_store/index.ts +1 -0
  196. package/src/storage/contract_store/contract_store.ts +8 -6
  197. package/src/storage/metadata.ts +1 -1
  198. package/src/storage/note_store/note_store.ts +2 -5
  199. package/src/storage/private_event_store/private_event_store.ts +4 -0
  200. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  201. package/src/storage/tagging_store/sender_tagging_store.ts +182 -135
  202. package/src/tagging/index.ts +1 -1
  203. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +5 -15
  204. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +19 -1
  205. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  206. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +19 -9
  207. package/dest/access_scopes.d.ts +0 -9
  208. package/dest/access_scopes.d.ts.map +0 -1
  209. package/dest/access_scopes.js +0 -6
  210. package/src/access_scopes.ts +0 -9
@@ -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) {}
@@ -85,16 +106,73 @@ 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
170
  // eslint-disable-next-line camelcase
96
- aztec_utl_assertCompatibleOracleVersion([version]: ACVMField[]) {
97
- this.handlerAsMisc().assertCompatibleOracleVersion(Fr.fromString(version).toNumber());
171
+ aztec_utl_assertCompatibleOracleVersionV2([major]: ACVMField[], [minor]: ACVMField[]) {
172
+ this.handlerAsMisc().assertCompatibleOracleVersion(
173
+ Fr.fromString(major).toNumber(),
174
+ Fr.fromString(minor).toNumber(),
175
+ );
98
176
  return Promise.resolve([]);
99
177
  }
100
178
 
@@ -105,14 +183,14 @@ export class Oracle {
105
183
  }
106
184
 
107
185
  // eslint-disable-next-line camelcase
108
- aztec_prv_storeInExecutionCache(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
109
- this.handlerAsPrivate().storeInExecutionCache(values.map(Fr.fromString), Fr.fromString(hash));
186
+ aztec_prv_setHashPreimage(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
187
+ this.handlerAsPrivate().setHashPreimage(values.map(Fr.fromString), Fr.fromString(hash));
110
188
  return Promise.resolve([]);
111
189
  }
112
190
 
113
191
  // eslint-disable-next-line camelcase
114
- async aztec_prv_loadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
115
- const values = await this.handlerAsPrivate().loadFromExecutionCache(Fr.fromString(returnsHash));
192
+ async aztec_prv_getHashPreimage([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
193
+ const values = await this.handlerAsPrivate().getHashPreimage(Fr.fromString(returnsHash));
116
194
  return [values.map(toACVMField)];
117
195
  }
118
196
 
@@ -249,9 +327,9 @@ export class Oracle {
249
327
  }
250
328
 
251
329
  // eslint-disable-next-line camelcase
252
- async aztec_utl_tryGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
330
+ async aztec_utl_getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
253
331
  const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
254
- const result = await this.handlerAsUtility().tryGetPublicKeysAndPartialAddress(parsedAddress);
332
+ const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(parsedAddress);
255
333
 
256
334
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
257
335
  // with two fields: `some` (a boolean) and `value` (a field array in this case).
@@ -377,8 +455,8 @@ export class Oracle {
377
455
  }
378
456
 
379
457
  // eslint-disable-next-line camelcase
380
- async aztec_utl_checkNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
381
- const exists = await this.handlerAsUtility().checkNullifierExists(Fr.fromString(innerNullifier));
458
+ async aztec_utl_doesNullifierExist([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
459
+ const exists = await this.handlerAsUtility().doesNullifierExist(Fr.fromString(innerNullifier));
382
460
  return [toACVMField(exists)];
383
461
  }
384
462
 
@@ -397,13 +475,13 @@ export class Oracle {
397
475
  }
398
476
 
399
477
  // eslint-disable-next-line camelcase
400
- async aztec_utl_storageRead(
478
+ async aztec_utl_getFromPublicStorage(
401
479
  [blockHash]: ACVMField[],
402
480
  [contractAddress]: ACVMField[],
403
481
  [startStorageSlot]: ACVMField[],
404
482
  [numberOfElements]: ACVMField[],
405
483
  ): Promise<ACVMField[][]> {
406
- const values = await this.handlerAsUtility().storageRead(
484
+ const values = await this.handlerAsUtility().getFromPublicStorage(
407
485
  BlockHash.fromString(blockHash),
408
486
  new AztecAddress(Fr.fromString(contractAddress)),
409
487
  Fr.fromString(startStorageSlot),
@@ -461,8 +539,8 @@ export class Oracle {
461
539
  }
462
540
 
463
541
  // eslint-disable-next-line camelcase
464
- async aztec_prv_validatePublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
465
- await this.handlerAsPrivate().validatePublicCalldata(Fr.fromString(calldataHash));
542
+ async aztec_prv_assertValidPublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
543
+ await this.handlerAsPrivate().assertValidPublicCalldata(Fr.fromString(calldataHash));
466
544
  return [];
467
545
  }
468
546
 
@@ -473,8 +551,10 @@ export class Oracle {
473
551
  }
474
552
 
475
553
  // eslint-disable-next-line camelcase
476
- async aztec_prv_inRevertiblePhase([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
477
- const isRevertible = await this.handlerAsPrivate().inRevertiblePhase(Fr.fromString(sideEffectCounter).toNumber());
554
+ async aztec_prv_isExecutionInRevertiblePhase([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
555
+ const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(
556
+ Fr.fromString(sideEffectCounter).toNumber(),
557
+ );
478
558
  return Promise.resolve([toACVMField(isRevertible)]);
479
559
  }
480
560
 
@@ -488,11 +568,23 @@ export class Oracle {
488
568
  }
489
569
 
490
570
  // eslint-disable-next-line camelcase
491
- async aztec_utl_fetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
492
- await this.handlerAsUtility().fetchTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot));
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
+ );
493
579
  return [];
494
580
  }
495
581
 
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
+
496
588
  // eslint-disable-next-line camelcase
497
589
  async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(
498
590
  [contractAddress]: ACVMField[],
@@ -500,6 +592,7 @@ export class Oracle {
500
592
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
501
593
  [maxNotePackedLen]: ACVMField[],
502
594
  [maxEventSerializedLen]: ACVMField[],
595
+ [scope]: ACVMField[],
503
596
  ): Promise<ACVMField[]> {
504
597
  await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
505
598
  AztecAddress.fromString(contractAddress),
@@ -507,48 +600,103 @@ export class Oracle {
507
600
  Fr.fromString(eventValidationRequestsArrayBaseSlot),
508
601
  Fr.fromString(maxNotePackedLen).toNumber(),
509
602
  Fr.fromString(maxEventSerializedLen).toNumber(),
603
+ AztecAddress.fromString(scope),
510
604
  );
511
605
 
512
606
  return [];
513
607
  }
514
608
 
515
609
  // eslint-disable-next-line camelcase
516
- async aztec_utl_bulkRetrieveLogs(
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(
517
629
  [contractAddress]: ACVMField[],
518
630
  [logRetrievalRequestsArrayBaseSlot]: ACVMField[],
519
631
  [logRetrievalResponsesArrayBaseSlot]: ACVMField[],
632
+ [scope]: ACVMField[],
520
633
  ): Promise<ACVMField[]> {
521
- await this.handlerAsUtility().bulkRetrieveLogs(
634
+ await this.handlerAsUtility().getLogsByTag(
522
635
  AztecAddress.fromString(contractAddress),
523
636
  Fr.fromString(logRetrievalRequestsArrayBaseSlot),
524
637
  Fr.fromString(logRetrievalResponsesArrayBaseSlot),
638
+ AztecAddress.fromString(scope),
525
639
  );
526
640
  return [];
527
641
  }
528
642
 
529
643
  // eslint-disable-next-line camelcase
530
- async aztec_utl_storeCapsule(
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(
531
675
  [contractAddress]: ACVMField[],
532
676
  [slot]: ACVMField[],
533
677
  capsule: ACVMField[],
678
+ [scope]: ACVMField[],
534
679
  ): Promise<ACVMField[]> {
535
- await this.handlerAsUtility().storeCapsule(
680
+ this.handlerAsUtility().setCapsule(
536
681
  AztecAddress.fromField(Fr.fromString(contractAddress)),
537
682
  Fr.fromString(slot),
538
683
  capsule.map(Fr.fromString),
684
+ AztecAddress.fromField(Fr.fromString(scope)),
539
685
  );
540
- return [];
686
+ return Promise.resolve([]);
541
687
  }
542
688
 
543
689
  // eslint-disable-next-line camelcase
544
- async aztec_utl_loadCapsule(
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().loadCapsule(
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
@@ -563,12 +711,17 @@ export class Oracle {
563
711
  }
564
712
 
565
713
  // eslint-disable-next-line camelcase
566
- async aztec_utl_deleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
567
- await this.handlerAsUtility().deleteCapsule(
714
+ aztec_utl_deleteCapsule(
715
+ [contractAddress]: ACVMField[],
716
+ [slot]: ACVMField[],
717
+ [scope]: ACVMField[],
718
+ ): Promise<ACVMField[]> {
719
+ this.handlerAsUtility().deleteCapsule(
568
720
  AztecAddress.fromField(Fr.fromString(contractAddress)),
569
721
  Fr.fromString(slot),
722
+ AztecAddress.fromField(Fr.fromString(scope)),
570
723
  );
571
- return [];
724
+ return Promise.resolve([]);
572
725
  }
573
726
 
574
727
  // eslint-disable-next-line camelcase
@@ -577,18 +730,66 @@ export class Oracle {
577
730
  [srcSlot]: ACVMField[],
578
731
  [dstSlot]: ACVMField[],
579
732
  [numEntries]: ACVMField[],
733
+ [scope]: ACVMField[],
580
734
  ): Promise<ACVMField[]> {
581
735
  await this.handlerAsUtility().copyCapsule(
582
736
  AztecAddress.fromField(Fr.fromString(contractAddress)),
583
737
  Fr.fromString(srcSlot),
584
738
  Fr.fromString(dstSlot),
585
739
  Fr.fromString(numEntries).toNumber(),
740
+ AztecAddress.fromField(Fr.fromString(scope)),
586
741
  );
587
742
  return [];
588
743
  }
589
744
 
590
745
  // eslint-disable-next-line camelcase
591
- async aztec_utl_aes128Decrypt(
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(
592
793
  ciphertextBVecStorage: ACVMField[],
593
794
  [ciphertextLength]: ACVMField[],
594
795
  iv: ACVMField[],
@@ -598,8 +799,15 @@ export class Oracle {
598
799
  const ivBuffer = fromUintArray(iv, 8);
599
800
  const symKeyBuffer = fromUintArray(symKey, 8);
600
801
 
601
- const plaintext = await this.handlerAsUtility().aes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
602
- 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
+ }
603
811
  }
604
812
 
605
813
  // eslint-disable-next-line camelcase
@@ -608,17 +816,33 @@ export class Oracle {
608
816
  [ephPKField0]: ACVMField[],
609
817
  [ephPKField1]: ACVMField[],
610
818
  [ephPKField2]: ACVMField[],
819
+ [contractAddress]: ACVMField[],
611
820
  ): Promise<ACVMField[]> {
612
821
  const secret = await this.handlerAsUtility().getSharedSecret(
613
822
  AztecAddress.fromField(Fr.fromString(address)),
614
823
  Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
824
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
825
+ );
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,
615
839
  );
616
- return secret.toFields().map(toACVMField);
840
+ return Promise.resolve([]);
617
841
  }
618
842
 
619
843
  // eslint-disable-next-line camelcase
620
844
  async aztec_utl_emitOffchainEffect(data: ACVMField[]) {
621
- await this.handlerAsPrivate().emitOffchainEffect(data.map(Fr.fromString));
845
+ await this.handlerAsUtility().emitOffchainEffect(data.map(Fr.fromString));
622
846
  return [];
623
847
  }
624
848
 
@@ -76,12 +76,12 @@ export async function executePrivateFunction(
76
76
 
77
77
  const contractClassLogs = privateExecutionOracle.getContractClassLogs();
78
78
 
79
- const rawReturnValues = await privateExecutionOracle.loadFromExecutionCache(publicInputs.returnsHash);
79
+ const rawReturnValues = await privateExecutionOracle.getHashPreimage(publicInputs.returnsHash);
80
80
 
81
81
  const newNotes = privateExecutionOracle.getNewNotes();
82
82
  const noteHashNullifierCounterMap = privateExecutionOracle.getNoteHashNullifierCounterMap();
83
83
  const offchainEffects = privateExecutionOracle.getOffchainEffects();
84
- const preTags = privateExecutionOracle.getUsedPreTags();
84
+ const taggingIndexRanges = privateExecutionOracle.getUsedTaggingIndexRanges();
85
85
  const nestedExecutionResults = privateExecutionOracle.getNestedExecutionResults();
86
86
 
87
87
  let timerSubtractionList = nestedExecutionResults;
@@ -103,8 +103,8 @@ export async function executePrivateFunction(
103
103
  newNotes,
104
104
  noteHashNullifierCounterMap,
105
105
  rawReturnValues,
106
- offchainEffects,
107
- preTags,
106
+ offchainEffects.map(e => ({ data: e.data })),
107
+ taggingIndexRanges,
108
108
  nestedExecutionResults,
109
109
  contractClassLogs,
110
110
  {