@aztec/txe 0.0.1-commit.23b0eb0 → 0.0.1-commit.2448fdb
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.
- package/dest/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +88 -54
- package/dest/oracle/interfaces.d.ts +29 -28
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.d.ts +13 -13
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +12 -12
- package/dest/oracle/txe_oracle_top_level_context.d.ts +28 -23
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +143 -58
- package/dest/rpc_translator.d.ts +121 -83
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +394 -159
- package/dest/state_machine/archiver.d.ts +3 -3
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +7 -7
- package/dest/state_machine/dummy_p2p_client.d.ts +16 -12
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +28 -16
- package/dest/state_machine/index.d.ts +7 -5
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +19 -10
- package/dest/state_machine/mock_epoch_cache.d.ts +3 -1
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +4 -0
- package/dest/state_machine/synchronizer.d.ts +5 -5
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/state_machine/synchronizer.js +3 -3
- package/dest/txe_session.d.ts +10 -6
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +96 -25
- package/dest/util/encoding.d.ts +40 -41
- package/dest/util/encoding.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.d.ts +2 -3
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +5 -22
- package/dest/utils/block_creation.d.ts +1 -1
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +3 -1
- package/package.json +15 -15
- package/src/index.ts +89 -52
- package/src/oracle/interfaces.ts +32 -31
- package/src/oracle/txe_oracle_public_context.ts +12 -12
- package/src/oracle/txe_oracle_top_level_context.ts +156 -115
- package/src/rpc_translator.ts +450 -176
- package/src/state_machine/archiver.ts +7 -5
- package/src/state_machine/dummy_p2p_client.ts +40 -22
- package/src/state_machine/index.ts +29 -9
- package/src/state_machine/mock_epoch_cache.ts +5 -0
- package/src/state_machine/synchronizer.ts +4 -4
- package/src/txe_session.ts +102 -72
- package/src/util/txe_public_contract_data_source.ts +10 -36
- package/src/utils/block_creation.ts +3 -1
- package/dest/util/txe_contract_store.d.ts +0 -12
- package/dest/util/txe_contract_store.d.ts.map +0 -1
- package/dest/util/txe_contract_store.js +0 -22
- package/src/util/txe_contract_store.ts +0 -36
package/src/rpc_translator.ts
CHANGED
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
toSingle,
|
|
31
31
|
} from './util/encoding.js';
|
|
32
32
|
|
|
33
|
-
const MAX_EVENT_LEN =
|
|
33
|
+
const MAX_EVENT_LEN = 10; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN
|
|
34
34
|
const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
|
|
35
35
|
|
|
36
36
|
export class UnavailableOracleError extends Error {
|
|
@@ -104,13 +104,15 @@ export class RPCTranslator {
|
|
|
104
104
|
|
|
105
105
|
// TXE session state transition functions - these get handled by the state handler
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
// eslint-disable-next-line camelcase
|
|
108
|
+
async aztec_txe_setTopLevelTXEContext() {
|
|
108
109
|
await this.stateHandler.enterTopLevelState();
|
|
109
110
|
|
|
110
111
|
return toForeignCallResult([]);
|
|
111
112
|
}
|
|
112
113
|
|
|
113
|
-
|
|
114
|
+
// eslint-disable-next-line camelcase
|
|
115
|
+
async aztec_txe_setPrivateTXEContext(
|
|
114
116
|
foreignContractAddressIsSome: ForeignCallSingle,
|
|
115
117
|
foreignContractAddressValue: ForeignCallSingle,
|
|
116
118
|
foreignAnchorBlockNumberIsSome: ForeignCallSingle,
|
|
@@ -129,7 +131,8 @@ export class RPCTranslator {
|
|
|
129
131
|
return toForeignCallResult(privateContextInputs.toFields().map(toSingle));
|
|
130
132
|
}
|
|
131
133
|
|
|
132
|
-
|
|
134
|
+
// eslint-disable-next-line camelcase
|
|
135
|
+
async aztec_txe_setPublicTXEContext(
|
|
133
136
|
foreignContractAddressIsSome: ForeignCallSingle,
|
|
134
137
|
foreignContractAddressValue: ForeignCallSingle,
|
|
135
138
|
) {
|
|
@@ -142,7 +145,8 @@ export class RPCTranslator {
|
|
|
142
145
|
return toForeignCallResult([]);
|
|
143
146
|
}
|
|
144
147
|
|
|
145
|
-
|
|
148
|
+
// eslint-disable-next-line camelcase
|
|
149
|
+
async aztec_txe_setUtilityTXEContext(
|
|
146
150
|
foreignContractAddressIsSome: ForeignCallSingle,
|
|
147
151
|
foreignContractAddressValue: ForeignCallSingle,
|
|
148
152
|
) {
|
|
@@ -159,44 +163,54 @@ export class RPCTranslator {
|
|
|
159
163
|
|
|
160
164
|
// TXE-specific oracles
|
|
161
165
|
|
|
162
|
-
|
|
163
|
-
|
|
166
|
+
// eslint-disable-next-line camelcase
|
|
167
|
+
aztec_txe_getDefaultAddress() {
|
|
168
|
+
const defaultAddress = this.handlerAsTxe().getDefaultAddress();
|
|
164
169
|
|
|
165
170
|
return toForeignCallResult([toSingle(defaultAddress)]);
|
|
166
171
|
}
|
|
167
172
|
|
|
168
|
-
|
|
169
|
-
|
|
173
|
+
// eslint-disable-next-line camelcase
|
|
174
|
+
async aztec_txe_getNextBlockNumber() {
|
|
175
|
+
const nextBlockNumber = await this.handlerAsTxe().getNextBlockNumber();
|
|
170
176
|
|
|
171
177
|
return toForeignCallResult([toSingle(nextBlockNumber)]);
|
|
172
178
|
}
|
|
173
179
|
|
|
174
|
-
|
|
175
|
-
|
|
180
|
+
// eslint-disable-next-line camelcase
|
|
181
|
+
async aztec_txe_getNextBlockTimestamp() {
|
|
182
|
+
const nextBlockTimestamp = await this.handlerAsTxe().getNextBlockTimestamp();
|
|
176
183
|
|
|
177
184
|
return toForeignCallResult([toSingle(nextBlockTimestamp)]);
|
|
178
185
|
}
|
|
179
186
|
|
|
180
|
-
|
|
187
|
+
// eslint-disable-next-line camelcase
|
|
188
|
+
async aztec_txe_advanceBlocksBy(foreignBlocks: ForeignCallSingle) {
|
|
181
189
|
const blocks = fromSingle(foreignBlocks).toNumber();
|
|
182
190
|
|
|
183
|
-
await this.handlerAsTxe().
|
|
191
|
+
await this.handlerAsTxe().advanceBlocksBy(blocks);
|
|
184
192
|
|
|
185
193
|
return toForeignCallResult([]);
|
|
186
194
|
}
|
|
187
195
|
|
|
188
|
-
|
|
196
|
+
// eslint-disable-next-line camelcase
|
|
197
|
+
aztec_txe_advanceTimestampBy(foreignDuration: ForeignCallSingle) {
|
|
189
198
|
const duration = fromSingle(foreignDuration).toBigInt();
|
|
190
199
|
|
|
191
|
-
this.handlerAsTxe().
|
|
200
|
+
this.handlerAsTxe().advanceTimestampBy(duration);
|
|
192
201
|
|
|
193
202
|
return toForeignCallResult([]);
|
|
194
203
|
}
|
|
195
204
|
|
|
196
|
-
|
|
205
|
+
// eslint-disable-next-line camelcase
|
|
206
|
+
async aztec_txe_deploy(
|
|
207
|
+
artifact: ContractArtifact,
|
|
208
|
+
instance: ContractInstanceWithAddress,
|
|
209
|
+
foreignSecret: ForeignCallSingle,
|
|
210
|
+
) {
|
|
197
211
|
const secret = fromSingle(foreignSecret);
|
|
198
212
|
|
|
199
|
-
await this.handlerAsTxe().
|
|
213
|
+
await this.handlerAsTxe().deploy(artifact, instance, secret);
|
|
200
214
|
|
|
201
215
|
return toForeignCallResult([
|
|
202
216
|
toArray([
|
|
@@ -209,10 +223,11 @@ export class RPCTranslator {
|
|
|
209
223
|
]);
|
|
210
224
|
}
|
|
211
225
|
|
|
212
|
-
|
|
226
|
+
// eslint-disable-next-line camelcase
|
|
227
|
+
async aztec_txe_createAccount(foreignSecret: ForeignCallSingle) {
|
|
213
228
|
const secret = fromSingle(foreignSecret);
|
|
214
229
|
|
|
215
|
-
const completeAddress = await this.handlerAsTxe().
|
|
230
|
+
const completeAddress = await this.handlerAsTxe().createAccount(secret);
|
|
216
231
|
|
|
217
232
|
return toForeignCallResult([
|
|
218
233
|
toSingle(completeAddress.address),
|
|
@@ -220,14 +235,15 @@ export class RPCTranslator {
|
|
|
220
235
|
]);
|
|
221
236
|
}
|
|
222
237
|
|
|
223
|
-
|
|
238
|
+
// eslint-disable-next-line camelcase
|
|
239
|
+
async aztec_txe_addAccount(
|
|
224
240
|
artifact: ContractArtifact,
|
|
225
241
|
instance: ContractInstanceWithAddress,
|
|
226
242
|
foreignSecret: ForeignCallSingle,
|
|
227
243
|
) {
|
|
228
244
|
const secret = fromSingle(foreignSecret);
|
|
229
245
|
|
|
230
|
-
const completeAddress = await this.handlerAsTxe().
|
|
246
|
+
const completeAddress = await this.handlerAsTxe().addAccount(artifact, instance, secret);
|
|
231
247
|
|
|
232
248
|
return toForeignCallResult([
|
|
233
249
|
toSingle(completeAddress.address),
|
|
@@ -235,39 +251,45 @@ export class RPCTranslator {
|
|
|
235
251
|
]);
|
|
236
252
|
}
|
|
237
253
|
|
|
238
|
-
|
|
254
|
+
// eslint-disable-next-line camelcase
|
|
255
|
+
async aztec_txe_addAuthWitness(foreignAddress: ForeignCallSingle, foreignMessageHash: ForeignCallSingle) {
|
|
239
256
|
const address = addressFromSingle(foreignAddress);
|
|
240
257
|
const messageHash = fromSingle(foreignMessageHash);
|
|
241
258
|
|
|
242
|
-
await this.handlerAsTxe().
|
|
259
|
+
await this.handlerAsTxe().addAuthWitness(address, messageHash);
|
|
243
260
|
|
|
244
261
|
return toForeignCallResult([]);
|
|
245
262
|
}
|
|
246
263
|
|
|
247
264
|
// PXE oracles
|
|
248
265
|
|
|
249
|
-
|
|
250
|
-
|
|
266
|
+
// eslint-disable-next-line camelcase
|
|
267
|
+
aztec_utl_assertCompatibleOracleVersionV2(foreignMajor: ForeignCallSingle, foreignMinor: ForeignCallSingle) {
|
|
268
|
+
const major = fromSingle(foreignMajor).toNumber();
|
|
269
|
+
const minor = fromSingle(foreignMinor).toNumber();
|
|
251
270
|
|
|
252
|
-
this.handlerAsMisc().
|
|
271
|
+
this.handlerAsMisc().assertCompatibleOracleVersion(major, minor);
|
|
253
272
|
|
|
254
273
|
return toForeignCallResult([]);
|
|
255
274
|
}
|
|
256
275
|
|
|
257
|
-
|
|
258
|
-
|
|
276
|
+
// eslint-disable-next-line camelcase
|
|
277
|
+
aztec_utl_getRandomField() {
|
|
278
|
+
const randomField = this.handlerAsMisc().getRandomField();
|
|
259
279
|
|
|
260
280
|
return toForeignCallResult([toSingle(randomField)]);
|
|
261
281
|
}
|
|
262
282
|
|
|
263
|
-
|
|
264
|
-
|
|
283
|
+
// eslint-disable-next-line camelcase
|
|
284
|
+
async aztec_txe_getLastBlockTimestamp() {
|
|
285
|
+
const timestamp = await this.handlerAsTxe().getLastBlockTimestamp();
|
|
265
286
|
|
|
266
287
|
return toForeignCallResult([toSingle(new Fr(timestamp))]);
|
|
267
288
|
}
|
|
268
289
|
|
|
269
|
-
|
|
270
|
-
|
|
290
|
+
// eslint-disable-next-line camelcase
|
|
291
|
+
async aztec_txe_getLastTxEffects() {
|
|
292
|
+
const { txHash, noteHashes, nullifiers } = await this.handlerAsTxe().getLastTxEffects();
|
|
271
293
|
|
|
272
294
|
return toForeignCallResult([
|
|
273
295
|
toSingle(txHash.hash),
|
|
@@ -276,7 +298,8 @@ export class RPCTranslator {
|
|
|
276
298
|
]);
|
|
277
299
|
}
|
|
278
300
|
|
|
279
|
-
|
|
301
|
+
// eslint-disable-next-line camelcase
|
|
302
|
+
async aztec_txe_getPrivateEvents(
|
|
280
303
|
foreignSelector: ForeignCallSingle,
|
|
281
304
|
foreignContractAddress: ForeignCallSingle,
|
|
282
305
|
foreignScope: ForeignCallSingle,
|
|
@@ -285,7 +308,14 @@ export class RPCTranslator {
|
|
|
285
308
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
286
309
|
const scope = addressFromSingle(foreignScope);
|
|
287
310
|
|
|
288
|
-
|
|
311
|
+
// TODO(F-335): Avoid doing the following 2 calls here.
|
|
312
|
+
{
|
|
313
|
+
await this.handlerAsTxe().syncContractNonOracleMethod(contractAddress, scope, this.stateHandler.getCurrentJob());
|
|
314
|
+
// We cycle job to commit the stores after the contract sync.
|
|
315
|
+
await this.stateHandler.cycleJob();
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
const events = await this.handlerAsTxe().getPrivateEvents(selector, contractAddress, scope);
|
|
289
319
|
|
|
290
320
|
if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
|
|
291
321
|
throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
|
|
@@ -309,26 +339,29 @@ export class RPCTranslator {
|
|
|
309
339
|
return toForeignCallResult([toArray(rawArrayStorage), toArray(eventLengths), toSingle(queryLength)]);
|
|
310
340
|
}
|
|
311
341
|
|
|
312
|
-
|
|
342
|
+
// eslint-disable-next-line camelcase
|
|
343
|
+
aztec_prv_setHashPreimage(foreignValues: ForeignCallArray, foreignHash: ForeignCallSingle) {
|
|
313
344
|
const values = fromArray(foreignValues);
|
|
314
345
|
const hash = fromSingle(foreignHash);
|
|
315
346
|
|
|
316
|
-
this.handlerAsPrivate().
|
|
347
|
+
this.handlerAsPrivate().setHashPreimage(values, hash);
|
|
317
348
|
|
|
318
349
|
return toForeignCallResult([]);
|
|
319
350
|
}
|
|
320
351
|
|
|
321
|
-
|
|
352
|
+
// eslint-disable-next-line camelcase
|
|
353
|
+
async aztec_prv_getHashPreimage(foreignHash: ForeignCallSingle) {
|
|
322
354
|
const hash = fromSingle(foreignHash);
|
|
323
355
|
|
|
324
|
-
const returns = await this.handlerAsPrivate().
|
|
356
|
+
const returns = await this.handlerAsPrivate().getHashPreimage(hash);
|
|
325
357
|
|
|
326
358
|
return toForeignCallResult([toArray(returns)]);
|
|
327
359
|
}
|
|
328
360
|
|
|
329
361
|
// When the argument is a slice, noir automatically adds a length field to oracle call.
|
|
330
362
|
// When the argument is an array, we add the field length manually to the signature.
|
|
331
|
-
|
|
363
|
+
// eslint-disable-next-line camelcase
|
|
364
|
+
async aztec_utl_log(
|
|
332
365
|
foreignLevel: ForeignCallSingle,
|
|
333
366
|
foreignMessage: ForeignCallArray,
|
|
334
367
|
_foreignLength: ForeignCallSingle,
|
|
@@ -340,12 +373,13 @@ export class RPCTranslator {
|
|
|
340
373
|
.join('');
|
|
341
374
|
const fields = fromArray(foreignFields);
|
|
342
375
|
|
|
343
|
-
this.handlerAsMisc().
|
|
376
|
+
await this.handlerAsMisc().log(level, message, fields);
|
|
344
377
|
|
|
345
378
|
return toForeignCallResult([]);
|
|
346
379
|
}
|
|
347
380
|
|
|
348
|
-
|
|
381
|
+
// eslint-disable-next-line camelcase
|
|
382
|
+
async aztec_utl_getFromPublicStorage(
|
|
349
383
|
foreignBlockHash: ForeignCallSingle,
|
|
350
384
|
foreignContractAddress: ForeignCallSingle,
|
|
351
385
|
foreignStartStorageSlot: ForeignCallSingle,
|
|
@@ -356,7 +390,7 @@ export class RPCTranslator {
|
|
|
356
390
|
const startStorageSlot = fromSingle(foreignStartStorageSlot);
|
|
357
391
|
const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
|
|
358
392
|
|
|
359
|
-
const values = await this.handlerAsUtility().
|
|
393
|
+
const values = await this.handlerAsUtility().getFromPublicStorage(
|
|
360
394
|
blockHash,
|
|
361
395
|
contractAddress,
|
|
362
396
|
startStorageSlot,
|
|
@@ -366,11 +400,12 @@ export class RPCTranslator {
|
|
|
366
400
|
return toForeignCallResult([toArray(values)]);
|
|
367
401
|
}
|
|
368
402
|
|
|
369
|
-
|
|
403
|
+
// eslint-disable-next-line camelcase
|
|
404
|
+
async aztec_utl_getPublicDataWitness(foreignBlockHash: ForeignCallSingle, foreignLeafSlot: ForeignCallSingle) {
|
|
370
405
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
371
406
|
const leafSlot = fromSingle(foreignLeafSlot);
|
|
372
407
|
|
|
373
|
-
const witness = await this.handlerAsUtility().
|
|
408
|
+
const witness = await this.handlerAsUtility().getPublicDataWitness(blockHash, leafSlot);
|
|
374
409
|
|
|
375
410
|
if (!witness) {
|
|
376
411
|
throw new Error(`Public data witness not found for slot ${leafSlot} at block ${blockHash.toString()}.`);
|
|
@@ -378,7 +413,8 @@ export class RPCTranslator {
|
|
|
378
413
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
379
414
|
}
|
|
380
415
|
|
|
381
|
-
|
|
416
|
+
// eslint-disable-next-line camelcase
|
|
417
|
+
async aztec_utl_getNotes(
|
|
382
418
|
foreignOwnerIsSome: ForeignCallSingle,
|
|
383
419
|
foreignOwnerValue: ForeignCallSingle,
|
|
384
420
|
foreignStorageSlot: ForeignCallSingle,
|
|
@@ -419,7 +455,7 @@ export class RPCTranslator {
|
|
|
419
455
|
const maxNotes = fromSingle(foreignMaxNotes).toNumber();
|
|
420
456
|
const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
|
|
421
457
|
|
|
422
|
-
const noteDatas = await this.handlerAsUtility().
|
|
458
|
+
const noteDatas = await this.handlerAsUtility().getNotes(
|
|
423
459
|
owner,
|
|
424
460
|
storageSlot,
|
|
425
461
|
numSelects,
|
|
@@ -460,7 +496,8 @@ export class RPCTranslator {
|
|
|
460
496
|
);
|
|
461
497
|
}
|
|
462
498
|
|
|
463
|
-
|
|
499
|
+
// eslint-disable-next-line camelcase
|
|
500
|
+
aztec_prv_notifyCreatedNote(
|
|
464
501
|
foreignOwner: ForeignCallSingle,
|
|
465
502
|
foreignStorageSlot: ForeignCallSingle,
|
|
466
503
|
foreignRandomness: ForeignCallSingle,
|
|
@@ -477,20 +514,13 @@ export class RPCTranslator {
|
|
|
477
514
|
const noteHash = fromSingle(foreignNoteHash);
|
|
478
515
|
const counter = fromSingle(foreignCounter).toNumber();
|
|
479
516
|
|
|
480
|
-
this.handlerAsPrivate().
|
|
481
|
-
owner,
|
|
482
|
-
storageSlot,
|
|
483
|
-
randomness,
|
|
484
|
-
noteTypeId,
|
|
485
|
-
note,
|
|
486
|
-
noteHash,
|
|
487
|
-
counter,
|
|
488
|
-
);
|
|
517
|
+
this.handlerAsPrivate().notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter);
|
|
489
518
|
|
|
490
519
|
return toForeignCallResult([]);
|
|
491
520
|
}
|
|
492
521
|
|
|
493
|
-
|
|
522
|
+
// eslint-disable-next-line camelcase
|
|
523
|
+
async aztec_prv_notifyNullifiedNote(
|
|
494
524
|
foreignInnerNullifier: ForeignCallSingle,
|
|
495
525
|
foreignNoteHash: ForeignCallSingle,
|
|
496
526
|
foreignCounter: ForeignCallSingle,
|
|
@@ -499,40 +529,47 @@ export class RPCTranslator {
|
|
|
499
529
|
const noteHash = fromSingle(foreignNoteHash);
|
|
500
530
|
const counter = fromSingle(foreignCounter).toNumber();
|
|
501
531
|
|
|
502
|
-
await this.handlerAsPrivate().
|
|
532
|
+
await this.handlerAsPrivate().notifyNullifiedNote(innerNullifier, noteHash, counter);
|
|
503
533
|
|
|
504
534
|
return toForeignCallResult([]);
|
|
505
535
|
}
|
|
506
536
|
|
|
507
|
-
|
|
537
|
+
// eslint-disable-next-line camelcase
|
|
538
|
+
async aztec_prv_notifyCreatedNullifier(foreignInnerNullifier: ForeignCallSingle) {
|
|
508
539
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
509
540
|
|
|
510
|
-
await this.handlerAsPrivate().
|
|
541
|
+
await this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier);
|
|
511
542
|
|
|
512
543
|
return toForeignCallResult([]);
|
|
513
544
|
}
|
|
514
545
|
|
|
515
|
-
|
|
546
|
+
// eslint-disable-next-line camelcase
|
|
547
|
+
async aztec_prv_isNullifierPending(
|
|
548
|
+
foreignInnerNullifier: ForeignCallSingle,
|
|
549
|
+
foreignContractAddress: ForeignCallSingle,
|
|
550
|
+
) {
|
|
516
551
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
517
552
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
518
553
|
|
|
519
|
-
const isPending = await this.handlerAsPrivate().
|
|
554
|
+
const isPending = await this.handlerAsPrivate().isNullifierPending(innerNullifier, contractAddress);
|
|
520
555
|
|
|
521
556
|
return toForeignCallResult([toSingle(new Fr(isPending))]);
|
|
522
557
|
}
|
|
523
558
|
|
|
524
|
-
|
|
559
|
+
// eslint-disable-next-line camelcase
|
|
560
|
+
async aztec_utl_doesNullifierExist(foreignInnerNullifier: ForeignCallSingle) {
|
|
525
561
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
526
562
|
|
|
527
|
-
const exists = await this.handlerAsUtility().
|
|
563
|
+
const exists = await this.handlerAsUtility().doesNullifierExist(innerNullifier);
|
|
528
564
|
|
|
529
565
|
return toForeignCallResult([toSingle(new Fr(exists))]);
|
|
530
566
|
}
|
|
531
567
|
|
|
532
|
-
|
|
568
|
+
// eslint-disable-next-line camelcase
|
|
569
|
+
async aztec_utl_getContractInstance(foreignAddress: ForeignCallSingle) {
|
|
533
570
|
const address = addressFromSingle(foreignAddress);
|
|
534
571
|
|
|
535
|
-
const instance = await this.handlerAsUtility().
|
|
572
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
536
573
|
|
|
537
574
|
return toForeignCallResult(
|
|
538
575
|
[
|
|
@@ -545,23 +582,37 @@ export class RPCTranslator {
|
|
|
545
582
|
);
|
|
546
583
|
}
|
|
547
584
|
|
|
548
|
-
|
|
585
|
+
// eslint-disable-next-line camelcase
|
|
586
|
+
async aztec_utl_getPublicKeysAndPartialAddress(foreignAddress: ForeignCallSingle) {
|
|
549
587
|
const address = addressFromSingle(foreignAddress);
|
|
550
588
|
|
|
551
|
-
const
|
|
589
|
+
const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(address);
|
|
552
590
|
|
|
553
|
-
return
|
|
591
|
+
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
592
|
+
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
593
|
+
if (result === undefined) {
|
|
594
|
+
// No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
|
|
595
|
+
return toForeignCallResult([toSingle(new Fr(0)), toArray(Array(13).fill(new Fr(0)))]);
|
|
596
|
+
} else {
|
|
597
|
+
// Data was found so we set `some` to 1 and return it along with `value`.
|
|
598
|
+
return toForeignCallResult([
|
|
599
|
+
toSingle(new Fr(1)),
|
|
600
|
+
toArray([...result.publicKeys.toFields(), result.partialAddress]),
|
|
601
|
+
]);
|
|
602
|
+
}
|
|
554
603
|
}
|
|
555
604
|
|
|
556
|
-
|
|
605
|
+
// eslint-disable-next-line camelcase
|
|
606
|
+
async aztec_utl_getKeyValidationRequest(foreignPkMHash: ForeignCallSingle) {
|
|
557
607
|
const pkMHash = fromSingle(foreignPkMHash);
|
|
558
608
|
|
|
559
|
-
const keyValidationRequest = await this.handlerAsUtility().
|
|
609
|
+
const keyValidationRequest = await this.handlerAsUtility().getKeyValidationRequest(pkMHash);
|
|
560
610
|
|
|
561
611
|
return toForeignCallResult(keyValidationRequest.toFields().map(toSingle));
|
|
562
612
|
}
|
|
563
613
|
|
|
564
|
-
|
|
614
|
+
// eslint-disable-next-line camelcase
|
|
615
|
+
aztec_prv_callPrivateFunction(
|
|
565
616
|
_foreignTargetContractAddress: ForeignCallSingle,
|
|
566
617
|
_foreignFunctionSelector: ForeignCallSingle,
|
|
567
618
|
_foreignArgsHash: ForeignCallSingle,
|
|
@@ -573,11 +624,15 @@ export class RPCTranslator {
|
|
|
573
624
|
);
|
|
574
625
|
}
|
|
575
626
|
|
|
576
|
-
|
|
627
|
+
// eslint-disable-next-line camelcase
|
|
628
|
+
async aztec_utl_getNullifierMembershipWitness(
|
|
629
|
+
foreignBlockHash: ForeignCallSingle,
|
|
630
|
+
foreignNullifier: ForeignCallSingle,
|
|
631
|
+
) {
|
|
577
632
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
578
633
|
const nullifier = fromSingle(foreignNullifier);
|
|
579
634
|
|
|
580
|
-
const witness = await this.handlerAsUtility().
|
|
635
|
+
const witness = await this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier);
|
|
581
636
|
|
|
582
637
|
if (!witness) {
|
|
583
638
|
throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
|
|
@@ -585,10 +640,11 @@ export class RPCTranslator {
|
|
|
585
640
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
586
641
|
}
|
|
587
642
|
|
|
588
|
-
|
|
643
|
+
// eslint-disable-next-line camelcase
|
|
644
|
+
async aztec_utl_getAuthWitness(foreignMessageHash: ForeignCallSingle) {
|
|
589
645
|
const messageHash = fromSingle(foreignMessageHash);
|
|
590
646
|
|
|
591
|
-
const authWitness = await this.handlerAsUtility().
|
|
647
|
+
const authWitness = await this.handlerAsUtility().getAuthWitness(messageHash);
|
|
592
648
|
|
|
593
649
|
if (!authWitness) {
|
|
594
650
|
throw new Error(`Auth witness not found for message hash ${messageHash}.`);
|
|
@@ -596,44 +652,35 @@ export class RPCTranslator {
|
|
|
596
652
|
return toForeignCallResult([toArray(authWitness)]);
|
|
597
653
|
}
|
|
598
654
|
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
_foreignCalldataHash: ForeignCallSingle,
|
|
602
|
-
_foreignSideEffectCounter: ForeignCallSingle,
|
|
603
|
-
_foreignIsStaticCall: ForeignCallSingle,
|
|
604
|
-
) {
|
|
655
|
+
// eslint-disable-next-line camelcase
|
|
656
|
+
public aztec_prv_assertValidPublicCalldata(_foreignCalldataHash: ForeignCallSingle) {
|
|
605
657
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
606
658
|
}
|
|
607
659
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
_foreignCalldataHash: ForeignCallSingle,
|
|
611
|
-
_foreignSideEffectCounter: ForeignCallSingle,
|
|
612
|
-
_foreignIsStaticCall: ForeignCallSingle,
|
|
613
|
-
) {
|
|
660
|
+
// eslint-disable-next-line camelcase
|
|
661
|
+
public aztec_prv_notifyRevertiblePhaseStart(_foreignMinRevertibleSideEffectCounter: ForeignCallSingle) {
|
|
614
662
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
615
663
|
}
|
|
616
664
|
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
public async privateIsSideEffectCounterRevertible(foreignSideEffectCounter: ForeignCallSingle) {
|
|
665
|
+
// eslint-disable-next-line camelcase
|
|
666
|
+
public async aztec_prv_isExecutionInRevertiblePhase(foreignSideEffectCounter: ForeignCallSingle) {
|
|
622
667
|
const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
|
|
623
|
-
const isRevertible = await this.handlerAsPrivate().
|
|
668
|
+
const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter);
|
|
624
669
|
return toForeignCallResult([toSingle(new Fr(isRevertible))]);
|
|
625
670
|
}
|
|
626
671
|
|
|
627
|
-
|
|
628
|
-
|
|
672
|
+
// eslint-disable-next-line camelcase
|
|
673
|
+
aztec_utl_getUtilityContext() {
|
|
674
|
+
const context = this.handlerAsUtility().getUtilityContext();
|
|
629
675
|
|
|
630
676
|
return toForeignCallResult(context.toNoirRepresentation());
|
|
631
677
|
}
|
|
632
678
|
|
|
633
|
-
|
|
679
|
+
// eslint-disable-next-line camelcase
|
|
680
|
+
async aztec_utl_getBlockHeader(foreignBlockNumber: ForeignCallSingle) {
|
|
634
681
|
const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
|
|
635
682
|
|
|
636
|
-
const header = await this.handlerAsUtility().
|
|
683
|
+
const header = await this.handlerAsUtility().getBlockHeader(blockNumber);
|
|
637
684
|
|
|
638
685
|
if (!header) {
|
|
639
686
|
throw new Error(`Block header not found for block ${blockNumber}.`);
|
|
@@ -641,14 +688,15 @@ export class RPCTranslator {
|
|
|
641
688
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
642
689
|
}
|
|
643
690
|
|
|
644
|
-
|
|
691
|
+
// eslint-disable-next-line camelcase
|
|
692
|
+
async aztec_utl_getNoteHashMembershipWitness(
|
|
645
693
|
foreignAnchorBlockHash: ForeignCallSingle,
|
|
646
694
|
foreignNoteHash: ForeignCallSingle,
|
|
647
695
|
) {
|
|
648
696
|
const blockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
649
697
|
const noteHash = fromSingle(foreignNoteHash);
|
|
650
698
|
|
|
651
|
-
const witness = await this.handlerAsUtility().
|
|
699
|
+
const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash);
|
|
652
700
|
|
|
653
701
|
if (!witness) {
|
|
654
702
|
throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
@@ -656,14 +704,15 @@ export class RPCTranslator {
|
|
|
656
704
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
657
705
|
}
|
|
658
706
|
|
|
659
|
-
|
|
707
|
+
// eslint-disable-next-line camelcase
|
|
708
|
+
async aztec_utl_getBlockHashMembershipWitness(
|
|
660
709
|
foreignAnchorBlockHash: ForeignCallSingle,
|
|
661
710
|
foreignBlockHash: ForeignCallSingle,
|
|
662
711
|
) {
|
|
663
712
|
const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
664
713
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
665
714
|
|
|
666
|
-
const witness = await this.handlerAsUtility().
|
|
715
|
+
const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
667
716
|
|
|
668
717
|
if (!witness) {
|
|
669
718
|
throw new Error(
|
|
@@ -673,14 +722,15 @@ export class RPCTranslator {
|
|
|
673
722
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
674
723
|
}
|
|
675
724
|
|
|
676
|
-
|
|
725
|
+
// eslint-disable-next-line camelcase
|
|
726
|
+
async aztec_utl_getLowNullifierMembershipWitness(
|
|
677
727
|
foreignBlockHash: ForeignCallSingle,
|
|
678
728
|
foreignNullifier: ForeignCallSingle,
|
|
679
729
|
) {
|
|
680
730
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
681
731
|
const nullifier = fromSingle(foreignNullifier);
|
|
682
732
|
|
|
683
|
-
const witness = await this.handlerAsUtility().
|
|
733
|
+
const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
684
734
|
|
|
685
735
|
if (!witness) {
|
|
686
736
|
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
|
|
@@ -688,74 +738,167 @@ export class RPCTranslator {
|
|
|
688
738
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
689
739
|
}
|
|
690
740
|
|
|
691
|
-
|
|
741
|
+
// eslint-disable-next-line camelcase
|
|
742
|
+
async aztec_utl_getPendingTaggedLogs(
|
|
743
|
+
foreignPendingTaggedLogArrayBaseSlot: ForeignCallSingle,
|
|
744
|
+
foreignScope: ForeignCallSingle,
|
|
745
|
+
) {
|
|
692
746
|
const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
|
|
747
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
693
748
|
|
|
694
|
-
await this.handlerAsUtility().
|
|
749
|
+
await this.handlerAsUtility().getPendingTaggedLogs(pendingTaggedLogArrayBaseSlot, scope);
|
|
695
750
|
|
|
696
751
|
return toForeignCallResult([]);
|
|
697
752
|
}
|
|
698
753
|
|
|
699
|
-
|
|
754
|
+
// eslint-disable-next-line camelcase
|
|
755
|
+
async aztec_utl_getPendingTaggedLogs_v2(foreignScope: ForeignCallSingle) {
|
|
756
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
757
|
+
const slot = await this.handlerAsUtility().getPendingTaggedLogsV2(scope);
|
|
758
|
+
return toForeignCallResult([toSingle(slot)]);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
// eslint-disable-next-line camelcase
|
|
762
|
+
public async aztec_utl_validateAndStoreEnqueuedNotesAndEvents(
|
|
700
763
|
foreignContractAddress: ForeignCallSingle,
|
|
701
764
|
foreignNoteValidationRequestsArrayBaseSlot: ForeignCallSingle,
|
|
702
765
|
foreignEventValidationRequestsArrayBaseSlot: ForeignCallSingle,
|
|
766
|
+
foreignMaxNotePackedLen: ForeignCallSingle,
|
|
767
|
+
foreignMaxEventSerializedLen: ForeignCallSingle,
|
|
768
|
+
foreignScope: ForeignCallSingle,
|
|
703
769
|
) {
|
|
704
770
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
705
771
|
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
706
772
|
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
773
|
+
const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
|
|
774
|
+
const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
|
|
775
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
707
776
|
|
|
708
|
-
await this.handlerAsUtility().
|
|
777
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
|
|
709
778
|
contractAddress,
|
|
710
779
|
noteValidationRequestsArrayBaseSlot,
|
|
711
780
|
eventValidationRequestsArrayBaseSlot,
|
|
781
|
+
maxNotePackedLen,
|
|
782
|
+
maxEventSerializedLen,
|
|
783
|
+
scope,
|
|
784
|
+
);
|
|
785
|
+
|
|
786
|
+
return toForeignCallResult([]);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
// eslint-disable-next-line camelcase
|
|
790
|
+
public async aztec_utl_validateAndStoreEnqueuedNotesAndEvents_v2(
|
|
791
|
+
foreignNoteValidationRequestsArrayBaseSlot: ForeignCallSingle,
|
|
792
|
+
foreignEventValidationRequestsArrayBaseSlot: ForeignCallSingle,
|
|
793
|
+
foreignMaxNotePackedLen: ForeignCallSingle,
|
|
794
|
+
foreignMaxEventSerializedLen: ForeignCallSingle,
|
|
795
|
+
foreignScope: ForeignCallSingle,
|
|
796
|
+
) {
|
|
797
|
+
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
798
|
+
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
799
|
+
const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
|
|
800
|
+
const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
|
|
801
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
802
|
+
|
|
803
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEventsV2(
|
|
804
|
+
noteValidationRequestsArrayBaseSlot,
|
|
805
|
+
eventValidationRequestsArrayBaseSlot,
|
|
806
|
+
maxNotePackedLen,
|
|
807
|
+
maxEventSerializedLen,
|
|
808
|
+
scope,
|
|
712
809
|
);
|
|
713
810
|
|
|
714
811
|
return toForeignCallResult([]);
|
|
715
812
|
}
|
|
716
813
|
|
|
717
|
-
|
|
814
|
+
// eslint-disable-next-line camelcase
|
|
815
|
+
public async aztec_utl_getLogsByTag(
|
|
718
816
|
foreignContractAddress: ForeignCallSingle,
|
|
719
817
|
foreignLogRetrievalRequestsArrayBaseSlot: ForeignCallSingle,
|
|
720
818
|
foreignLogRetrievalResponsesArrayBaseSlot: ForeignCallSingle,
|
|
819
|
+
foreignScope: ForeignCallSingle,
|
|
721
820
|
) {
|
|
722
821
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
723
822
|
const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
|
|
724
823
|
const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
|
|
824
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
725
825
|
|
|
726
|
-
await this.handlerAsUtility().
|
|
826
|
+
await this.handlerAsUtility().getLogsByTag(
|
|
727
827
|
contractAddress,
|
|
728
828
|
logRetrievalRequestsArrayBaseSlot,
|
|
729
829
|
logRetrievalResponsesArrayBaseSlot,
|
|
830
|
+
scope,
|
|
831
|
+
);
|
|
832
|
+
|
|
833
|
+
return toForeignCallResult([]);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
// eslint-disable-next-line camelcase
|
|
837
|
+
public async aztec_utl_getMessageContextsByTxHash(
|
|
838
|
+
foreignContractAddress: ForeignCallSingle,
|
|
839
|
+
foreignMessageContextRequestsArrayBaseSlot: ForeignCallSingle,
|
|
840
|
+
foreignMessageContextResponsesArrayBaseSlot: ForeignCallSingle,
|
|
841
|
+
foreignScope: ForeignCallSingle,
|
|
842
|
+
) {
|
|
843
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
844
|
+
const messageContextRequestsArrayBaseSlot = fromSingle(foreignMessageContextRequestsArrayBaseSlot);
|
|
845
|
+
const messageContextResponsesArrayBaseSlot = fromSingle(foreignMessageContextResponsesArrayBaseSlot);
|
|
846
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
847
|
+
|
|
848
|
+
await this.handlerAsUtility().getMessageContextsByTxHash(
|
|
849
|
+
contractAddress,
|
|
850
|
+
messageContextRequestsArrayBaseSlot,
|
|
851
|
+
messageContextResponsesArrayBaseSlot,
|
|
852
|
+
scope,
|
|
730
853
|
);
|
|
731
854
|
|
|
732
855
|
return toForeignCallResult([]);
|
|
733
856
|
}
|
|
734
857
|
|
|
735
|
-
|
|
858
|
+
// eslint-disable-next-line camelcase
|
|
859
|
+
async aztec_utl_getLogsByTag_v2(foreignRequestArrayBaseSlot: ForeignCallSingle) {
|
|
860
|
+
const requestArrayBaseSlot = fromSingle(foreignRequestArrayBaseSlot);
|
|
861
|
+
const responseSlot = await this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot);
|
|
862
|
+
return toForeignCallResult([toSingle(responseSlot)]);
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
// eslint-disable-next-line camelcase
|
|
866
|
+
async aztec_utl_getMessageContextsByTxHash_v2(foreignRequestArrayBaseSlot: ForeignCallSingle) {
|
|
867
|
+
const requestArrayBaseSlot = fromSingle(foreignRequestArrayBaseSlot);
|
|
868
|
+
const responseSlot = await this.handlerAsUtility().getMessageContextsByTxHashV2(requestArrayBaseSlot);
|
|
869
|
+
return toForeignCallResult([toSingle(responseSlot)]);
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
// eslint-disable-next-line camelcase
|
|
873
|
+
aztec_utl_setCapsule(
|
|
736
874
|
foreignContractAddress: ForeignCallSingle,
|
|
737
875
|
foreignSlot: ForeignCallSingle,
|
|
738
876
|
foreignCapsule: ForeignCallArray,
|
|
877
|
+
foreignScope: ForeignCallSingle,
|
|
739
878
|
) {
|
|
740
879
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
741
880
|
const slot = fromSingle(foreignSlot);
|
|
742
881
|
const capsule = fromArray(foreignCapsule);
|
|
882
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
743
883
|
|
|
744
|
-
|
|
884
|
+
this.handlerAsUtility().setCapsule(contractAddress, slot, capsule, scope);
|
|
745
885
|
|
|
746
886
|
return toForeignCallResult([]);
|
|
747
887
|
}
|
|
748
888
|
|
|
749
|
-
|
|
889
|
+
// eslint-disable-next-line camelcase
|
|
890
|
+
async aztec_utl_getCapsule(
|
|
750
891
|
foreignContractAddress: ForeignCallSingle,
|
|
751
892
|
foreignSlot: ForeignCallSingle,
|
|
752
893
|
foreignTSize: ForeignCallSingle,
|
|
894
|
+
foreignScope: ForeignCallSingle,
|
|
753
895
|
) {
|
|
754
896
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
755
897
|
const slot = fromSingle(foreignSlot);
|
|
756
898
|
const tSize = fromSingle(foreignTSize).toNumber();
|
|
899
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
757
900
|
|
|
758
|
-
const values = await this.handlerAsUtility().
|
|
901
|
+
const values = await this.handlerAsUtility().getCapsule(contractAddress, slot, scope);
|
|
759
902
|
|
|
760
903
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
761
904
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
@@ -768,36 +911,104 @@ export class RPCTranslator {
|
|
|
768
911
|
}
|
|
769
912
|
}
|
|
770
913
|
|
|
771
|
-
|
|
914
|
+
// eslint-disable-next-line camelcase
|
|
915
|
+
aztec_utl_deleteCapsule(
|
|
916
|
+
foreignContractAddress: ForeignCallSingle,
|
|
917
|
+
foreignSlot: ForeignCallSingle,
|
|
918
|
+
foreignScope: ForeignCallSingle,
|
|
919
|
+
) {
|
|
772
920
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
773
921
|
const slot = fromSingle(foreignSlot);
|
|
922
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
774
923
|
|
|
775
|
-
|
|
924
|
+
this.handlerAsUtility().deleteCapsule(contractAddress, slot, scope);
|
|
776
925
|
|
|
777
926
|
return toForeignCallResult([]);
|
|
778
927
|
}
|
|
779
928
|
|
|
780
|
-
|
|
929
|
+
// eslint-disable-next-line camelcase
|
|
930
|
+
async aztec_utl_copyCapsule(
|
|
781
931
|
foreignContractAddress: ForeignCallSingle,
|
|
782
932
|
foreignSrcSlot: ForeignCallSingle,
|
|
783
933
|
foreignDstSlot: ForeignCallSingle,
|
|
784
934
|
foreignNumEntries: ForeignCallSingle,
|
|
935
|
+
foreignScope: ForeignCallSingle,
|
|
785
936
|
) {
|
|
786
937
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
787
938
|
const srcSlot = fromSingle(foreignSrcSlot);
|
|
788
939
|
const dstSlot = fromSingle(foreignDstSlot);
|
|
789
940
|
const numEntries = fromSingle(foreignNumEntries).toNumber();
|
|
941
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
790
942
|
|
|
791
|
-
await this.handlerAsUtility().
|
|
943
|
+
await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope);
|
|
792
944
|
|
|
793
945
|
return toForeignCallResult([]);
|
|
794
946
|
}
|
|
795
947
|
|
|
948
|
+
// eslint-disable-next-line camelcase
|
|
949
|
+
aztec_utl_pushEphemeral(foreignSlot: ForeignCallSingle, foreignElements: ForeignCallArray) {
|
|
950
|
+
const slot = fromSingle(foreignSlot);
|
|
951
|
+
const elements = fromArray(foreignElements);
|
|
952
|
+
const newLen = this.handlerAsUtility().pushEphemeral(slot, elements);
|
|
953
|
+
return toForeignCallResult([toSingle(new Fr(newLen))]);
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
// eslint-disable-next-line camelcase
|
|
957
|
+
aztec_utl_popEphemeral(foreignSlot: ForeignCallSingle) {
|
|
958
|
+
const slot = fromSingle(foreignSlot);
|
|
959
|
+
const element = this.handlerAsUtility().popEphemeral(slot);
|
|
960
|
+
return toForeignCallResult([toArray(element)]);
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
// eslint-disable-next-line camelcase
|
|
964
|
+
aztec_utl_getEphemeral(foreignSlot: ForeignCallSingle, foreignIndex: ForeignCallSingle) {
|
|
965
|
+
const slot = fromSingle(foreignSlot);
|
|
966
|
+
const index = fromSingle(foreignIndex).toNumber();
|
|
967
|
+
const element = this.handlerAsUtility().getEphemeral(slot, index);
|
|
968
|
+
return toForeignCallResult([toArray(element)]);
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
// eslint-disable-next-line camelcase
|
|
972
|
+
aztec_utl_setEphemeral(
|
|
973
|
+
foreignSlot: ForeignCallSingle,
|
|
974
|
+
foreignIndex: ForeignCallSingle,
|
|
975
|
+
foreignElements: ForeignCallArray,
|
|
976
|
+
) {
|
|
977
|
+
const slot = fromSingle(foreignSlot);
|
|
978
|
+
const index = fromSingle(foreignIndex).toNumber();
|
|
979
|
+
const elements = fromArray(foreignElements);
|
|
980
|
+
this.handlerAsUtility().setEphemeral(slot, index, elements);
|
|
981
|
+
return toForeignCallResult([]);
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
// eslint-disable-next-line camelcase
|
|
985
|
+
aztec_utl_getEphemeralLen(foreignSlot: ForeignCallSingle) {
|
|
986
|
+
const slot = fromSingle(foreignSlot);
|
|
987
|
+
const len = this.handlerAsUtility().getEphemeralLen(slot);
|
|
988
|
+
return toForeignCallResult([toSingle(new Fr(len))]);
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
// eslint-disable-next-line camelcase
|
|
992
|
+
aztec_utl_removeEphemeral(foreignSlot: ForeignCallSingle, foreignIndex: ForeignCallSingle) {
|
|
993
|
+
const slot = fromSingle(foreignSlot);
|
|
994
|
+
const index = fromSingle(foreignIndex).toNumber();
|
|
995
|
+
this.handlerAsUtility().removeEphemeral(slot, index);
|
|
996
|
+
return toForeignCallResult([]);
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
// eslint-disable-next-line camelcase
|
|
1000
|
+
aztec_utl_clearEphemeral(foreignSlot: ForeignCallSingle) {
|
|
1001
|
+
const slot = fromSingle(foreignSlot);
|
|
1002
|
+
this.handlerAsUtility().clearEphemeral(slot);
|
|
1003
|
+
return toForeignCallResult([]);
|
|
1004
|
+
}
|
|
1005
|
+
|
|
796
1006
|
// TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
|
|
797
1007
|
// 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
|
|
798
1008
|
// to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
|
|
799
1009
|
// existence of a txe_oracle method?
|
|
800
|
-
|
|
1010
|
+
// eslint-disable-next-line camelcase
|
|
1011
|
+
async aztec_utl_decryptAes128(
|
|
801
1012
|
foreignCiphertextBVecStorage: ForeignCallArray,
|
|
802
1013
|
foreignCiphertextLength: ForeignCallSingle,
|
|
803
1014
|
foreignIv: ForeignCallArray,
|
|
@@ -807,18 +1018,27 @@ export class RPCTranslator {
|
|
|
807
1018
|
const iv = fromUintArray(foreignIv, 8);
|
|
808
1019
|
const symKey = fromUintArray(foreignSymKey, 8);
|
|
809
1020
|
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
1021
|
+
// Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
|
|
1022
|
+
try {
|
|
1023
|
+
const plaintextBuffer = await this.handlerAsUtility().decryptAes128(ciphertext, iv, symKey);
|
|
1024
|
+
const [storage, length] = arrayToBoundedVec(
|
|
1025
|
+
bufferToU8Array(plaintextBuffer),
|
|
1026
|
+
foreignCiphertextBVecStorage.length,
|
|
1027
|
+
);
|
|
1028
|
+
return toForeignCallResult([toSingle(new Fr(1)), storage, length]);
|
|
1029
|
+
} catch {
|
|
1030
|
+
const zeroStorage = toArray(Array(foreignCiphertextBVecStorage.length).fill(new Fr(0)));
|
|
1031
|
+
return toForeignCallResult([toSingle(new Fr(0)), zeroStorage, toSingle(new Fr(0))]);
|
|
1032
|
+
}
|
|
815
1033
|
}
|
|
816
1034
|
|
|
817
|
-
|
|
1035
|
+
// eslint-disable-next-line camelcase
|
|
1036
|
+
async aztec_utl_getSharedSecret(
|
|
818
1037
|
foreignAddress: ForeignCallSingle,
|
|
819
1038
|
foreignEphPKField0: ForeignCallSingle,
|
|
820
1039
|
foreignEphPKField1: ForeignCallSingle,
|
|
821
1040
|
foreignEphPKField2: ForeignCallSingle,
|
|
1041
|
+
foreignContractAddress: ForeignCallSingle,
|
|
822
1042
|
) {
|
|
823
1043
|
const address = AztecAddress.fromField(fromSingle(foreignAddress));
|
|
824
1044
|
const ephPK = Point.fromFields([
|
|
@@ -826,45 +1046,68 @@ export class RPCTranslator {
|
|
|
826
1046
|
fromSingle(foreignEphPKField1),
|
|
827
1047
|
fromSingle(foreignEphPKField2),
|
|
828
1048
|
]);
|
|
1049
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
1050
|
+
|
|
1051
|
+
const secret = await this.handlerAsUtility().getSharedSecret(address, ephPK, contractAddress);
|
|
1052
|
+
|
|
1053
|
+
return toForeignCallResult([toSingle(secret)]);
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
// eslint-disable-next-line camelcase
|
|
1057
|
+
aztec_utl_setContractSyncCacheInvalid(
|
|
1058
|
+
foreignContractAddress: ForeignCallSingle,
|
|
1059
|
+
foreignScopes: ForeignCallArray,
|
|
1060
|
+
foreignScopeCount: ForeignCallSingle,
|
|
1061
|
+
) {
|
|
1062
|
+
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
1063
|
+
const count = fromSingle(foreignScopeCount).toNumber();
|
|
1064
|
+
const scopes = fromArray(foreignScopes)
|
|
1065
|
+
.slice(0, count)
|
|
1066
|
+
.map(f => new AztecAddress(f));
|
|
829
1067
|
|
|
830
|
-
|
|
1068
|
+
this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress, scopes);
|
|
831
1069
|
|
|
832
|
-
return
|
|
1070
|
+
return Promise.resolve(toForeignCallResult([]));
|
|
833
1071
|
}
|
|
834
1072
|
|
|
835
|
-
|
|
1073
|
+
// eslint-disable-next-line camelcase
|
|
1074
|
+
aztec_utl_emitOffchainEffect(_foreignData: ForeignCallArray) {
|
|
836
1075
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
837
1076
|
}
|
|
838
1077
|
|
|
839
1078
|
// AVM opcodes
|
|
840
1079
|
|
|
841
|
-
|
|
1080
|
+
// eslint-disable-next-line camelcase
|
|
1081
|
+
aztec_avm_emitPublicLog(_foreignMessage: ForeignCallArray) {
|
|
842
1082
|
// TODO(#8811): Implement
|
|
843
1083
|
return toForeignCallResult([]);
|
|
844
1084
|
}
|
|
845
1085
|
|
|
846
|
-
|
|
1086
|
+
// eslint-disable-next-line camelcase
|
|
1087
|
+
async aztec_avm_storageRead(foreignSlot: ForeignCallSingle, foreignContractAddress: ForeignCallSingle) {
|
|
847
1088
|
const slot = fromSingle(foreignSlot);
|
|
848
1089
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
849
1090
|
|
|
850
|
-
const value = (await this.handlerAsAvm().
|
|
1091
|
+
const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
|
|
851
1092
|
|
|
852
1093
|
return toForeignCallResult([toSingle(new Fr(value))]);
|
|
853
1094
|
}
|
|
854
1095
|
|
|
855
|
-
|
|
1096
|
+
// eslint-disable-next-line camelcase
|
|
1097
|
+
async aztec_avm_storageWrite(foreignSlot: ForeignCallSingle, foreignValue: ForeignCallSingle) {
|
|
856
1098
|
const slot = fromSingle(foreignSlot);
|
|
857
1099
|
const value = fromSingle(foreignValue);
|
|
858
1100
|
|
|
859
|
-
await this.handlerAsAvm().
|
|
1101
|
+
await this.handlerAsAvm().storageWrite(slot, value);
|
|
860
1102
|
|
|
861
1103
|
return toForeignCallResult([]);
|
|
862
1104
|
}
|
|
863
1105
|
|
|
864
|
-
|
|
1106
|
+
// eslint-disable-next-line camelcase
|
|
1107
|
+
async aztec_avm_getContractInstanceDeployer(foreignAddress: ForeignCallSingle) {
|
|
865
1108
|
const address = addressFromSingle(foreignAddress);
|
|
866
1109
|
|
|
867
|
-
const instance = await this.handlerAsUtility().
|
|
1110
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
868
1111
|
|
|
869
1112
|
return toForeignCallResult([
|
|
870
1113
|
toSingle(instance.deployer),
|
|
@@ -873,10 +1116,11 @@ export class RPCTranslator {
|
|
|
873
1116
|
]);
|
|
874
1117
|
}
|
|
875
1118
|
|
|
876
|
-
|
|
1119
|
+
// eslint-disable-next-line camelcase
|
|
1120
|
+
async aztec_avm_getContractInstanceClassId(foreignAddress: ForeignCallSingle) {
|
|
877
1121
|
const address = addressFromSingle(foreignAddress);
|
|
878
1122
|
|
|
879
|
-
const instance = await this.handlerAsUtility().
|
|
1123
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
880
1124
|
|
|
881
1125
|
return toForeignCallResult([
|
|
882
1126
|
toSingle(instance.currentContractClassId),
|
|
@@ -885,10 +1129,11 @@ export class RPCTranslator {
|
|
|
885
1129
|
]);
|
|
886
1130
|
}
|
|
887
1131
|
|
|
888
|
-
|
|
1132
|
+
// eslint-disable-next-line camelcase
|
|
1133
|
+
async aztec_avm_getContractInstanceInitializationHash(foreignAddress: ForeignCallSingle) {
|
|
889
1134
|
const address = addressFromSingle(foreignAddress);
|
|
890
1135
|
|
|
891
|
-
const instance = await this.handlerAsUtility().
|
|
1136
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
892
1137
|
|
|
893
1138
|
return toForeignCallResult([
|
|
894
1139
|
toSingle(instance.initializationHash),
|
|
@@ -897,85 +1142,98 @@ export class RPCTranslator {
|
|
|
897
1142
|
]);
|
|
898
1143
|
}
|
|
899
1144
|
|
|
900
|
-
|
|
901
|
-
|
|
1145
|
+
// eslint-disable-next-line camelcase
|
|
1146
|
+
async aztec_avm_sender() {
|
|
1147
|
+
const sender = await this.handlerAsAvm().sender();
|
|
902
1148
|
|
|
903
1149
|
return toForeignCallResult([toSingle(sender)]);
|
|
904
1150
|
}
|
|
905
1151
|
|
|
906
|
-
|
|
1152
|
+
// eslint-disable-next-line camelcase
|
|
1153
|
+
async aztec_avm_emitNullifier(foreignNullifier: ForeignCallSingle) {
|
|
907
1154
|
const nullifier = fromSingle(foreignNullifier);
|
|
908
1155
|
|
|
909
|
-
await this.handlerAsAvm().
|
|
1156
|
+
await this.handlerAsAvm().emitNullifier(nullifier);
|
|
910
1157
|
|
|
911
1158
|
return toForeignCallResult([]);
|
|
912
1159
|
}
|
|
913
1160
|
|
|
914
|
-
|
|
1161
|
+
// eslint-disable-next-line camelcase
|
|
1162
|
+
async aztec_avm_emitNoteHash(foreignNoteHash: ForeignCallSingle) {
|
|
915
1163
|
const noteHash = fromSingle(foreignNoteHash);
|
|
916
1164
|
|
|
917
|
-
await this.handlerAsAvm().
|
|
1165
|
+
await this.handlerAsAvm().emitNoteHash(noteHash);
|
|
918
1166
|
|
|
919
1167
|
return toForeignCallResult([]);
|
|
920
1168
|
}
|
|
921
1169
|
|
|
922
|
-
|
|
1170
|
+
// eslint-disable-next-line camelcase
|
|
1171
|
+
async aztec_avm_nullifierExists(foreignSiloedNullifier: ForeignCallSingle) {
|
|
923
1172
|
const siloedNullifier = fromSingle(foreignSiloedNullifier);
|
|
924
1173
|
|
|
925
|
-
const exists = await this.handlerAsAvm().
|
|
1174
|
+
const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
|
|
926
1175
|
|
|
927
1176
|
return toForeignCallResult([toSingle(new Fr(exists))]);
|
|
928
1177
|
}
|
|
929
1178
|
|
|
930
|
-
|
|
931
|
-
|
|
1179
|
+
// eslint-disable-next-line camelcase
|
|
1180
|
+
async aztec_avm_address() {
|
|
1181
|
+
const contractAddress = await this.handlerAsAvm().address();
|
|
932
1182
|
|
|
933
1183
|
return toForeignCallResult([toSingle(contractAddress.toField())]);
|
|
934
1184
|
}
|
|
935
1185
|
|
|
936
|
-
|
|
937
|
-
|
|
1186
|
+
// eslint-disable-next-line camelcase
|
|
1187
|
+
async aztec_avm_blockNumber() {
|
|
1188
|
+
const blockNumber = await this.handlerAsAvm().blockNumber();
|
|
938
1189
|
|
|
939
1190
|
return toForeignCallResult([toSingle(new Fr(blockNumber))]);
|
|
940
1191
|
}
|
|
941
1192
|
|
|
942
|
-
|
|
943
|
-
|
|
1193
|
+
// eslint-disable-next-line camelcase
|
|
1194
|
+
async aztec_avm_timestamp() {
|
|
1195
|
+
const timestamp = await this.handlerAsAvm().timestamp();
|
|
944
1196
|
|
|
945
1197
|
return toForeignCallResult([toSingle(new Fr(timestamp))]);
|
|
946
1198
|
}
|
|
947
1199
|
|
|
948
|
-
|
|
949
|
-
|
|
1200
|
+
// eslint-disable-next-line camelcase
|
|
1201
|
+
async aztec_avm_isStaticCall() {
|
|
1202
|
+
const isStaticCall = await this.handlerAsAvm().isStaticCall();
|
|
950
1203
|
|
|
951
1204
|
return toForeignCallResult([toSingle(new Fr(isStaticCall ? 1 : 0))]);
|
|
952
1205
|
}
|
|
953
1206
|
|
|
954
|
-
|
|
955
|
-
|
|
1207
|
+
// eslint-disable-next-line camelcase
|
|
1208
|
+
async aztec_avm_chainId() {
|
|
1209
|
+
const chainId = await this.handlerAsAvm().chainId();
|
|
956
1210
|
|
|
957
1211
|
return toForeignCallResult([toSingle(chainId)]);
|
|
958
1212
|
}
|
|
959
1213
|
|
|
960
|
-
|
|
961
|
-
|
|
1214
|
+
// eslint-disable-next-line camelcase
|
|
1215
|
+
async aztec_avm_version() {
|
|
1216
|
+
const version = await this.handlerAsAvm().version();
|
|
962
1217
|
|
|
963
1218
|
return toForeignCallResult([toSingle(version)]);
|
|
964
1219
|
}
|
|
965
1220
|
|
|
966
|
-
|
|
1221
|
+
// eslint-disable-next-line camelcase
|
|
1222
|
+
aztec_avm_returndataSize() {
|
|
967
1223
|
throw new Error(
|
|
968
1224
|
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
969
1225
|
);
|
|
970
1226
|
}
|
|
971
1227
|
|
|
972
|
-
|
|
1228
|
+
// eslint-disable-next-line camelcase
|
|
1229
|
+
aztec_avm_returndataCopy(_foreignRdOffset: ForeignCallSingle, _foreignCopySize: ForeignCallSingle) {
|
|
973
1230
|
throw new Error(
|
|
974
1231
|
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
975
1232
|
);
|
|
976
1233
|
}
|
|
977
1234
|
|
|
978
|
-
|
|
1235
|
+
// eslint-disable-next-line camelcase
|
|
1236
|
+
aztec_avm_call(
|
|
979
1237
|
_foreignL2Gas: ForeignCallSingle,
|
|
980
1238
|
_foreignDaGas: ForeignCallSingle,
|
|
981
1239
|
_foreignAddress: ForeignCallSingle,
|
|
@@ -987,7 +1245,8 @@ export class RPCTranslator {
|
|
|
987
1245
|
);
|
|
988
1246
|
}
|
|
989
1247
|
|
|
990
|
-
|
|
1248
|
+
// eslint-disable-next-line camelcase
|
|
1249
|
+
aztec_avm_staticCall(
|
|
991
1250
|
_foreignL2Gas: ForeignCallSingle,
|
|
992
1251
|
_foreignDaGas: ForeignCallSingle,
|
|
993
1252
|
_foreignAddress: ForeignCallSingle,
|
|
@@ -999,13 +1258,15 @@ export class RPCTranslator {
|
|
|
999
1258
|
);
|
|
1000
1259
|
}
|
|
1001
1260
|
|
|
1002
|
-
|
|
1261
|
+
// eslint-disable-next-line camelcase
|
|
1262
|
+
aztec_avm_successCopy() {
|
|
1003
1263
|
throw new Error(
|
|
1004
1264
|
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
1005
1265
|
);
|
|
1006
1266
|
}
|
|
1007
1267
|
|
|
1008
|
-
|
|
1268
|
+
// eslint-disable-next-line camelcase
|
|
1269
|
+
async aztec_txe_privateCallNewFlow(
|
|
1009
1270
|
foreignFrom: ForeignCallSingle,
|
|
1010
1271
|
foreignTargetContractAddress: ForeignCallSingle,
|
|
1011
1272
|
foreignFunctionSelector: ForeignCallSingle,
|
|
@@ -1020,19 +1281,23 @@ export class RPCTranslator {
|
|
|
1020
1281
|
const argsHash = fromSingle(foreignArgsHash);
|
|
1021
1282
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
1022
1283
|
|
|
1023
|
-
const returnValues = await this.handlerAsTxe().
|
|
1284
|
+
const returnValues = await this.handlerAsTxe().privateCallNewFlow(
|
|
1024
1285
|
from,
|
|
1025
1286
|
targetContractAddress,
|
|
1026
1287
|
functionSelector,
|
|
1027
1288
|
args,
|
|
1028
1289
|
argsHash,
|
|
1029
1290
|
isStaticCall,
|
|
1291
|
+
this.stateHandler.getCurrentJob(),
|
|
1030
1292
|
);
|
|
1031
1293
|
|
|
1294
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
1295
|
+
await this.stateHandler.cycleJob();
|
|
1032
1296
|
return toForeignCallResult([toArray(returnValues)]);
|
|
1033
1297
|
}
|
|
1034
1298
|
|
|
1035
|
-
|
|
1299
|
+
// eslint-disable-next-line camelcase
|
|
1300
|
+
async aztec_txe_executeUtilityFunction(
|
|
1036
1301
|
foreignTargetContractAddress: ForeignCallSingle,
|
|
1037
1302
|
foreignFunctionSelector: ForeignCallSingle,
|
|
1038
1303
|
foreignArgs: ForeignCallArray,
|
|
@@ -1041,16 +1306,20 @@ export class RPCTranslator {
|
|
|
1041
1306
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
1042
1307
|
const args = fromArray(foreignArgs);
|
|
1043
1308
|
|
|
1044
|
-
const returnValues = await this.handlerAsTxe().
|
|
1309
|
+
const returnValues = await this.handlerAsTxe().executeUtilityFunction(
|
|
1045
1310
|
targetContractAddress,
|
|
1046
1311
|
functionSelector,
|
|
1047
1312
|
args,
|
|
1313
|
+
this.stateHandler.getCurrentJob(),
|
|
1048
1314
|
);
|
|
1049
1315
|
|
|
1316
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
1317
|
+
await this.stateHandler.cycleJob();
|
|
1050
1318
|
return toForeignCallResult([toArray(returnValues)]);
|
|
1051
1319
|
}
|
|
1052
1320
|
|
|
1053
|
-
|
|
1321
|
+
// eslint-disable-next-line camelcase
|
|
1322
|
+
async aztec_txe_publicCallNewFlow(
|
|
1054
1323
|
foreignFrom: ForeignCallSingle,
|
|
1055
1324
|
foreignAddress: ForeignCallSingle,
|
|
1056
1325
|
foreignCalldata: ForeignCallArray,
|
|
@@ -1061,13 +1330,16 @@ export class RPCTranslator {
|
|
|
1061
1330
|
const calldata = fromArray(foreignCalldata);
|
|
1062
1331
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
1063
1332
|
|
|
1064
|
-
const returnValues = await this.handlerAsTxe().
|
|
1333
|
+
const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
|
|
1065
1334
|
|
|
1335
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
1336
|
+
await this.stateHandler.cycleJob();
|
|
1066
1337
|
return toForeignCallResult([toArray(returnValues)]);
|
|
1067
1338
|
}
|
|
1068
1339
|
|
|
1069
|
-
|
|
1070
|
-
|
|
1340
|
+
// eslint-disable-next-line camelcase
|
|
1341
|
+
async aztec_prv_getSenderForTags() {
|
|
1342
|
+
const sender = await this.handlerAsPrivate().getSenderForTags();
|
|
1071
1343
|
|
|
1072
1344
|
// Return a Noir Option struct with `some` and `value` fields
|
|
1073
1345
|
if (sender === undefined) {
|
|
@@ -1079,19 +1351,21 @@ export class RPCTranslator {
|
|
|
1079
1351
|
}
|
|
1080
1352
|
}
|
|
1081
1353
|
|
|
1082
|
-
|
|
1354
|
+
// eslint-disable-next-line camelcase
|
|
1355
|
+
async aztec_prv_setSenderForTags(foreignSenderForTags: ForeignCallSingle) {
|
|
1083
1356
|
const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
|
|
1084
1357
|
|
|
1085
|
-
await this.handlerAsPrivate().
|
|
1358
|
+
await this.handlerAsPrivate().setSenderForTags(senderForTags);
|
|
1086
1359
|
|
|
1087
1360
|
return toForeignCallResult([]);
|
|
1088
1361
|
}
|
|
1089
1362
|
|
|
1090
|
-
|
|
1363
|
+
// eslint-disable-next-line camelcase
|
|
1364
|
+
async aztec_prv_getNextAppTagAsSender(foreignSender: ForeignCallSingle, foreignRecipient: ForeignCallSingle) {
|
|
1091
1365
|
const sender = AztecAddress.fromField(fromSingle(foreignSender));
|
|
1092
1366
|
const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
|
|
1093
1367
|
|
|
1094
|
-
const nextAppTag = await this.handlerAsPrivate().
|
|
1368
|
+
const nextAppTag = await this.handlerAsPrivate().getNextAppTagAsSender(sender, recipient);
|
|
1095
1369
|
|
|
1096
1370
|
return toForeignCallResult([toSingle(nextAppTag.value)]);
|
|
1097
1371
|
}
|