@aztec/txe 0.0.1-commit.dbf9cec → 0.0.1-commit.ddcf04837

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 (56) hide show
  1. package/dest/index.d.ts +1 -1
  2. package/dest/index.d.ts.map +1 -1
  3. package/dest/index.js +8 -6
  4. package/dest/oracle/interfaces.d.ts +28 -28
  5. package/dest/oracle/interfaces.d.ts.map +1 -1
  6. package/dest/oracle/txe_oracle_public_context.d.ts +13 -13
  7. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  8. package/dest/oracle/txe_oracle_public_context.js +12 -12
  9. package/dest/oracle/txe_oracle_top_level_context.d.ts +27 -21
  10. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  11. package/dest/oracle/txe_oracle_top_level_context.js +56 -39
  12. package/dest/rpc_translator.d.ts +120 -82
  13. package/dest/rpc_translator.d.ts.map +1 -1
  14. package/dest/rpc_translator.js +372 -162
  15. package/dest/state_machine/archiver.d.ts +3 -3
  16. package/dest/state_machine/archiver.d.ts.map +1 -1
  17. package/dest/state_machine/archiver.js +7 -8
  18. package/dest/state_machine/dummy_p2p_client.d.ts +3 -2
  19. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  20. package/dest/state_machine/dummy_p2p_client.js +5 -2
  21. package/dest/state_machine/global_variable_builder.d.ts +9 -4
  22. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  23. package/dest/state_machine/global_variable_builder.js +9 -3
  24. package/dest/state_machine/index.d.ts +4 -2
  25. package/dest/state_machine/index.d.ts.map +1 -1
  26. package/dest/state_machine/index.js +8 -4
  27. package/dest/state_machine/mock_epoch_cache.d.ts +18 -3
  28. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  29. package/dest/state_machine/mock_epoch_cache.js +35 -2
  30. package/dest/state_machine/synchronizer.d.ts +5 -5
  31. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  32. package/dest/state_machine/synchronizer.js +3 -3
  33. package/dest/txe_session.d.ts +4 -3
  34. package/dest/txe_session.d.ts.map +1 -1
  35. package/dest/txe_session.js +27 -15
  36. package/dest/util/encoding.d.ts +71 -1
  37. package/dest/util/encoding.d.ts.map +1 -1
  38. package/dest/util/encoding.js +4 -0
  39. package/dest/util/txe_public_contract_data_source.d.ts +1 -1
  40. package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
  41. package/dest/util/txe_public_contract_data_source.js +1 -3
  42. package/package.json +15 -15
  43. package/src/index.ts +8 -5
  44. package/src/oracle/interfaces.ts +27 -31
  45. package/src/oracle/txe_oracle_public_context.ts +12 -12
  46. package/src/oracle/txe_oracle_top_level_context.ts +66 -43
  47. package/src/rpc_translator.ts +431 -183
  48. package/src/state_machine/archiver.ts +6 -5
  49. package/src/state_machine/dummy_p2p_client.ts +6 -2
  50. package/src/state_machine/global_variable_builder.ts +18 -3
  51. package/src/state_machine/index.ts +8 -2
  52. package/src/state_machine/mock_epoch_cache.ts +46 -3
  53. package/src/state_machine/synchronizer.ts +4 -4
  54. package/src/txe_session.ts +29 -13
  55. package/src/util/encoding.ts +5 -0
  56. package/src/util/txe_public_contract_data_source.ts +0 -2
@@ -4,9 +4,8 @@ import { BlockNumber } from '@aztec/foundation/branded-types';
4
4
  import { packAsHintedNote } from '@aztec/pxe/simulator';
5
5
  import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
6
6
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
7
- import { BlockHash } from '@aztec/stdlib/block';
8
- import { addressFromSingle, arrayOfArraysToBoundedVecOfArrays, arrayToBoundedVec, bufferToU8Array, fromArray, fromSingle, fromUintArray, fromUintBoundedVec, toArray, toForeignCallResult, toSingle } from './util/encoding.js';
9
- const MAX_EVENT_LEN = 12; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_RESERVED_FIELDS
7
+ import { addressFromSingle, arrayOfArraysToBoundedVecOfArrays, arrayToBoundedVec, blockHashFromSingle, bufferToU8Array, fromArray, fromSingle, fromUintArray, fromUintBoundedVec, toArray, toForeignCallResult, toSingle } from './util/encoding.js';
8
+ const MAX_EVENT_LEN = 10; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN
10
9
  const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
11
10
  export class UnavailableOracleError extends Error {
12
11
  constructor(oracleName){
@@ -61,59 +60,69 @@ export class RPCTranslator {
61
60
  return this.oracleHandler;
62
61
  }
63
62
  // TXE session state transition functions - these get handled by the state handler
64
- async txeSetTopLevelTXEContext() {
63
+ // eslint-disable-next-line camelcase
64
+ async aztec_txe_setTopLevelTXEContext() {
65
65
  await this.stateHandler.enterTopLevelState();
66
66
  return toForeignCallResult([]);
67
67
  }
68
- async txeSetPrivateTXEContext(foreignContractAddressIsSome, foreignContractAddressValue, foreignAnchorBlockNumberIsSome, foreignAnchorBlockNumberValue) {
68
+ // eslint-disable-next-line camelcase
69
+ async aztec_txe_setPrivateTXEContext(foreignContractAddressIsSome, foreignContractAddressValue, foreignAnchorBlockNumberIsSome, foreignAnchorBlockNumberValue) {
69
70
  const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
70
71
  const anchorBlockNumber = fromSingle(foreignAnchorBlockNumberIsSome).toBool() ? BlockNumber(fromSingle(foreignAnchorBlockNumberValue).toNumber()) : undefined;
71
72
  const privateContextInputs = await this.stateHandler.enterPrivateState(contractAddress, anchorBlockNumber);
72
73
  return toForeignCallResult(privateContextInputs.toFields().map(toSingle));
73
74
  }
74
- async txeSetPublicTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
75
+ // eslint-disable-next-line camelcase
76
+ async aztec_txe_setPublicTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
75
77
  const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
76
78
  await this.stateHandler.enterPublicState(contractAddress);
77
79
  return toForeignCallResult([]);
78
80
  }
79
- async txeSetUtilityTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
81
+ // eslint-disable-next-line camelcase
82
+ async aztec_txe_setUtilityTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
80
83
  const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
81
84
  await this.stateHandler.enterUtilityState(contractAddress);
82
85
  return toForeignCallResult([]);
83
86
  }
84
87
  // Other oracles - these get handled by the oracle handler
85
88
  // TXE-specific oracles
86
- txeGetDefaultAddress() {
87
- const defaultAddress = this.handlerAsTxe().txeGetDefaultAddress();
89
+ // eslint-disable-next-line camelcase
90
+ aztec_txe_getDefaultAddress() {
91
+ const defaultAddress = this.handlerAsTxe().getDefaultAddress();
88
92
  return toForeignCallResult([
89
93
  toSingle(defaultAddress)
90
94
  ]);
91
95
  }
92
- async txeGetNextBlockNumber() {
93
- const nextBlockNumber = await this.handlerAsTxe().txeGetNextBlockNumber();
96
+ // eslint-disable-next-line camelcase
97
+ async aztec_txe_getNextBlockNumber() {
98
+ const nextBlockNumber = await this.handlerAsTxe().getNextBlockNumber();
94
99
  return toForeignCallResult([
95
100
  toSingle(nextBlockNumber)
96
101
  ]);
97
102
  }
98
- async txeGetNextBlockTimestamp() {
99
- const nextBlockTimestamp = await this.handlerAsTxe().txeGetNextBlockTimestamp();
103
+ // eslint-disable-next-line camelcase
104
+ async aztec_txe_getNextBlockTimestamp() {
105
+ const nextBlockTimestamp = await this.handlerAsTxe().getNextBlockTimestamp();
100
106
  return toForeignCallResult([
101
107
  toSingle(nextBlockTimestamp)
102
108
  ]);
103
109
  }
104
- async txeAdvanceBlocksBy(foreignBlocks) {
110
+ // eslint-disable-next-line camelcase
111
+ async aztec_txe_advanceBlocksBy(foreignBlocks) {
105
112
  const blocks = fromSingle(foreignBlocks).toNumber();
106
- await this.handlerAsTxe().txeAdvanceBlocksBy(blocks);
113
+ await this.handlerAsTxe().advanceBlocksBy(blocks);
107
114
  return toForeignCallResult([]);
108
115
  }
109
- txeAdvanceTimestampBy(foreignDuration) {
116
+ // eslint-disable-next-line camelcase
117
+ aztec_txe_advanceTimestampBy(foreignDuration) {
110
118
  const duration = fromSingle(foreignDuration).toBigInt();
111
- this.handlerAsTxe().txeAdvanceTimestampBy(duration);
119
+ this.handlerAsTxe().advanceTimestampBy(duration);
112
120
  return toForeignCallResult([]);
113
121
  }
114
- async txeDeploy(artifact, instance, foreignSecret) {
122
+ // eslint-disable-next-line camelcase
123
+ async aztec_txe_deploy(artifact, instance, foreignSecret) {
115
124
  const secret = fromSingle(foreignSecret);
116
- await this.handlerAsTxe().txeDeploy(artifact, instance, secret);
125
+ await this.handlerAsTxe().deploy(artifact, instance, secret);
117
126
  return toForeignCallResult([
118
127
  toArray([
119
128
  instance.salt,
@@ -124,55 +133,64 @@ export class RPCTranslator {
124
133
  ])
125
134
  ]);
126
135
  }
127
- async txeCreateAccount(foreignSecret) {
136
+ // eslint-disable-next-line camelcase
137
+ async aztec_txe_createAccount(foreignSecret) {
128
138
  const secret = fromSingle(foreignSecret);
129
- const completeAddress = await this.handlerAsTxe().txeCreateAccount(secret);
139
+ const completeAddress = await this.handlerAsTxe().createAccount(secret);
130
140
  return toForeignCallResult([
131
141
  toSingle(completeAddress.address),
132
142
  ...completeAddress.publicKeys.toFields().map(toSingle)
133
143
  ]);
134
144
  }
135
- async txeAddAccount(artifact, instance, foreignSecret) {
145
+ // eslint-disable-next-line camelcase
146
+ async aztec_txe_addAccount(artifact, instance, foreignSecret) {
136
147
  const secret = fromSingle(foreignSecret);
137
- const completeAddress = await this.handlerAsTxe().txeAddAccount(artifact, instance, secret);
148
+ const completeAddress = await this.handlerAsTxe().addAccount(artifact, instance, secret);
138
149
  return toForeignCallResult([
139
150
  toSingle(completeAddress.address),
140
151
  ...completeAddress.publicKeys.toFields().map(toSingle)
141
152
  ]);
142
153
  }
143
- async txeAddAuthWitness(foreignAddress, foreignMessageHash) {
154
+ // eslint-disable-next-line camelcase
155
+ async aztec_txe_addAuthWitness(foreignAddress, foreignMessageHash) {
144
156
  const address = addressFromSingle(foreignAddress);
145
157
  const messageHash = fromSingle(foreignMessageHash);
146
- await this.handlerAsTxe().txeAddAuthWitness(address, messageHash);
158
+ await this.handlerAsTxe().addAuthWitness(address, messageHash);
147
159
  return toForeignCallResult([]);
148
160
  }
149
161
  // PXE oracles
150
- utilityAssertCompatibleOracleVersion(foreignVersion) {
151
- const version = fromSingle(foreignVersion).toNumber();
152
- this.handlerAsMisc().utilityAssertCompatibleOracleVersion(version);
162
+ // eslint-disable-next-line camelcase
163
+ aztec_utl_assertCompatibleOracleVersionV2(foreignMajor, foreignMinor) {
164
+ const major = fromSingle(foreignMajor).toNumber();
165
+ const minor = fromSingle(foreignMinor).toNumber();
166
+ this.handlerAsMisc().assertCompatibleOracleVersion(major, minor);
153
167
  return toForeignCallResult([]);
154
168
  }
155
- utilityGetRandomField() {
156
- const randomField = this.handlerAsMisc().utilityGetRandomField();
169
+ // eslint-disable-next-line camelcase
170
+ aztec_utl_getRandomField() {
171
+ const randomField = this.handlerAsMisc().getRandomField();
157
172
  return toForeignCallResult([
158
173
  toSingle(randomField)
159
174
  ]);
160
175
  }
161
- async txeGetLastBlockTimestamp() {
162
- const timestamp = await this.handlerAsTxe().txeGetLastBlockTimestamp();
176
+ // eslint-disable-next-line camelcase
177
+ async aztec_txe_getLastBlockTimestamp() {
178
+ const timestamp = await this.handlerAsTxe().getLastBlockTimestamp();
163
179
  return toForeignCallResult([
164
180
  toSingle(new Fr(timestamp))
165
181
  ]);
166
182
  }
167
- async txeGetLastTxEffects() {
168
- const { txHash, noteHashes, nullifiers } = await this.handlerAsTxe().txeGetLastTxEffects();
183
+ // eslint-disable-next-line camelcase
184
+ async aztec_txe_getLastTxEffects() {
185
+ const { txHash, noteHashes, nullifiers } = await this.handlerAsTxe().getLastTxEffects();
169
186
  return toForeignCallResult([
170
187
  toSingle(txHash.hash),
171
188
  ...arrayToBoundedVec(toArray(noteHashes), MAX_NOTE_HASHES_PER_TX),
172
189
  ...arrayToBoundedVec(toArray(nullifiers), MAX_NULLIFIERS_PER_TX)
173
190
  ]);
174
191
  }
175
- async txeGetPrivateEvents(foreignSelector, foreignContractAddress, foreignScope) {
192
+ // eslint-disable-next-line camelcase
193
+ async aztec_txe_getPrivateEvents(foreignSelector, foreignContractAddress, foreignScope) {
176
194
  const selector = EventSelector.fromField(fromSingle(foreignSelector));
177
195
  const contractAddress = addressFromSingle(foreignContractAddress);
178
196
  const scope = addressFromSingle(foreignScope);
@@ -182,7 +200,7 @@ export class RPCTranslator {
182
200
  // We cycle job to commit the stores after the contract sync.
183
201
  await this.stateHandler.cycleJob();
184
202
  }
185
- const events = await this.handlerAsTxe().txeGetPrivateEvents(selector, contractAddress, scope);
203
+ const events = await this.handlerAsTxe().getPrivateEvents(selector, contractAddress, scope);
186
204
  if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
187
205
  throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
188
206
  }
@@ -200,48 +218,54 @@ export class RPCTranslator {
200
218
  toSingle(queryLength)
201
219
  ]);
202
220
  }
203
- privateStoreInExecutionCache(foreignValues, foreignHash) {
221
+ // eslint-disable-next-line camelcase
222
+ aztec_prv_setHashPreimage(foreignValues, foreignHash) {
204
223
  const values = fromArray(foreignValues);
205
224
  const hash = fromSingle(foreignHash);
206
- this.handlerAsPrivate().privateStoreInExecutionCache(values, hash);
225
+ this.handlerAsPrivate().setHashPreimage(values, hash);
207
226
  return toForeignCallResult([]);
208
227
  }
209
- async privateLoadFromExecutionCache(foreignHash) {
228
+ // eslint-disable-next-line camelcase
229
+ async aztec_prv_getHashPreimage(foreignHash) {
210
230
  const hash = fromSingle(foreignHash);
211
- const returns = await this.handlerAsPrivate().privateLoadFromExecutionCache(hash);
231
+ const returns = await this.handlerAsPrivate().getHashPreimage(hash);
212
232
  return toForeignCallResult([
213
233
  toArray(returns)
214
234
  ]);
215
235
  }
216
236
  // When the argument is a slice, noir automatically adds a length field to oracle call.
217
237
  // When the argument is an array, we add the field length manually to the signature.
218
- async utilityLog(foreignLevel, foreignMessage, _foreignLength, foreignFields) {
238
+ // eslint-disable-next-line camelcase
239
+ async aztec_utl_log(foreignLevel, foreignMessage, _foreignLength, foreignFields) {
219
240
  const level = fromSingle(foreignLevel).toNumber();
220
241
  const message = fromArray(foreignMessage).map((field)=>String.fromCharCode(field.toNumber())).join('');
221
242
  const fields = fromArray(foreignFields);
222
- await this.handlerAsMisc().utilityLog(level, message, fields);
243
+ await this.handlerAsMisc().log(level, message, fields);
223
244
  return toForeignCallResult([]);
224
245
  }
225
- async utilityStorageRead(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
226
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
246
+ // eslint-disable-next-line camelcase
247
+ async aztec_utl_getFromPublicStorage(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
248
+ const blockHash = blockHashFromSingle(foreignBlockHash);
227
249
  const contractAddress = addressFromSingle(foreignContractAddress);
228
250
  const startStorageSlot = fromSingle(foreignStartStorageSlot);
229
251
  const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
230
- const values = await this.handlerAsUtility().utilityStorageRead(blockHash, contractAddress, startStorageSlot, numberOfElements);
252
+ const values = await this.handlerAsUtility().getFromPublicStorage(blockHash, contractAddress, startStorageSlot, numberOfElements);
231
253
  return toForeignCallResult([
232
254
  toArray(values)
233
255
  ]);
234
256
  }
235
- async utilityGetPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
236
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
257
+ // eslint-disable-next-line camelcase
258
+ async aztec_utl_getPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
259
+ const blockHash = blockHashFromSingle(foreignBlockHash);
237
260
  const leafSlot = fromSingle(foreignLeafSlot);
238
- const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(blockHash, leafSlot);
261
+ const witness = await this.handlerAsUtility().getPublicDataWitness(blockHash, leafSlot);
239
262
  if (!witness) {
240
263
  throw new Error(`Public data witness not found for slot ${leafSlot} at block ${blockHash.toString()}.`);
241
264
  }
242
265
  return toForeignCallResult(witness.toNoirRepresentation());
243
266
  }
244
- async utilityGetNotes(foreignOwnerIsSome, foreignOwnerValue, foreignStorageSlot, foreignNumSelects, foreignSelectByIndexes, foreignSelectByOffsets, foreignSelectByLengths, foreignSelectValues, foreignSelectComparators, foreignSortByIndexes, foreignSortByOffsets, foreignSortByLengths, foreignSortOrder, foreignLimit, foreignOffset, foreignStatus, foreignMaxNotes, foreignPackedHintedNoteLength) {
267
+ // eslint-disable-next-line camelcase
268
+ async aztec_utl_getNotes(foreignOwnerIsSome, foreignOwnerValue, foreignStorageSlot, foreignNumSelects, foreignSelectByIndexes, foreignSelectByOffsets, foreignSelectByLengths, foreignSelectValues, foreignSelectComparators, foreignSortByIndexes, foreignSortByOffsets, foreignSortByLengths, foreignSortOrder, foreignLimit, foreignOffset, foreignStatus, foreignMaxNotes, foreignPackedHintedNoteLength) {
245
269
  // Parse Option<AztecAddress>: ownerIsSome is 0 for None, 1 for Some
246
270
  const owner = fromSingle(foreignOwnerIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignOwnerValue)) : undefined;
247
271
  const storageSlot = fromSingle(foreignStorageSlot);
@@ -260,7 +284,7 @@ export class RPCTranslator {
260
284
  const status = fromSingle(foreignStatus).toNumber();
261
285
  const maxNotes = fromSingle(foreignMaxNotes).toNumber();
262
286
  const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
263
- const noteDatas = await this.handlerAsUtility().utilityGetNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status);
287
+ const noteDatas = await this.handlerAsUtility().getNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status);
264
288
  const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>packAsHintedNote({
265
289
  contractAddress: noteData.contractAddress,
266
290
  owner: noteData.owner,
@@ -275,7 +299,8 @@ export class RPCTranslator {
275
299
  // At last we convert the array of arrays to a bounded vec of arrays
276
300
  return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes, packedHintedNoteLength));
277
301
  }
278
- privateNotifyCreatedNote(foreignOwner, foreignStorageSlot, foreignRandomness, foreignNoteTypeId, foreignNote, foreignNoteHash, foreignCounter) {
302
+ // eslint-disable-next-line camelcase
303
+ aztec_prv_notifyCreatedNote(foreignOwner, foreignStorageSlot, foreignRandomness, foreignNoteTypeId, foreignNote, foreignNoteHash, foreignCounter) {
279
304
  const owner = addressFromSingle(foreignOwner);
280
305
  const storageSlot = fromSingle(foreignStorageSlot);
281
306
  const randomness = fromSingle(foreignRandomness);
@@ -283,39 +308,44 @@ export class RPCTranslator {
283
308
  const note = fromArray(foreignNote);
284
309
  const noteHash = fromSingle(foreignNoteHash);
285
310
  const counter = fromSingle(foreignCounter).toNumber();
286
- this.handlerAsPrivate().privateNotifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter);
311
+ this.handlerAsPrivate().notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter);
287
312
  return toForeignCallResult([]);
288
313
  }
289
- async privateNotifyNullifiedNote(foreignInnerNullifier, foreignNoteHash, foreignCounter) {
314
+ // eslint-disable-next-line camelcase
315
+ async aztec_prv_notifyNullifiedNote(foreignInnerNullifier, foreignNoteHash, foreignCounter) {
290
316
  const innerNullifier = fromSingle(foreignInnerNullifier);
291
317
  const noteHash = fromSingle(foreignNoteHash);
292
318
  const counter = fromSingle(foreignCounter).toNumber();
293
- await this.handlerAsPrivate().privateNotifyNullifiedNote(innerNullifier, noteHash, counter);
319
+ await this.handlerAsPrivate().notifyNullifiedNote(innerNullifier, noteHash, counter);
294
320
  return toForeignCallResult([]);
295
321
  }
296
- async privateNotifyCreatedNullifier(foreignInnerNullifier) {
322
+ // eslint-disable-next-line camelcase
323
+ async aztec_prv_notifyCreatedNullifier(foreignInnerNullifier) {
297
324
  const innerNullifier = fromSingle(foreignInnerNullifier);
298
- await this.handlerAsPrivate().privateNotifyCreatedNullifier(innerNullifier);
325
+ await this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier);
299
326
  return toForeignCallResult([]);
300
327
  }
301
- async privateIsNullifierPending(foreignInnerNullifier, foreignContractAddress) {
328
+ // eslint-disable-next-line camelcase
329
+ async aztec_prv_isNullifierPending(foreignInnerNullifier, foreignContractAddress) {
302
330
  const innerNullifier = fromSingle(foreignInnerNullifier);
303
331
  const contractAddress = addressFromSingle(foreignContractAddress);
304
- const isPending = await this.handlerAsPrivate().privateIsNullifierPending(innerNullifier, contractAddress);
332
+ const isPending = await this.handlerAsPrivate().isNullifierPending(innerNullifier, contractAddress);
305
333
  return toForeignCallResult([
306
334
  toSingle(new Fr(isPending))
307
335
  ]);
308
336
  }
309
- async utilityCheckNullifierExists(foreignInnerNullifier) {
337
+ // eslint-disable-next-line camelcase
338
+ async aztec_utl_doesNullifierExist(foreignInnerNullifier) {
310
339
  const innerNullifier = fromSingle(foreignInnerNullifier);
311
- const exists = await this.handlerAsUtility().utilityCheckNullifierExists(innerNullifier);
340
+ const exists = await this.handlerAsUtility().doesNullifierExist(innerNullifier);
312
341
  return toForeignCallResult([
313
342
  toSingle(new Fr(exists))
314
343
  ]);
315
344
  }
316
- async utilityGetContractInstance(foreignAddress) {
345
+ // eslint-disable-next-line camelcase
346
+ async aztec_utl_getContractInstance(foreignAddress) {
317
347
  const address = addressFromSingle(foreignAddress);
318
- const instance = await this.handlerAsUtility().utilityGetContractInstance(address);
348
+ const instance = await this.handlerAsUtility().getContractInstance(address);
319
349
  return toForeignCallResult([
320
350
  instance.salt,
321
351
  instance.deployer.toField(),
@@ -324,9 +354,10 @@ export class RPCTranslator {
324
354
  ...instance.publicKeys.toFields()
325
355
  ].map(toSingle));
326
356
  }
327
- async utilityTryGetPublicKeysAndPartialAddress(foreignAddress) {
357
+ // eslint-disable-next-line camelcase
358
+ async aztec_utl_getPublicKeysAndPartialAddress(foreignAddress) {
328
359
  const address = addressFromSingle(foreignAddress);
329
- const result = await this.handlerAsUtility().utilityTryGetPublicKeysAndPartialAddress(address);
360
+ const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(address);
330
361
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
331
362
  // with two fields: `some` (a boolean) and `value` (a field array in this case).
332
363
  if (result === undefined) {
@@ -346,26 +377,30 @@ export class RPCTranslator {
346
377
  ]);
347
378
  }
348
379
  }
349
- async utilityGetKeyValidationRequest(foreignPkMHash) {
380
+ // eslint-disable-next-line camelcase
381
+ async aztec_utl_getKeyValidationRequest(foreignPkMHash) {
350
382
  const pkMHash = fromSingle(foreignPkMHash);
351
- const keyValidationRequest = await this.handlerAsUtility().utilityGetKeyValidationRequest(pkMHash);
383
+ const keyValidationRequest = await this.handlerAsUtility().getKeyValidationRequest(pkMHash);
352
384
  return toForeignCallResult(keyValidationRequest.toFields().map(toSingle));
353
385
  }
354
- privateCallPrivateFunction(_foreignTargetContractAddress, _foreignFunctionSelector, _foreignArgsHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
386
+ // eslint-disable-next-line camelcase
387
+ aztec_prv_callPrivateFunction(_foreignTargetContractAddress, _foreignFunctionSelector, _foreignArgsHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
355
388
  throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
356
389
  }
357
- async utilityGetNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
358
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
390
+ // eslint-disable-next-line camelcase
391
+ async aztec_utl_getNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
392
+ const blockHash = blockHashFromSingle(foreignBlockHash);
359
393
  const nullifier = fromSingle(foreignNullifier);
360
- const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(blockHash, nullifier);
394
+ const witness = await this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier);
361
395
  if (!witness) {
362
396
  throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
363
397
  }
364
398
  return toForeignCallResult(witness.toNoirRepresentation());
365
399
  }
366
- async utilityGetAuthWitness(foreignMessageHash) {
400
+ // eslint-disable-next-line camelcase
401
+ async aztec_utl_getAuthWitness(foreignMessageHash) {
367
402
  const messageHash = fromSingle(foreignMessageHash);
368
- const authWitness = await this.handlerAsUtility().utilityGetAuthWitness(messageHash);
403
+ const authWitness = await this.handlerAsUtility().getAuthWitness(messageHash);
369
404
  if (!authWitness) {
370
405
  throw new Error(`Auth witness not found for message hash ${messageHash}.`);
371
406
  }
@@ -373,92 +408,152 @@ export class RPCTranslator {
373
408
  toArray(authWitness)
374
409
  ]);
375
410
  }
376
- privateNotifyEnqueuedPublicFunctionCall(_foreignTargetContractAddress, _foreignCalldataHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
411
+ // eslint-disable-next-line camelcase
412
+ aztec_prv_assertValidPublicCalldata(_foreignCalldataHash) {
377
413
  throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
378
414
  }
379
- privateNotifySetPublicTeardownFunctionCall(_foreignTargetContractAddress, _foreignCalldataHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
415
+ // eslint-disable-next-line camelcase
416
+ aztec_prv_notifyRevertiblePhaseStart(_foreignMinRevertibleSideEffectCounter) {
380
417
  throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
381
418
  }
382
- privateNotifySetMinRevertibleSideEffectCounter(_foreignMinRevertibleSideEffectCounter) {
383
- throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
384
- }
385
- async privateIsSideEffectCounterRevertible(foreignSideEffectCounter) {
419
+ // eslint-disable-next-line camelcase
420
+ async aztec_prv_isExecutionInRevertiblePhase(foreignSideEffectCounter) {
386
421
  const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
387
- const isRevertible = await this.handlerAsPrivate().privateIsSideEffectCounterRevertible(sideEffectCounter);
422
+ const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter);
388
423
  return toForeignCallResult([
389
424
  toSingle(new Fr(isRevertible))
390
425
  ]);
391
426
  }
392
- utilityGetUtilityContext() {
393
- const context = this.handlerAsUtility().utilityGetUtilityContext();
427
+ // eslint-disable-next-line camelcase
428
+ aztec_utl_getUtilityContext() {
429
+ const context = this.handlerAsUtility().getUtilityContext();
394
430
  return toForeignCallResult(context.toNoirRepresentation());
395
431
  }
396
- async utilityGetBlockHeader(foreignBlockNumber) {
432
+ // eslint-disable-next-line camelcase
433
+ async aztec_utl_getBlockHeader(foreignBlockNumber) {
397
434
  const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
398
- const header = await this.handlerAsUtility().utilityGetBlockHeader(blockNumber);
435
+ const header = await this.handlerAsUtility().getBlockHeader(blockNumber);
399
436
  if (!header) {
400
437
  throw new Error(`Block header not found for block ${blockNumber}.`);
401
438
  }
402
439
  return toForeignCallResult(header.toFields().map(toSingle));
403
440
  }
404
- async utilityGetNoteHashMembershipWitness(foreignAnchorBlockHash, foreignNoteHash) {
405
- const blockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
441
+ // eslint-disable-next-line camelcase
442
+ async aztec_utl_getNoteHashMembershipWitness(foreignAnchorBlockHash, foreignNoteHash) {
443
+ const blockHash = blockHashFromSingle(foreignAnchorBlockHash);
406
444
  const noteHash = fromSingle(foreignNoteHash);
407
- const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(blockHash, noteHash);
445
+ const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash);
408
446
  if (!witness) {
409
447
  throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
410
448
  }
411
449
  return toForeignCallResult(witness.toNoirRepresentation());
412
450
  }
413
- async utilityGetBlockHashMembershipWitness(foreignAnchorBlockHash, foreignBlockHash) {
414
- const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
415
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
416
- const witness = await this.handlerAsUtility().utilityGetBlockHashMembershipWitness(anchorBlockHash, blockHash);
451
+ // eslint-disable-next-line camelcase
452
+ async aztec_utl_getBlockHashMembershipWitness(foreignAnchorBlockHash, foreignBlockHash) {
453
+ const anchorBlockHash = blockHashFromSingle(foreignAnchorBlockHash);
454
+ const blockHash = blockHashFromSingle(foreignBlockHash);
455
+ const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash);
417
456
  if (!witness) {
418
457
  throw new Error(`Block hash ${blockHash.toString()} not found in the archive tree at anchor block ${anchorBlockHash.toString()}.`);
419
458
  }
420
459
  return toForeignCallResult(witness.toNoirRepresentation());
421
460
  }
422
- async utilityGetLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
423
- const blockHash = new BlockHash(fromSingle(foreignBlockHash));
461
+ // eslint-disable-next-line camelcase
462
+ async aztec_utl_getLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
463
+ const blockHash = blockHashFromSingle(foreignBlockHash);
424
464
  const nullifier = fromSingle(foreignNullifier);
425
- const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(blockHash, nullifier);
465
+ const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier);
426
466
  if (!witness) {
427
467
  throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
428
468
  }
429
469
  return toForeignCallResult(witness.toNoirRepresentation());
430
470
  }
431
- async utilityFetchTaggedLogs(foreignPendingTaggedLogArrayBaseSlot) {
471
+ // eslint-disable-next-line camelcase
472
+ async aztec_utl_getPendingTaggedLogs(foreignPendingTaggedLogArrayBaseSlot, foreignScope) {
432
473
  const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
433
- await this.handlerAsUtility().utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot);
474
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
475
+ await this.handlerAsUtility().getPendingTaggedLogs(pendingTaggedLogArrayBaseSlot, scope);
434
476
  return toForeignCallResult([]);
435
477
  }
436
- async utilityValidateAndStoreEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot) {
478
+ // eslint-disable-next-line camelcase
479
+ async aztec_utl_getPendingTaggedLogs_v2(foreignScope) {
480
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
481
+ const slot = await this.handlerAsUtility().getPendingTaggedLogsV2(scope);
482
+ return toForeignCallResult([
483
+ toSingle(slot)
484
+ ]);
485
+ }
486
+ // eslint-disable-next-line camelcase
487
+ async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot, foreignMaxNotePackedLen, foreignMaxEventSerializedLen, foreignScope) {
437
488
  const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
438
489
  const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
439
490
  const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
440
- await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot);
491
+ const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
492
+ const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
493
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
494
+ await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot, maxNotePackedLen, maxEventSerializedLen, scope);
495
+ return toForeignCallResult([]);
496
+ }
497
+ // eslint-disable-next-line camelcase
498
+ async aztec_utl_validateAndStoreEnqueuedNotesAndEvents_v2(foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot, foreignMaxNotePackedLen, foreignMaxEventSerializedLen, foreignScope) {
499
+ const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
500
+ const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
501
+ const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
502
+ const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
503
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
504
+ await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEventsV2(noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot, maxNotePackedLen, maxEventSerializedLen, scope);
441
505
  return toForeignCallResult([]);
442
506
  }
443
- async utilityBulkRetrieveLogs(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot) {
507
+ // eslint-disable-next-line camelcase
508
+ async aztec_utl_getLogsByTag(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot, foreignScope) {
444
509
  const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
445
510
  const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
446
511
  const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
447
- await this.handlerAsUtility().utilityBulkRetrieveLogs(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot);
512
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
513
+ await this.handlerAsUtility().getLogsByTag(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot, scope);
448
514
  return toForeignCallResult([]);
449
515
  }
450
- async utilityStoreCapsule(foreignContractAddress, foreignSlot, foreignCapsule) {
516
+ // eslint-disable-next-line camelcase
517
+ async aztec_utl_getMessageContextsByTxHash(foreignContractAddress, foreignMessageContextRequestsArrayBaseSlot, foreignMessageContextResponsesArrayBaseSlot, foreignScope) {
518
+ const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
519
+ const messageContextRequestsArrayBaseSlot = fromSingle(foreignMessageContextRequestsArrayBaseSlot);
520
+ const messageContextResponsesArrayBaseSlot = fromSingle(foreignMessageContextResponsesArrayBaseSlot);
521
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
522
+ await this.handlerAsUtility().getMessageContextsByTxHash(contractAddress, messageContextRequestsArrayBaseSlot, messageContextResponsesArrayBaseSlot, scope);
523
+ return toForeignCallResult([]);
524
+ }
525
+ // eslint-disable-next-line camelcase
526
+ async aztec_utl_getLogsByTag_v2(foreignRequestArrayBaseSlot) {
527
+ const requestArrayBaseSlot = fromSingle(foreignRequestArrayBaseSlot);
528
+ const responseSlot = await this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot);
529
+ return toForeignCallResult([
530
+ toSingle(responseSlot)
531
+ ]);
532
+ }
533
+ // eslint-disable-next-line camelcase
534
+ async aztec_utl_getMessageContextsByTxHash_v2(foreignRequestArrayBaseSlot) {
535
+ const requestArrayBaseSlot = fromSingle(foreignRequestArrayBaseSlot);
536
+ const responseSlot = await this.handlerAsUtility().getMessageContextsByTxHashV2(requestArrayBaseSlot);
537
+ return toForeignCallResult([
538
+ toSingle(responseSlot)
539
+ ]);
540
+ }
541
+ // eslint-disable-next-line camelcase
542
+ aztec_utl_setCapsule(foreignContractAddress, foreignSlot, foreignCapsule, foreignScope) {
451
543
  const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
452
544
  const slot = fromSingle(foreignSlot);
453
545
  const capsule = fromArray(foreignCapsule);
454
- await this.handlerAsUtility().utilityStoreCapsule(contractAddress, slot, capsule);
546
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
547
+ this.handlerAsUtility().setCapsule(contractAddress, slot, capsule, scope);
455
548
  return toForeignCallResult([]);
456
549
  }
457
- async utilityLoadCapsule(foreignContractAddress, foreignSlot, foreignTSize) {
550
+ // eslint-disable-next-line camelcase
551
+ async aztec_utl_getCapsule(foreignContractAddress, foreignSlot, foreignTSize, foreignScope) {
458
552
  const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
459
553
  const slot = fromSingle(foreignSlot);
460
554
  const tSize = fromSingle(foreignTSize).toNumber();
461
- const values = await this.handlerAsUtility().utilityLoadCapsule(contractAddress, slot);
555
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
556
+ const values = await this.handlerAsUtility().getCapsule(contractAddress, slot, scope);
462
557
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
463
558
  // with two fields: `some` (a boolean) and `value` (a field array in this case).
464
559
  if (values === null) {
@@ -475,203 +570,316 @@ export class RPCTranslator {
475
570
  ]);
476
571
  }
477
572
  }
478
- async utilityDeleteCapsule(foreignContractAddress, foreignSlot) {
573
+ // eslint-disable-next-line camelcase
574
+ aztec_utl_deleteCapsule(foreignContractAddress, foreignSlot, foreignScope) {
479
575
  const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
480
576
  const slot = fromSingle(foreignSlot);
481
- await this.handlerAsUtility().utilityDeleteCapsule(contractAddress, slot);
577
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
578
+ this.handlerAsUtility().deleteCapsule(contractAddress, slot, scope);
482
579
  return toForeignCallResult([]);
483
580
  }
484
- async utilityCopyCapsule(foreignContractAddress, foreignSrcSlot, foreignDstSlot, foreignNumEntries) {
581
+ // eslint-disable-next-line camelcase
582
+ async aztec_utl_copyCapsule(foreignContractAddress, foreignSrcSlot, foreignDstSlot, foreignNumEntries, foreignScope) {
485
583
  const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
486
584
  const srcSlot = fromSingle(foreignSrcSlot);
487
585
  const dstSlot = fromSingle(foreignDstSlot);
488
586
  const numEntries = fromSingle(foreignNumEntries).toNumber();
489
- await this.handlerAsUtility().utilityCopyCapsule(contractAddress, srcSlot, dstSlot, numEntries);
587
+ const scope = AztecAddress.fromField(fromSingle(foreignScope));
588
+ await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope);
589
+ return toForeignCallResult([]);
590
+ }
591
+ // eslint-disable-next-line camelcase
592
+ aztec_utl_pushEphemeral(foreignSlot, foreignElements) {
593
+ const slot = fromSingle(foreignSlot);
594
+ const elements = fromArray(foreignElements);
595
+ const newLen = this.handlerAsUtility().pushEphemeral(slot, elements);
596
+ return toForeignCallResult([
597
+ toSingle(new Fr(newLen))
598
+ ]);
599
+ }
600
+ // eslint-disable-next-line camelcase
601
+ aztec_utl_popEphemeral(foreignSlot) {
602
+ const slot = fromSingle(foreignSlot);
603
+ const element = this.handlerAsUtility().popEphemeral(slot);
604
+ return toForeignCallResult([
605
+ toArray(element)
606
+ ]);
607
+ }
608
+ // eslint-disable-next-line camelcase
609
+ aztec_utl_getEphemeral(foreignSlot, foreignIndex) {
610
+ const slot = fromSingle(foreignSlot);
611
+ const index = fromSingle(foreignIndex).toNumber();
612
+ const element = this.handlerAsUtility().getEphemeral(slot, index);
613
+ return toForeignCallResult([
614
+ toArray(element)
615
+ ]);
616
+ }
617
+ // eslint-disable-next-line camelcase
618
+ aztec_utl_setEphemeral(foreignSlot, foreignIndex, foreignElements) {
619
+ const slot = fromSingle(foreignSlot);
620
+ const index = fromSingle(foreignIndex).toNumber();
621
+ const elements = fromArray(foreignElements);
622
+ this.handlerAsUtility().setEphemeral(slot, index, elements);
623
+ return toForeignCallResult([]);
624
+ }
625
+ // eslint-disable-next-line camelcase
626
+ aztec_utl_getEphemeralLen(foreignSlot) {
627
+ const slot = fromSingle(foreignSlot);
628
+ const len = this.handlerAsUtility().getEphemeralLen(slot);
629
+ return toForeignCallResult([
630
+ toSingle(new Fr(len))
631
+ ]);
632
+ }
633
+ // eslint-disable-next-line camelcase
634
+ aztec_utl_removeEphemeral(foreignSlot, foreignIndex) {
635
+ const slot = fromSingle(foreignSlot);
636
+ const index = fromSingle(foreignIndex).toNumber();
637
+ this.handlerAsUtility().removeEphemeral(slot, index);
638
+ return toForeignCallResult([]);
639
+ }
640
+ // eslint-disable-next-line camelcase
641
+ aztec_utl_clearEphemeral(foreignSlot) {
642
+ const slot = fromSingle(foreignSlot);
643
+ this.handlerAsUtility().clearEphemeral(slot);
490
644
  return toForeignCallResult([]);
491
645
  }
492
646
  // TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
493
647
  // The compiler didn't throw an error, so it took me a while to learn of the existence of this file, and that I need
494
648
  // to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
495
649
  // existence of a txe_oracle method?
496
- async utilityAes128Decrypt(foreignCiphertextBVecStorage, foreignCiphertextLength, foreignIv, foreignSymKey) {
650
+ // eslint-disable-next-line camelcase
651
+ async aztec_utl_decryptAes128(foreignCiphertextBVecStorage, foreignCiphertextLength, foreignIv, foreignSymKey) {
497
652
  const ciphertext = fromUintBoundedVec(foreignCiphertextBVecStorage, foreignCiphertextLength, 8);
498
653
  const iv = fromUintArray(foreignIv, 8);
499
654
  const symKey = fromUintArray(foreignSymKey, 8);
500
- const plaintextBuffer = await this.handlerAsUtility().utilityAes128Decrypt(ciphertext, iv, symKey);
501
- return toForeignCallResult(arrayToBoundedVec(bufferToU8Array(plaintextBuffer), foreignCiphertextBVecStorage.length));
655
+ // Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
656
+ try {
657
+ const plaintextBuffer = await this.handlerAsUtility().decryptAes128(ciphertext, iv, symKey);
658
+ const [storage, length] = arrayToBoundedVec(bufferToU8Array(plaintextBuffer), foreignCiphertextBVecStorage.length);
659
+ return toForeignCallResult([
660
+ toSingle(new Fr(1)),
661
+ storage,
662
+ length
663
+ ]);
664
+ } catch {
665
+ const zeroStorage = toArray(Array(foreignCiphertextBVecStorage.length).fill(new Fr(0)));
666
+ return toForeignCallResult([
667
+ toSingle(new Fr(0)),
668
+ zeroStorage,
669
+ toSingle(new Fr(0))
670
+ ]);
671
+ }
502
672
  }
503
- async utilityGetSharedSecret(foreignAddress, foreignEphPKField0, foreignEphPKField1, foreignEphPKField2) {
673
+ // eslint-disable-next-line camelcase
674
+ async aztec_utl_getSharedSecret(foreignAddress, foreignEphPKField0, foreignEphPKField1, foreignEphPKField2, foreignContractAddress) {
504
675
  const address = AztecAddress.fromField(fromSingle(foreignAddress));
505
676
  const ephPK = Point.fromFields([
506
677
  fromSingle(foreignEphPKField0),
507
678
  fromSingle(foreignEphPKField1),
508
679
  fromSingle(foreignEphPKField2)
509
680
  ]);
510
- const secret = await this.handlerAsUtility().utilityGetSharedSecret(address, ephPK);
511
- return toForeignCallResult(secret.toFields().map(toSingle));
681
+ const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
682
+ const secret = await this.handlerAsUtility().getSharedSecret(address, ephPK, contractAddress);
683
+ return toForeignCallResult([
684
+ toSingle(secret)
685
+ ]);
686
+ }
687
+ // eslint-disable-next-line camelcase
688
+ aztec_utl_setContractSyncCacheInvalid(foreignContractAddress, foreignScopes, foreignScopeCount) {
689
+ const contractAddress = addressFromSingle(foreignContractAddress);
690
+ const count = fromSingle(foreignScopeCount).toNumber();
691
+ const scopes = fromArray(foreignScopes).slice(0, count).map((f)=>new AztecAddress(f));
692
+ this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress, scopes);
693
+ return Promise.resolve(toForeignCallResult([]));
512
694
  }
513
- emitOffchainEffect(_foreignData) {
695
+ // eslint-disable-next-line camelcase
696
+ aztec_utl_emitOffchainEffect(_foreignData) {
514
697
  throw new Error('Offchain effects are not yet supported in the TestEnvironment');
515
698
  }
516
699
  // AVM opcodes
517
- avmOpcodeEmitPublicLog(_foreignMessage) {
700
+ // eslint-disable-next-line camelcase
701
+ aztec_avm_emitPublicLog(_foreignMessage) {
518
702
  // TODO(#8811): Implement
519
703
  return toForeignCallResult([]);
520
704
  }
521
- async avmOpcodeStorageRead(foreignSlot, foreignContractAddress) {
705
+ // eslint-disable-next-line camelcase
706
+ async aztec_avm_storageRead(foreignSlot, foreignContractAddress) {
522
707
  const slot = fromSingle(foreignSlot);
523
708
  const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
524
- const value = (await this.handlerAsAvm().avmOpcodeStorageRead(slot, contractAddress)).value;
709
+ const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
525
710
  return toForeignCallResult([
526
711
  toSingle(new Fr(value))
527
712
  ]);
528
713
  }
529
- async avmOpcodeStorageWrite(foreignSlot, foreignValue) {
714
+ // eslint-disable-next-line camelcase
715
+ async aztec_avm_storageWrite(foreignSlot, foreignValue) {
530
716
  const slot = fromSingle(foreignSlot);
531
717
  const value = fromSingle(foreignValue);
532
- await this.handlerAsAvm().avmOpcodeStorageWrite(slot, value);
718
+ await this.handlerAsAvm().storageWrite(slot, value);
533
719
  return toForeignCallResult([]);
534
720
  }
535
- async avmOpcodeGetContractInstanceDeployer(foreignAddress) {
721
+ // eslint-disable-next-line camelcase
722
+ async aztec_avm_getContractInstanceDeployer(foreignAddress) {
536
723
  const address = addressFromSingle(foreignAddress);
537
- const instance = await this.handlerAsUtility().utilityGetContractInstance(address);
724
+ const instance = await this.handlerAsUtility().getContractInstance(address);
538
725
  return toForeignCallResult([
539
726
  toSingle(instance.deployer),
540
727
  // AVM requires an extra boolean indicating the instance was found
541
728
  toSingle(new Fr(1))
542
729
  ]);
543
730
  }
544
- async avmOpcodeGetContractInstanceClassId(foreignAddress) {
731
+ // eslint-disable-next-line camelcase
732
+ async aztec_avm_getContractInstanceClassId(foreignAddress) {
545
733
  const address = addressFromSingle(foreignAddress);
546
- const instance = await this.handlerAsUtility().utilityGetContractInstance(address);
734
+ const instance = await this.handlerAsUtility().getContractInstance(address);
547
735
  return toForeignCallResult([
548
736
  toSingle(instance.currentContractClassId),
549
737
  // AVM requires an extra boolean indicating the instance was found
550
738
  toSingle(new Fr(1))
551
739
  ]);
552
740
  }
553
- async avmOpcodeGetContractInstanceInitializationHash(foreignAddress) {
741
+ // eslint-disable-next-line camelcase
742
+ async aztec_avm_getContractInstanceInitializationHash(foreignAddress) {
554
743
  const address = addressFromSingle(foreignAddress);
555
- const instance = await this.handlerAsUtility().utilityGetContractInstance(address);
744
+ const instance = await this.handlerAsUtility().getContractInstance(address);
556
745
  return toForeignCallResult([
557
746
  toSingle(instance.initializationHash),
558
747
  // AVM requires an extra boolean indicating the instance was found
559
748
  toSingle(new Fr(1))
560
749
  ]);
561
750
  }
562
- async avmOpcodeSender() {
563
- const sender = await this.handlerAsAvm().avmOpcodeSender();
751
+ // eslint-disable-next-line camelcase
752
+ async aztec_avm_sender() {
753
+ const sender = await this.handlerAsAvm().sender();
564
754
  return toForeignCallResult([
565
755
  toSingle(sender)
566
756
  ]);
567
757
  }
568
- async avmOpcodeEmitNullifier(foreignNullifier) {
758
+ // eslint-disable-next-line camelcase
759
+ async aztec_avm_emitNullifier(foreignNullifier) {
569
760
  const nullifier = fromSingle(foreignNullifier);
570
- await this.handlerAsAvm().avmOpcodeEmitNullifier(nullifier);
761
+ await this.handlerAsAvm().emitNullifier(nullifier);
571
762
  return toForeignCallResult([]);
572
763
  }
573
- async avmOpcodeEmitNoteHash(foreignNoteHash) {
764
+ // eslint-disable-next-line camelcase
765
+ async aztec_avm_emitNoteHash(foreignNoteHash) {
574
766
  const noteHash = fromSingle(foreignNoteHash);
575
- await this.handlerAsAvm().avmOpcodeEmitNoteHash(noteHash);
767
+ await this.handlerAsAvm().emitNoteHash(noteHash);
576
768
  return toForeignCallResult([]);
577
769
  }
578
- async avmOpcodeNullifierExists(foreignSiloedNullifier) {
770
+ // eslint-disable-next-line camelcase
771
+ async aztec_avm_nullifierExists(foreignSiloedNullifier) {
579
772
  const siloedNullifier = fromSingle(foreignSiloedNullifier);
580
- const exists = await this.handlerAsAvm().avmOpcodeNullifierExists(siloedNullifier);
773
+ const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
581
774
  return toForeignCallResult([
582
775
  toSingle(new Fr(exists))
583
776
  ]);
584
777
  }
585
- async avmOpcodeAddress() {
586
- const contractAddress = await this.handlerAsAvm().avmOpcodeAddress();
778
+ // eslint-disable-next-line camelcase
779
+ async aztec_avm_address() {
780
+ const contractAddress = await this.handlerAsAvm().address();
587
781
  return toForeignCallResult([
588
782
  toSingle(contractAddress.toField())
589
783
  ]);
590
784
  }
591
- async avmOpcodeBlockNumber() {
592
- const blockNumber = await this.handlerAsAvm().avmOpcodeBlockNumber();
785
+ // eslint-disable-next-line camelcase
786
+ async aztec_avm_blockNumber() {
787
+ const blockNumber = await this.handlerAsAvm().blockNumber();
593
788
  return toForeignCallResult([
594
789
  toSingle(new Fr(blockNumber))
595
790
  ]);
596
791
  }
597
- async avmOpcodeTimestamp() {
598
- const timestamp = await this.handlerAsAvm().avmOpcodeTimestamp();
792
+ // eslint-disable-next-line camelcase
793
+ async aztec_avm_timestamp() {
794
+ const timestamp = await this.handlerAsAvm().timestamp();
599
795
  return toForeignCallResult([
600
796
  toSingle(new Fr(timestamp))
601
797
  ]);
602
798
  }
603
- async avmOpcodeIsStaticCall() {
604
- const isStaticCall = await this.handlerAsAvm().avmOpcodeIsStaticCall();
799
+ // eslint-disable-next-line camelcase
800
+ async aztec_avm_isStaticCall() {
801
+ const isStaticCall = await this.handlerAsAvm().isStaticCall();
605
802
  return toForeignCallResult([
606
803
  toSingle(new Fr(isStaticCall ? 1 : 0))
607
804
  ]);
608
805
  }
609
- async avmOpcodeChainId() {
610
- const chainId = await this.handlerAsAvm().avmOpcodeChainId();
806
+ // eslint-disable-next-line camelcase
807
+ async aztec_avm_chainId() {
808
+ const chainId = await this.handlerAsAvm().chainId();
611
809
  return toForeignCallResult([
612
810
  toSingle(chainId)
613
811
  ]);
614
812
  }
615
- async avmOpcodeVersion() {
616
- const version = await this.handlerAsAvm().avmOpcodeVersion();
813
+ // eslint-disable-next-line camelcase
814
+ async aztec_avm_version() {
815
+ const version = await this.handlerAsAvm().version();
617
816
  return toForeignCallResult([
618
817
  toSingle(version)
619
818
  ]);
620
819
  }
621
- avmOpcodeReturndataSize() {
820
+ // eslint-disable-next-line camelcase
821
+ aztec_avm_returndataSize() {
622
822
  throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
623
823
  }
624
- avmOpcodeReturndataCopy(_foreignRdOffset, _foreignCopySize) {
824
+ // eslint-disable-next-line camelcase
825
+ aztec_avm_returndataCopy(_foreignRdOffset, _foreignCopySize) {
625
826
  throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
626
827
  }
627
- avmOpcodeCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
828
+ // eslint-disable-next-line camelcase
829
+ aztec_avm_call(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
628
830
  throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
629
831
  }
630
- avmOpcodeStaticCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
832
+ // eslint-disable-next-line camelcase
833
+ aztec_avm_staticCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
631
834
  throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
632
835
  }
633
- avmOpcodeSuccessCopy() {
836
+ // eslint-disable-next-line camelcase
837
+ aztec_avm_successCopy() {
634
838
  throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
635
839
  }
636
- async txePrivateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector, foreignArgs, foreignArgsHash, foreignIsStaticCall) {
840
+ // eslint-disable-next-line camelcase
841
+ async aztec_txe_privateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector, foreignArgs, foreignArgsHash, foreignIsStaticCall) {
637
842
  const from = addressFromSingle(foreignFrom);
638
843
  const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
639
844
  const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
640
845
  const args = fromArray(foreignArgs);
641
846
  const argsHash = fromSingle(foreignArgsHash);
642
847
  const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
643
- const returnValues = await this.handlerAsTxe().txePrivateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, this.stateHandler.getCurrentJob());
848
+ const returnValues = await this.handlerAsTxe().privateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, this.stateHandler.getCurrentJob());
644
849
  // TODO(F-335): Avoid doing the following call here.
645
850
  await this.stateHandler.cycleJob();
646
851
  return toForeignCallResult([
647
852
  toArray(returnValues)
648
853
  ]);
649
854
  }
650
- async txeExecuteUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
855
+ // eslint-disable-next-line camelcase
856
+ async aztec_txe_executeUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
651
857
  const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
652
858
  const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
653
859
  const args = fromArray(foreignArgs);
654
- const returnValues = await this.handlerAsTxe().txeExecuteUtilityFunction(targetContractAddress, functionSelector, args, this.stateHandler.getCurrentJob());
860
+ const returnValues = await this.handlerAsTxe().executeUtilityFunction(targetContractAddress, functionSelector, args, this.stateHandler.getCurrentJob());
655
861
  // TODO(F-335): Avoid doing the following call here.
656
862
  await this.stateHandler.cycleJob();
657
863
  return toForeignCallResult([
658
864
  toArray(returnValues)
659
865
  ]);
660
866
  }
661
- async txePublicCallNewFlow(foreignFrom, foreignAddress, foreignCalldata, foreignIsStaticCall) {
867
+ // eslint-disable-next-line camelcase
868
+ async aztec_txe_publicCallNewFlow(foreignFrom, foreignAddress, foreignCalldata, foreignIsStaticCall) {
662
869
  const from = addressFromSingle(foreignFrom);
663
870
  const address = addressFromSingle(foreignAddress);
664
871
  const calldata = fromArray(foreignCalldata);
665
872
  const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
666
- const returnValues = await this.handlerAsTxe().txePublicCallNewFlow(from, address, calldata, isStaticCall);
873
+ const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
667
874
  // TODO(F-335): Avoid doing the following call here.
668
875
  await this.stateHandler.cycleJob();
669
876
  return toForeignCallResult([
670
877
  toArray(returnValues)
671
878
  ]);
672
879
  }
673
- async privateGetSenderForTags() {
674
- const sender = await this.handlerAsPrivate().privateGetSenderForTags();
880
+ // eslint-disable-next-line camelcase
881
+ async aztec_prv_getSenderForTags() {
882
+ const sender = await this.handlerAsPrivate().getSenderForTags();
675
883
  // Return a Noir Option struct with `some` and `value` fields
676
884
  if (sender === undefined) {
677
885
  // No sender found, return Option with some=0 and value=0
@@ -687,15 +895,17 @@ export class RPCTranslator {
687
895
  ]);
688
896
  }
689
897
  }
690
- async privateSetSenderForTags(foreignSenderForTags) {
898
+ // eslint-disable-next-line camelcase
899
+ async aztec_prv_setSenderForTags(foreignSenderForTags) {
691
900
  const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
692
- await this.handlerAsPrivate().privateSetSenderForTags(senderForTags);
901
+ await this.handlerAsPrivate().setSenderForTags(senderForTags);
693
902
  return toForeignCallResult([]);
694
903
  }
695
- async privateGetNextAppTagAsSender(foreignSender, foreignRecipient) {
904
+ // eslint-disable-next-line camelcase
905
+ async aztec_prv_getNextAppTagAsSender(foreignSender, foreignRecipient) {
696
906
  const sender = AztecAddress.fromField(fromSingle(foreignSender));
697
907
  const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
698
- const nextAppTag = await this.handlerAsPrivate().privateGetNextAppTagAsSender(sender, recipient);
908
+ const nextAppTag = await this.handlerAsPrivate().getNextAppTagAsSender(sender, recipient);
699
909
  return toForeignCallResult([
700
910
  toSingle(nextAppTag.value)
701
911
  ]);