@aztec/txe 0.0.1-commit.3469e52 → 0.0.1-commit.35158ae7e

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