@aztec/txe 0.0.1-commit.54489865 → 0.0.1-commit.5914bae
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 +144 -58
- package/dest/rpc_translator.d.ts +121 -83
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +399 -164
- 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 +97 -26
- 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 +167 -110
- package/src/rpc_translator.ts +463 -181
- 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 +109 -85
- 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
|
-
) {
|
|
605
|
-
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
public privateNotifySetPublicTeardownFunctionCall(
|
|
609
|
-
_foreignTargetContractAddress: ForeignCallSingle,
|
|
610
|
-
_foreignCalldataHash: ForeignCallSingle,
|
|
611
|
-
_foreignSideEffectCounter: ForeignCallSingle,
|
|
612
|
-
_foreignIsStaticCall: ForeignCallSingle,
|
|
613
|
-
) {
|
|
655
|
+
// eslint-disable-next-line camelcase
|
|
656
|
+
public aztec_prv_assertValidPublicCalldata(_foreignCalldataHash: ForeignCallSingle) {
|
|
614
657
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
615
658
|
}
|
|
616
659
|
|
|
617
|
-
|
|
660
|
+
// eslint-disable-next-line camelcase
|
|
661
|
+
public aztec_prv_notifyRevertiblePhaseStart(_foreignMinRevertibleSideEffectCounter: ForeignCallSingle) {
|
|
618
662
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
619
663
|
}
|
|
620
664
|
|
|
621
|
-
|
|
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,38 +688,49 @@ export class RPCTranslator {
|
|
|
641
688
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
642
689
|
}
|
|
643
690
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
691
|
+
// eslint-disable-next-line camelcase
|
|
692
|
+
async aztec_utl_getNoteHashMembershipWitness(
|
|
693
|
+
foreignAnchorBlockHash: ForeignCallSingle,
|
|
694
|
+
foreignNoteHash: ForeignCallSingle,
|
|
695
|
+
) {
|
|
696
|
+
const blockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
697
|
+
const noteHash = fromSingle(foreignNoteHash);
|
|
647
698
|
|
|
648
|
-
const witness = await this.handlerAsUtility().
|
|
699
|
+
const witness = await this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash);
|
|
649
700
|
|
|
650
701
|
if (!witness) {
|
|
651
|
-
throw new Error(`Note hash ${
|
|
702
|
+
throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
652
703
|
}
|
|
653
704
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
654
705
|
}
|
|
655
706
|
|
|
656
|
-
|
|
707
|
+
// eslint-disable-next-line camelcase
|
|
708
|
+
async aztec_utl_getBlockHashMembershipWitness(
|
|
709
|
+
foreignAnchorBlockHash: ForeignCallSingle,
|
|
710
|
+
foreignBlockHash: ForeignCallSingle,
|
|
711
|
+
) {
|
|
712
|
+
const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
657
713
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
658
|
-
const leafValue = fromSingle(foreignLeafValue);
|
|
659
714
|
|
|
660
|
-
const witness = await this.handlerAsUtility().
|
|
715
|
+
const witness = await this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
661
716
|
|
|
662
717
|
if (!witness) {
|
|
663
|
-
throw new Error(
|
|
718
|
+
throw new Error(
|
|
719
|
+
`Block hash ${blockHash.toString()} not found in the archive tree at anchor block ${anchorBlockHash.toString()}.`,
|
|
720
|
+
);
|
|
664
721
|
}
|
|
665
722
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
666
723
|
}
|
|
667
724
|
|
|
668
|
-
|
|
725
|
+
// eslint-disable-next-line camelcase
|
|
726
|
+
async aztec_utl_getLowNullifierMembershipWitness(
|
|
669
727
|
foreignBlockHash: ForeignCallSingle,
|
|
670
728
|
foreignNullifier: ForeignCallSingle,
|
|
671
729
|
) {
|
|
672
730
|
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
673
731
|
const nullifier = fromSingle(foreignNullifier);
|
|
674
732
|
|
|
675
|
-
const witness = await this.handlerAsUtility().
|
|
733
|
+
const witness = await this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
676
734
|
|
|
677
735
|
if (!witness) {
|
|
678
736
|
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
|
|
@@ -680,74 +738,167 @@ export class RPCTranslator {
|
|
|
680
738
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
681
739
|
}
|
|
682
740
|
|
|
683
|
-
|
|
741
|
+
// eslint-disable-next-line camelcase
|
|
742
|
+
async aztec_utl_getPendingTaggedLogs(
|
|
743
|
+
foreignPendingTaggedLogArrayBaseSlot: ForeignCallSingle,
|
|
744
|
+
foreignScope: ForeignCallSingle,
|
|
745
|
+
) {
|
|
684
746
|
const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
|
|
747
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
685
748
|
|
|
686
|
-
await this.handlerAsUtility().
|
|
749
|
+
await this.handlerAsUtility().getPendingTaggedLogs(pendingTaggedLogArrayBaseSlot, scope);
|
|
687
750
|
|
|
688
751
|
return toForeignCallResult([]);
|
|
689
752
|
}
|
|
690
753
|
|
|
691
|
-
|
|
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(
|
|
692
763
|
foreignContractAddress: ForeignCallSingle,
|
|
693
764
|
foreignNoteValidationRequestsArrayBaseSlot: ForeignCallSingle,
|
|
694
765
|
foreignEventValidationRequestsArrayBaseSlot: ForeignCallSingle,
|
|
766
|
+
foreignMaxNotePackedLen: ForeignCallSingle,
|
|
767
|
+
foreignMaxEventSerializedLen: ForeignCallSingle,
|
|
768
|
+
foreignScope: ForeignCallSingle,
|
|
695
769
|
) {
|
|
696
770
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
697
771
|
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
698
772
|
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
773
|
+
const maxNotePackedLen = fromSingle(foreignMaxNotePackedLen).toNumber();
|
|
774
|
+
const maxEventSerializedLen = fromSingle(foreignMaxEventSerializedLen).toNumber();
|
|
775
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
699
776
|
|
|
700
|
-
await this.handlerAsUtility().
|
|
777
|
+
await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
|
|
701
778
|
contractAddress,
|
|
702
779
|
noteValidationRequestsArrayBaseSlot,
|
|
703
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,
|
|
704
809
|
);
|
|
705
810
|
|
|
706
811
|
return toForeignCallResult([]);
|
|
707
812
|
}
|
|
708
813
|
|
|
709
|
-
|
|
814
|
+
// eslint-disable-next-line camelcase
|
|
815
|
+
public async aztec_utl_getLogsByTag(
|
|
710
816
|
foreignContractAddress: ForeignCallSingle,
|
|
711
817
|
foreignLogRetrievalRequestsArrayBaseSlot: ForeignCallSingle,
|
|
712
818
|
foreignLogRetrievalResponsesArrayBaseSlot: ForeignCallSingle,
|
|
819
|
+
foreignScope: ForeignCallSingle,
|
|
713
820
|
) {
|
|
714
821
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
715
822
|
const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
|
|
716
823
|
const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
|
|
824
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
717
825
|
|
|
718
|
-
await this.handlerAsUtility().
|
|
826
|
+
await this.handlerAsUtility().getLogsByTag(
|
|
719
827
|
contractAddress,
|
|
720
828
|
logRetrievalRequestsArrayBaseSlot,
|
|
721
829
|
logRetrievalResponsesArrayBaseSlot,
|
|
830
|
+
scope,
|
|
722
831
|
);
|
|
723
832
|
|
|
724
833
|
return toForeignCallResult([]);
|
|
725
834
|
}
|
|
726
835
|
|
|
727
|
-
|
|
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,
|
|
853
|
+
);
|
|
854
|
+
|
|
855
|
+
return toForeignCallResult([]);
|
|
856
|
+
}
|
|
857
|
+
|
|
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(
|
|
728
874
|
foreignContractAddress: ForeignCallSingle,
|
|
729
875
|
foreignSlot: ForeignCallSingle,
|
|
730
876
|
foreignCapsule: ForeignCallArray,
|
|
877
|
+
foreignScope: ForeignCallSingle,
|
|
731
878
|
) {
|
|
732
879
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
733
880
|
const slot = fromSingle(foreignSlot);
|
|
734
881
|
const capsule = fromArray(foreignCapsule);
|
|
882
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
735
883
|
|
|
736
|
-
|
|
884
|
+
this.handlerAsUtility().setCapsule(contractAddress, slot, capsule, scope);
|
|
737
885
|
|
|
738
886
|
return toForeignCallResult([]);
|
|
739
887
|
}
|
|
740
888
|
|
|
741
|
-
|
|
889
|
+
// eslint-disable-next-line camelcase
|
|
890
|
+
async aztec_utl_getCapsule(
|
|
742
891
|
foreignContractAddress: ForeignCallSingle,
|
|
743
892
|
foreignSlot: ForeignCallSingle,
|
|
744
893
|
foreignTSize: ForeignCallSingle,
|
|
894
|
+
foreignScope: ForeignCallSingle,
|
|
745
895
|
) {
|
|
746
896
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
747
897
|
const slot = fromSingle(foreignSlot);
|
|
748
898
|
const tSize = fromSingle(foreignTSize).toNumber();
|
|
899
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
749
900
|
|
|
750
|
-
const values = await this.handlerAsUtility().
|
|
901
|
+
const values = await this.handlerAsUtility().getCapsule(contractAddress, slot, scope);
|
|
751
902
|
|
|
752
903
|
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
753
904
|
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
@@ -760,36 +911,104 @@ export class RPCTranslator {
|
|
|
760
911
|
}
|
|
761
912
|
}
|
|
762
913
|
|
|
763
|
-
|
|
914
|
+
// eslint-disable-next-line camelcase
|
|
915
|
+
aztec_utl_deleteCapsule(
|
|
916
|
+
foreignContractAddress: ForeignCallSingle,
|
|
917
|
+
foreignSlot: ForeignCallSingle,
|
|
918
|
+
foreignScope: ForeignCallSingle,
|
|
919
|
+
) {
|
|
764
920
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
765
921
|
const slot = fromSingle(foreignSlot);
|
|
922
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
766
923
|
|
|
767
|
-
|
|
924
|
+
this.handlerAsUtility().deleteCapsule(contractAddress, slot, scope);
|
|
768
925
|
|
|
769
926
|
return toForeignCallResult([]);
|
|
770
927
|
}
|
|
771
928
|
|
|
772
|
-
|
|
929
|
+
// eslint-disable-next-line camelcase
|
|
930
|
+
async aztec_utl_copyCapsule(
|
|
773
931
|
foreignContractAddress: ForeignCallSingle,
|
|
774
932
|
foreignSrcSlot: ForeignCallSingle,
|
|
775
933
|
foreignDstSlot: ForeignCallSingle,
|
|
776
934
|
foreignNumEntries: ForeignCallSingle,
|
|
935
|
+
foreignScope: ForeignCallSingle,
|
|
777
936
|
) {
|
|
778
937
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
779
938
|
const srcSlot = fromSingle(foreignSrcSlot);
|
|
780
939
|
const dstSlot = fromSingle(foreignDstSlot);
|
|
781
940
|
const numEntries = fromSingle(foreignNumEntries).toNumber();
|
|
941
|
+
const scope = AztecAddress.fromField(fromSingle(foreignScope));
|
|
782
942
|
|
|
783
|
-
await this.handlerAsUtility().
|
|
943
|
+
await this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope);
|
|
784
944
|
|
|
785
945
|
return toForeignCallResult([]);
|
|
786
946
|
}
|
|
787
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
|
+
|
|
788
1006
|
// TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
|
|
789
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
|
|
790
1008
|
// to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
|
|
791
1009
|
// existence of a txe_oracle method?
|
|
792
|
-
|
|
1010
|
+
// eslint-disable-next-line camelcase
|
|
1011
|
+
async aztec_utl_decryptAes128(
|
|
793
1012
|
foreignCiphertextBVecStorage: ForeignCallArray,
|
|
794
1013
|
foreignCiphertextLength: ForeignCallSingle,
|
|
795
1014
|
foreignIv: ForeignCallArray,
|
|
@@ -799,18 +1018,27 @@ export class RPCTranslator {
|
|
|
799
1018
|
const iv = fromUintArray(foreignIv, 8);
|
|
800
1019
|
const symKey = fromUintArray(foreignSymKey, 8);
|
|
801
1020
|
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
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
|
+
}
|
|
807
1033
|
}
|
|
808
1034
|
|
|
809
|
-
|
|
1035
|
+
// eslint-disable-next-line camelcase
|
|
1036
|
+
async aztec_utl_getSharedSecret(
|
|
810
1037
|
foreignAddress: ForeignCallSingle,
|
|
811
1038
|
foreignEphPKField0: ForeignCallSingle,
|
|
812
1039
|
foreignEphPKField1: ForeignCallSingle,
|
|
813
1040
|
foreignEphPKField2: ForeignCallSingle,
|
|
1041
|
+
foreignContractAddress: ForeignCallSingle,
|
|
814
1042
|
) {
|
|
815
1043
|
const address = AztecAddress.fromField(fromSingle(foreignAddress));
|
|
816
1044
|
const ephPK = Point.fromFields([
|
|
@@ -818,45 +1046,68 @@ export class RPCTranslator {
|
|
|
818
1046
|
fromSingle(foreignEphPKField1),
|
|
819
1047
|
fromSingle(foreignEphPKField2),
|
|
820
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));
|
|
821
1067
|
|
|
822
|
-
|
|
1068
|
+
this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress, scopes);
|
|
823
1069
|
|
|
824
|
-
return
|
|
1070
|
+
return Promise.resolve(toForeignCallResult([]));
|
|
825
1071
|
}
|
|
826
1072
|
|
|
827
|
-
|
|
1073
|
+
// eslint-disable-next-line camelcase
|
|
1074
|
+
aztec_utl_emitOffchainEffect(_foreignData: ForeignCallArray) {
|
|
828
1075
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
829
1076
|
}
|
|
830
1077
|
|
|
831
1078
|
// AVM opcodes
|
|
832
1079
|
|
|
833
|
-
|
|
1080
|
+
// eslint-disable-next-line camelcase
|
|
1081
|
+
aztec_avm_emitPublicLog(_foreignMessage: ForeignCallArray) {
|
|
834
1082
|
// TODO(#8811): Implement
|
|
835
1083
|
return toForeignCallResult([]);
|
|
836
1084
|
}
|
|
837
1085
|
|
|
838
|
-
|
|
1086
|
+
// eslint-disable-next-line camelcase
|
|
1087
|
+
async aztec_avm_storageRead(foreignSlot: ForeignCallSingle, foreignContractAddress: ForeignCallSingle) {
|
|
839
1088
|
const slot = fromSingle(foreignSlot);
|
|
840
1089
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
841
1090
|
|
|
842
|
-
const value = (await this.handlerAsAvm().
|
|
1091
|
+
const value = (await this.handlerAsAvm().storageRead(slot, contractAddress)).value;
|
|
843
1092
|
|
|
844
1093
|
return toForeignCallResult([toSingle(new Fr(value))]);
|
|
845
1094
|
}
|
|
846
1095
|
|
|
847
|
-
|
|
1096
|
+
// eslint-disable-next-line camelcase
|
|
1097
|
+
async aztec_avm_storageWrite(foreignSlot: ForeignCallSingle, foreignValue: ForeignCallSingle) {
|
|
848
1098
|
const slot = fromSingle(foreignSlot);
|
|
849
1099
|
const value = fromSingle(foreignValue);
|
|
850
1100
|
|
|
851
|
-
await this.handlerAsAvm().
|
|
1101
|
+
await this.handlerAsAvm().storageWrite(slot, value);
|
|
852
1102
|
|
|
853
1103
|
return toForeignCallResult([]);
|
|
854
1104
|
}
|
|
855
1105
|
|
|
856
|
-
|
|
1106
|
+
// eslint-disable-next-line camelcase
|
|
1107
|
+
async aztec_avm_getContractInstanceDeployer(foreignAddress: ForeignCallSingle) {
|
|
857
1108
|
const address = addressFromSingle(foreignAddress);
|
|
858
1109
|
|
|
859
|
-
const instance = await this.handlerAsUtility().
|
|
1110
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
860
1111
|
|
|
861
1112
|
return toForeignCallResult([
|
|
862
1113
|
toSingle(instance.deployer),
|
|
@@ -865,10 +1116,11 @@ export class RPCTranslator {
|
|
|
865
1116
|
]);
|
|
866
1117
|
}
|
|
867
1118
|
|
|
868
|
-
|
|
1119
|
+
// eslint-disable-next-line camelcase
|
|
1120
|
+
async aztec_avm_getContractInstanceClassId(foreignAddress: ForeignCallSingle) {
|
|
869
1121
|
const address = addressFromSingle(foreignAddress);
|
|
870
1122
|
|
|
871
|
-
const instance = await this.handlerAsUtility().
|
|
1123
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
872
1124
|
|
|
873
1125
|
return toForeignCallResult([
|
|
874
1126
|
toSingle(instance.currentContractClassId),
|
|
@@ -877,10 +1129,11 @@ export class RPCTranslator {
|
|
|
877
1129
|
]);
|
|
878
1130
|
}
|
|
879
1131
|
|
|
880
|
-
|
|
1132
|
+
// eslint-disable-next-line camelcase
|
|
1133
|
+
async aztec_avm_getContractInstanceInitializationHash(foreignAddress: ForeignCallSingle) {
|
|
881
1134
|
const address = addressFromSingle(foreignAddress);
|
|
882
1135
|
|
|
883
|
-
const instance = await this.handlerAsUtility().
|
|
1136
|
+
const instance = await this.handlerAsUtility().getContractInstance(address);
|
|
884
1137
|
|
|
885
1138
|
return toForeignCallResult([
|
|
886
1139
|
toSingle(instance.initializationHash),
|
|
@@ -889,85 +1142,98 @@ export class RPCTranslator {
|
|
|
889
1142
|
]);
|
|
890
1143
|
}
|
|
891
1144
|
|
|
892
|
-
|
|
893
|
-
|
|
1145
|
+
// eslint-disable-next-line camelcase
|
|
1146
|
+
async aztec_avm_sender() {
|
|
1147
|
+
const sender = await this.handlerAsAvm().sender();
|
|
894
1148
|
|
|
895
1149
|
return toForeignCallResult([toSingle(sender)]);
|
|
896
1150
|
}
|
|
897
1151
|
|
|
898
|
-
|
|
1152
|
+
// eslint-disable-next-line camelcase
|
|
1153
|
+
async aztec_avm_emitNullifier(foreignNullifier: ForeignCallSingle) {
|
|
899
1154
|
const nullifier = fromSingle(foreignNullifier);
|
|
900
1155
|
|
|
901
|
-
await this.handlerAsAvm().
|
|
1156
|
+
await this.handlerAsAvm().emitNullifier(nullifier);
|
|
902
1157
|
|
|
903
1158
|
return toForeignCallResult([]);
|
|
904
1159
|
}
|
|
905
1160
|
|
|
906
|
-
|
|
1161
|
+
// eslint-disable-next-line camelcase
|
|
1162
|
+
async aztec_avm_emitNoteHash(foreignNoteHash: ForeignCallSingle) {
|
|
907
1163
|
const noteHash = fromSingle(foreignNoteHash);
|
|
908
1164
|
|
|
909
|
-
await this.handlerAsAvm().
|
|
1165
|
+
await this.handlerAsAvm().emitNoteHash(noteHash);
|
|
910
1166
|
|
|
911
1167
|
return toForeignCallResult([]);
|
|
912
1168
|
}
|
|
913
1169
|
|
|
914
|
-
|
|
1170
|
+
// eslint-disable-next-line camelcase
|
|
1171
|
+
async aztec_avm_nullifierExists(foreignSiloedNullifier: ForeignCallSingle) {
|
|
915
1172
|
const siloedNullifier = fromSingle(foreignSiloedNullifier);
|
|
916
1173
|
|
|
917
|
-
const exists = await this.handlerAsAvm().
|
|
1174
|
+
const exists = await this.handlerAsAvm().nullifierExists(siloedNullifier);
|
|
918
1175
|
|
|
919
1176
|
return toForeignCallResult([toSingle(new Fr(exists))]);
|
|
920
1177
|
}
|
|
921
1178
|
|
|
922
|
-
|
|
923
|
-
|
|
1179
|
+
// eslint-disable-next-line camelcase
|
|
1180
|
+
async aztec_avm_address() {
|
|
1181
|
+
const contractAddress = await this.handlerAsAvm().address();
|
|
924
1182
|
|
|
925
1183
|
return toForeignCallResult([toSingle(contractAddress.toField())]);
|
|
926
1184
|
}
|
|
927
1185
|
|
|
928
|
-
|
|
929
|
-
|
|
1186
|
+
// eslint-disable-next-line camelcase
|
|
1187
|
+
async aztec_avm_blockNumber() {
|
|
1188
|
+
const blockNumber = await this.handlerAsAvm().blockNumber();
|
|
930
1189
|
|
|
931
1190
|
return toForeignCallResult([toSingle(new Fr(blockNumber))]);
|
|
932
1191
|
}
|
|
933
1192
|
|
|
934
|
-
|
|
935
|
-
|
|
1193
|
+
// eslint-disable-next-line camelcase
|
|
1194
|
+
async aztec_avm_timestamp() {
|
|
1195
|
+
const timestamp = await this.handlerAsAvm().timestamp();
|
|
936
1196
|
|
|
937
1197
|
return toForeignCallResult([toSingle(new Fr(timestamp))]);
|
|
938
1198
|
}
|
|
939
1199
|
|
|
940
|
-
|
|
941
|
-
|
|
1200
|
+
// eslint-disable-next-line camelcase
|
|
1201
|
+
async aztec_avm_isStaticCall() {
|
|
1202
|
+
const isStaticCall = await this.handlerAsAvm().isStaticCall();
|
|
942
1203
|
|
|
943
1204
|
return toForeignCallResult([toSingle(new Fr(isStaticCall ? 1 : 0))]);
|
|
944
1205
|
}
|
|
945
1206
|
|
|
946
|
-
|
|
947
|
-
|
|
1207
|
+
// eslint-disable-next-line camelcase
|
|
1208
|
+
async aztec_avm_chainId() {
|
|
1209
|
+
const chainId = await this.handlerAsAvm().chainId();
|
|
948
1210
|
|
|
949
1211
|
return toForeignCallResult([toSingle(chainId)]);
|
|
950
1212
|
}
|
|
951
1213
|
|
|
952
|
-
|
|
953
|
-
|
|
1214
|
+
// eslint-disable-next-line camelcase
|
|
1215
|
+
async aztec_avm_version() {
|
|
1216
|
+
const version = await this.handlerAsAvm().version();
|
|
954
1217
|
|
|
955
1218
|
return toForeignCallResult([toSingle(version)]);
|
|
956
1219
|
}
|
|
957
1220
|
|
|
958
|
-
|
|
1221
|
+
// eslint-disable-next-line camelcase
|
|
1222
|
+
aztec_avm_returndataSize() {
|
|
959
1223
|
throw new Error(
|
|
960
1224
|
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
961
1225
|
);
|
|
962
1226
|
}
|
|
963
1227
|
|
|
964
|
-
|
|
1228
|
+
// eslint-disable-next-line camelcase
|
|
1229
|
+
aztec_avm_returndataCopy(_foreignRdOffset: ForeignCallSingle, _foreignCopySize: ForeignCallSingle) {
|
|
965
1230
|
throw new Error(
|
|
966
1231
|
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
967
1232
|
);
|
|
968
1233
|
}
|
|
969
1234
|
|
|
970
|
-
|
|
1235
|
+
// eslint-disable-next-line camelcase
|
|
1236
|
+
aztec_avm_call(
|
|
971
1237
|
_foreignL2Gas: ForeignCallSingle,
|
|
972
1238
|
_foreignDaGas: ForeignCallSingle,
|
|
973
1239
|
_foreignAddress: ForeignCallSingle,
|
|
@@ -979,7 +1245,8 @@ export class RPCTranslator {
|
|
|
979
1245
|
);
|
|
980
1246
|
}
|
|
981
1247
|
|
|
982
|
-
|
|
1248
|
+
// eslint-disable-next-line camelcase
|
|
1249
|
+
aztec_avm_staticCall(
|
|
983
1250
|
_foreignL2Gas: ForeignCallSingle,
|
|
984
1251
|
_foreignDaGas: ForeignCallSingle,
|
|
985
1252
|
_foreignAddress: ForeignCallSingle,
|
|
@@ -991,13 +1258,15 @@ export class RPCTranslator {
|
|
|
991
1258
|
);
|
|
992
1259
|
}
|
|
993
1260
|
|
|
994
|
-
|
|
1261
|
+
// eslint-disable-next-line camelcase
|
|
1262
|
+
aztec_avm_successCopy() {
|
|
995
1263
|
throw new Error(
|
|
996
1264
|
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
997
1265
|
);
|
|
998
1266
|
}
|
|
999
1267
|
|
|
1000
|
-
|
|
1268
|
+
// eslint-disable-next-line camelcase
|
|
1269
|
+
async aztec_txe_privateCallNewFlow(
|
|
1001
1270
|
foreignFrom: ForeignCallSingle,
|
|
1002
1271
|
foreignTargetContractAddress: ForeignCallSingle,
|
|
1003
1272
|
foreignFunctionSelector: ForeignCallSingle,
|
|
@@ -1012,19 +1281,23 @@ export class RPCTranslator {
|
|
|
1012
1281
|
const argsHash = fromSingle(foreignArgsHash);
|
|
1013
1282
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
1014
1283
|
|
|
1015
|
-
const returnValues = await this.handlerAsTxe().
|
|
1284
|
+
const returnValues = await this.handlerAsTxe().privateCallNewFlow(
|
|
1016
1285
|
from,
|
|
1017
1286
|
targetContractAddress,
|
|
1018
1287
|
functionSelector,
|
|
1019
1288
|
args,
|
|
1020
1289
|
argsHash,
|
|
1021
1290
|
isStaticCall,
|
|
1291
|
+
this.stateHandler.getCurrentJob(),
|
|
1022
1292
|
);
|
|
1023
1293
|
|
|
1294
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
1295
|
+
await this.stateHandler.cycleJob();
|
|
1024
1296
|
return toForeignCallResult([toArray(returnValues)]);
|
|
1025
1297
|
}
|
|
1026
1298
|
|
|
1027
|
-
|
|
1299
|
+
// eslint-disable-next-line camelcase
|
|
1300
|
+
async aztec_txe_executeUtilityFunction(
|
|
1028
1301
|
foreignTargetContractAddress: ForeignCallSingle,
|
|
1029
1302
|
foreignFunctionSelector: ForeignCallSingle,
|
|
1030
1303
|
foreignArgs: ForeignCallArray,
|
|
@@ -1033,16 +1306,20 @@ export class RPCTranslator {
|
|
|
1033
1306
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
1034
1307
|
const args = fromArray(foreignArgs);
|
|
1035
1308
|
|
|
1036
|
-
const returnValues = await this.handlerAsTxe().
|
|
1309
|
+
const returnValues = await this.handlerAsTxe().executeUtilityFunction(
|
|
1037
1310
|
targetContractAddress,
|
|
1038
1311
|
functionSelector,
|
|
1039
1312
|
args,
|
|
1313
|
+
this.stateHandler.getCurrentJob(),
|
|
1040
1314
|
);
|
|
1041
1315
|
|
|
1316
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
1317
|
+
await this.stateHandler.cycleJob();
|
|
1042
1318
|
return toForeignCallResult([toArray(returnValues)]);
|
|
1043
1319
|
}
|
|
1044
1320
|
|
|
1045
|
-
|
|
1321
|
+
// eslint-disable-next-line camelcase
|
|
1322
|
+
async aztec_txe_publicCallNewFlow(
|
|
1046
1323
|
foreignFrom: ForeignCallSingle,
|
|
1047
1324
|
foreignAddress: ForeignCallSingle,
|
|
1048
1325
|
foreignCalldata: ForeignCallArray,
|
|
@@ -1053,13 +1330,16 @@ export class RPCTranslator {
|
|
|
1053
1330
|
const calldata = fromArray(foreignCalldata);
|
|
1054
1331
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
1055
1332
|
|
|
1056
|
-
const returnValues = await this.handlerAsTxe().
|
|
1333
|
+
const returnValues = await this.handlerAsTxe().publicCallNewFlow(from, address, calldata, isStaticCall);
|
|
1057
1334
|
|
|
1335
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
1336
|
+
await this.stateHandler.cycleJob();
|
|
1058
1337
|
return toForeignCallResult([toArray(returnValues)]);
|
|
1059
1338
|
}
|
|
1060
1339
|
|
|
1061
|
-
|
|
1062
|
-
|
|
1340
|
+
// eslint-disable-next-line camelcase
|
|
1341
|
+
async aztec_prv_getSenderForTags() {
|
|
1342
|
+
const sender = await this.handlerAsPrivate().getSenderForTags();
|
|
1063
1343
|
|
|
1064
1344
|
// Return a Noir Option struct with `some` and `value` fields
|
|
1065
1345
|
if (sender === undefined) {
|
|
@@ -1071,19 +1351,21 @@ export class RPCTranslator {
|
|
|
1071
1351
|
}
|
|
1072
1352
|
}
|
|
1073
1353
|
|
|
1074
|
-
|
|
1354
|
+
// eslint-disable-next-line camelcase
|
|
1355
|
+
async aztec_prv_setSenderForTags(foreignSenderForTags: ForeignCallSingle) {
|
|
1075
1356
|
const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
|
|
1076
1357
|
|
|
1077
|
-
await this.handlerAsPrivate().
|
|
1358
|
+
await this.handlerAsPrivate().setSenderForTags(senderForTags);
|
|
1078
1359
|
|
|
1079
1360
|
return toForeignCallResult([]);
|
|
1080
1361
|
}
|
|
1081
1362
|
|
|
1082
|
-
|
|
1363
|
+
// eslint-disable-next-line camelcase
|
|
1364
|
+
async aztec_prv_getNextAppTagAsSender(foreignSender: ForeignCallSingle, foreignRecipient: ForeignCallSingle) {
|
|
1083
1365
|
const sender = AztecAddress.fromField(fromSingle(foreignSender));
|
|
1084
1366
|
const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
|
|
1085
1367
|
|
|
1086
|
-
const nextAppTag = await this.handlerAsPrivate().
|
|
1368
|
+
const nextAppTag = await this.handlerAsPrivate().getNextAppTagAsSender(sender, recipient);
|
|
1087
1369
|
|
|
1088
1370
|
return toForeignCallResult([toSingle(nextAppTag.value)]);
|
|
1089
1371
|
}
|