@aztec/txe 0.0.1-commit.c7c42ec → 0.0.1-commit.c949de6bc
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/constants.d.ts +3 -0
- package/dest/constants.d.ts.map +1 -0
- package/dest/constants.js +2 -0
- package/dest/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +82 -50
- package/dest/oracle/interfaces.d.ts +6 -5
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.d.ts +3 -3
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +6 -6
- package/dest/oracle/txe_oracle_top_level_context.d.ts +8 -7
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +123 -38
- package/dest/rpc_translator.d.ts +21 -15
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +92 -55
- package/dest/state_machine/archiver.d.ts +20 -67
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +59 -178
- package/dest/state_machine/dummy_p2p_client.d.ts +20 -15
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +39 -24
- package/dest/state_machine/global_variable_builder.d.ts +2 -2
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +1 -1
- package/dest/state_machine/index.d.ts +5 -5
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +35 -12
- package/dest/state_machine/mock_epoch_cache.d.ts +9 -6
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +14 -7
- package/dest/state_machine/synchronizer.d.ts +3 -3
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/txe_session.d.ts +12 -7
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +122 -28
- package/dest/util/encoding.d.ts +17 -17
- 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 +4 -4
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +18 -5
- package/dest/utils/tx_effect_creation.d.ts +2 -3
- package/dest/utils/tx_effect_creation.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.js +3 -6
- package/package.json +16 -16
- package/src/constants.ts +3 -0
- package/src/index.ts +83 -49
- package/src/oracle/interfaces.ts +8 -3
- package/src/oracle/txe_oracle_public_context.ts +6 -8
- package/src/oracle/txe_oracle_top_level_context.ts +163 -79
- package/src/rpc_translator.ts +97 -56
- package/src/state_machine/archiver.ts +54 -220
- package/src/state_machine/dummy_p2p_client.ts +55 -32
- package/src/state_machine/global_variable_builder.ts +1 -1
- package/src/state_machine/index.ts +49 -11
- package/src/state_machine/mock_epoch_cache.ts +15 -11
- package/src/state_machine/synchronizer.ts +2 -2
- package/src/txe_session.ts +151 -71
- package/src/util/txe_public_contract_data_source.ts +10 -36
- package/src/utils/block_creation.ts +19 -16
- package/src/utils/tx_effect_creation.ts +3 -11
- 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/dest/rpc_translator.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Fr, Point } from '@aztec/aztec.js/fields';
|
|
2
2
|
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX } from '@aztec/constants';
|
|
3
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
-
import {
|
|
4
|
+
import { packAsHintedNote } from '@aztec/pxe/simulator';
|
|
5
5
|
import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
6
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import {
|
|
7
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
8
8
|
import { addressFromSingle, arrayOfArraysToBoundedVecOfArrays, arrayToBoundedVec, bufferToU8Array, fromArray, fromSingle, fromUintArray, fromUintBoundedVec, toArray, toForeignCallResult, toSingle } from './util/encoding.js';
|
|
9
|
-
const MAX_EVENT_LEN =
|
|
9
|
+
const MAX_EVENT_LEN = 10; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_MSG_PLAINTEXT_RESERVED_FIELDS_LEN
|
|
10
10
|
const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
|
|
11
11
|
export class UnavailableOracleError extends Error {
|
|
12
12
|
constructor(oracleName){
|
|
@@ -176,6 +176,12 @@ export class RPCTranslator {
|
|
|
176
176
|
const selector = EventSelector.fromField(fromSingle(foreignSelector));
|
|
177
177
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
178
178
|
const scope = addressFromSingle(foreignScope);
|
|
179
|
+
// TODO(F-335): Avoid doing the following 2 calls here.
|
|
180
|
+
{
|
|
181
|
+
await this.handlerAsTxe().syncContractNonOracleMethod(contractAddress, scope, this.stateHandler.getCurrentJob());
|
|
182
|
+
// We cycle job to commit the stores after the contract sync.
|
|
183
|
+
await this.stateHandler.cycleJob();
|
|
184
|
+
}
|
|
179
185
|
const events = await this.handlerAsTxe().txeGetPrivateEvents(selector, contractAddress, scope);
|
|
180
186
|
if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
|
|
181
187
|
throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
|
|
@@ -209,33 +215,33 @@ export class RPCTranslator {
|
|
|
209
215
|
}
|
|
210
216
|
// When the argument is a slice, noir automatically adds a length field to oracle call.
|
|
211
217
|
// When the argument is an array, we add the field length manually to the signature.
|
|
212
|
-
|
|
218
|
+
async utilityLog(foreignLevel, foreignMessage, _foreignLength, foreignFields) {
|
|
213
219
|
const level = fromSingle(foreignLevel).toNumber();
|
|
214
220
|
const message = fromArray(foreignMessage).map((field)=>String.fromCharCode(field.toNumber())).join('');
|
|
215
221
|
const fields = fromArray(foreignFields);
|
|
216
|
-
this.handlerAsMisc().
|
|
222
|
+
await this.handlerAsMisc().utilityLog(level, message, fields);
|
|
217
223
|
return toForeignCallResult([]);
|
|
218
224
|
}
|
|
219
|
-
async utilityStorageRead(foreignContractAddress, foreignStartStorageSlot,
|
|
225
|
+
async utilityStorageRead(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
|
|
226
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
220
227
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
221
228
|
const startStorageSlot = fromSingle(foreignStartStorageSlot);
|
|
222
|
-
const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
|
|
223
229
|
const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
|
|
224
|
-
const values = await this.handlerAsUtility().utilityStorageRead(contractAddress, startStorageSlot,
|
|
230
|
+
const values = await this.handlerAsUtility().utilityStorageRead(blockHash, contractAddress, startStorageSlot, numberOfElements);
|
|
225
231
|
return toForeignCallResult([
|
|
226
232
|
toArray(values)
|
|
227
233
|
]);
|
|
228
234
|
}
|
|
229
|
-
async utilityGetPublicDataWitness(
|
|
230
|
-
const
|
|
235
|
+
async utilityGetPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
|
|
236
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
231
237
|
const leafSlot = fromSingle(foreignLeafSlot);
|
|
232
|
-
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(
|
|
238
|
+
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(blockHash, leafSlot);
|
|
233
239
|
if (!witness) {
|
|
234
|
-
throw new Error(`Public data witness not found for slot ${leafSlot} at block ${
|
|
240
|
+
throw new Error(`Public data witness not found for slot ${leafSlot} at block ${blockHash.toString()}.`);
|
|
235
241
|
}
|
|
236
242
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
237
243
|
}
|
|
238
|
-
async utilityGetNotes(foreignOwnerIsSome, foreignOwnerValue, foreignStorageSlot, foreignNumSelects, foreignSelectByIndexes, foreignSelectByOffsets, foreignSelectByLengths, foreignSelectValues, foreignSelectComparators, foreignSortByIndexes, foreignSortByOffsets, foreignSortByLengths, foreignSortOrder, foreignLimit, foreignOffset, foreignStatus, foreignMaxNotes,
|
|
244
|
+
async utilityGetNotes(foreignOwnerIsSome, foreignOwnerValue, foreignStorageSlot, foreignNumSelects, foreignSelectByIndexes, foreignSelectByOffsets, foreignSelectByLengths, foreignSelectValues, foreignSelectComparators, foreignSortByIndexes, foreignSortByOffsets, foreignSortByLengths, foreignSortOrder, foreignLimit, foreignOffset, foreignStatus, foreignMaxNotes, foreignPackedHintedNoteLength) {
|
|
239
245
|
// Parse Option<AztecAddress>: ownerIsSome is 0 for None, 1 for Some
|
|
240
246
|
const owner = fromSingle(foreignOwnerIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignOwnerValue)) : undefined;
|
|
241
247
|
const storageSlot = fromSingle(foreignStorageSlot);
|
|
@@ -253,21 +259,21 @@ export class RPCTranslator {
|
|
|
253
259
|
const offset = fromSingle(foreignOffset).toNumber();
|
|
254
260
|
const status = fromSingle(foreignStatus).toNumber();
|
|
255
261
|
const maxNotes = fromSingle(foreignMaxNotes).toNumber();
|
|
256
|
-
const
|
|
262
|
+
const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
|
|
257
263
|
const noteDatas = await this.handlerAsUtility().utilityGetNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status);
|
|
258
|
-
const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>
|
|
264
|
+
const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>packAsHintedNote({
|
|
259
265
|
contractAddress: noteData.contractAddress,
|
|
260
266
|
owner: noteData.owner,
|
|
261
267
|
randomness: noteData.randomness,
|
|
262
268
|
storageSlot: noteData.storageSlot,
|
|
263
269
|
noteNonce: noteData.noteNonce,
|
|
264
|
-
|
|
270
|
+
isPending: noteData.isPending,
|
|
265
271
|
note: noteData.note
|
|
266
272
|
}));
|
|
267
273
|
// Now we convert each sub-array to an array of ForeignCallSingles
|
|
268
274
|
const returnDataAsArrayOfForeignCallSingleArrays = returnDataAsArrayOfArrays.map((subArray)=>subArray.map(toSingle));
|
|
269
275
|
// At last we convert the array of arrays to a bounded vec of arrays
|
|
270
|
-
return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes,
|
|
276
|
+
return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes, packedHintedNoteLength));
|
|
271
277
|
}
|
|
272
278
|
privateNotifyCreatedNote(foreignOwner, foreignStorageSlot, foreignRandomness, foreignNoteTypeId, foreignNote, foreignNoteHash, foreignCounter) {
|
|
273
279
|
const owner = addressFromSingle(foreignOwner);
|
|
@@ -292,6 +298,14 @@ export class RPCTranslator {
|
|
|
292
298
|
await this.handlerAsPrivate().privateNotifyCreatedNullifier(innerNullifier);
|
|
293
299
|
return toForeignCallResult([]);
|
|
294
300
|
}
|
|
301
|
+
async privateIsNullifierPending(foreignInnerNullifier, foreignContractAddress) {
|
|
302
|
+
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
303
|
+
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
304
|
+
const isPending = await this.handlerAsPrivate().privateIsNullifierPending(innerNullifier, contractAddress);
|
|
305
|
+
return toForeignCallResult([
|
|
306
|
+
toSingle(new Fr(isPending))
|
|
307
|
+
]);
|
|
308
|
+
}
|
|
295
309
|
async utilityCheckNullifierExists(foreignInnerNullifier) {
|
|
296
310
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
297
311
|
const exists = await this.handlerAsUtility().utilityCheckNullifierExists(innerNullifier);
|
|
@@ -310,15 +324,27 @@ export class RPCTranslator {
|
|
|
310
324
|
...instance.publicKeys.toFields()
|
|
311
325
|
].map(toSingle));
|
|
312
326
|
}
|
|
313
|
-
async
|
|
327
|
+
async utilityTryGetPublicKeysAndPartialAddress(foreignAddress) {
|
|
314
328
|
const address = addressFromSingle(foreignAddress);
|
|
315
|
-
const
|
|
316
|
-
return
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
329
|
+
const result = await this.handlerAsUtility().utilityTryGetPublicKeysAndPartialAddress(address);
|
|
330
|
+
// We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
|
|
331
|
+
// with two fields: `some` (a boolean) and `value` (a field array in this case).
|
|
332
|
+
if (result === undefined) {
|
|
333
|
+
// No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
|
|
334
|
+
return toForeignCallResult([
|
|
335
|
+
toSingle(new Fr(0)),
|
|
336
|
+
toArray(Array(13).fill(new Fr(0)))
|
|
337
|
+
]);
|
|
338
|
+
} else {
|
|
339
|
+
// Data was found so we set `some` to 1 and return it along with `value`.
|
|
340
|
+
return toForeignCallResult([
|
|
341
|
+
toSingle(new Fr(1)),
|
|
342
|
+
toArray([
|
|
343
|
+
...result.publicKeys.toFields(),
|
|
344
|
+
result.partialAddress
|
|
345
|
+
])
|
|
346
|
+
]);
|
|
347
|
+
}
|
|
322
348
|
}
|
|
323
349
|
async utilityGetKeyValidationRequest(foreignPkMHash) {
|
|
324
350
|
const pkMHash = fromSingle(foreignPkMHash);
|
|
@@ -328,12 +354,12 @@ export class RPCTranslator {
|
|
|
328
354
|
privateCallPrivateFunction(_foreignTargetContractAddress, _foreignFunctionSelector, _foreignArgsHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
|
|
329
355
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
|
|
330
356
|
}
|
|
331
|
-
async utilityGetNullifierMembershipWitness(
|
|
332
|
-
const
|
|
357
|
+
async utilityGetNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
358
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
333
359
|
const nullifier = fromSingle(foreignNullifier);
|
|
334
|
-
const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(
|
|
360
|
+
const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(blockHash, nullifier);
|
|
335
361
|
if (!witness) {
|
|
336
|
-
throw new Error(`Nullifier membership witness not found at block ${
|
|
362
|
+
throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
|
|
337
363
|
}
|
|
338
364
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
339
365
|
}
|
|
@@ -375,25 +401,30 @@ export class RPCTranslator {
|
|
|
375
401
|
}
|
|
376
402
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
377
403
|
}
|
|
378
|
-
async
|
|
379
|
-
const
|
|
380
|
-
const
|
|
381
|
-
const
|
|
382
|
-
const witness = await this.handlerAsUtility().utilityGetMembershipWitness(blockNumber, treeId, leafValue);
|
|
404
|
+
async utilityGetNoteHashMembershipWitness(foreignAnchorBlockHash, foreignNoteHash) {
|
|
405
|
+
const blockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
406
|
+
const noteHash = fromSingle(foreignNoteHash);
|
|
407
|
+
const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(blockHash, noteHash);
|
|
383
408
|
if (!witness) {
|
|
384
|
-
throw new Error(`
|
|
409
|
+
throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
385
410
|
}
|
|
386
|
-
return toForeignCallResult(
|
|
387
|
-
toSingle(witness[0]),
|
|
388
|
-
toArray(witness.slice(1))
|
|
389
|
-
]);
|
|
411
|
+
return toForeignCallResult(witness.toNoirRepresentation());
|
|
390
412
|
}
|
|
391
|
-
async
|
|
392
|
-
const
|
|
413
|
+
async utilityGetBlockHashMembershipWitness(foreignAnchorBlockHash, foreignBlockHash) {
|
|
414
|
+
const anchorBlockHash = new BlockHash(fromSingle(foreignAnchorBlockHash));
|
|
415
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
416
|
+
const witness = await this.handlerAsUtility().utilityGetBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
417
|
+
if (!witness) {
|
|
418
|
+
throw new Error(`Block hash ${blockHash.toString()} not found in the archive tree at anchor block ${anchorBlockHash.toString()}.`);
|
|
419
|
+
}
|
|
420
|
+
return toForeignCallResult(witness.toNoirRepresentation());
|
|
421
|
+
}
|
|
422
|
+
async utilityGetLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
423
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
393
424
|
const nullifier = fromSingle(foreignNullifier);
|
|
394
|
-
const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(
|
|
425
|
+
const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(blockHash, nullifier);
|
|
395
426
|
if (!witness) {
|
|
396
|
-
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${
|
|
427
|
+
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
|
|
397
428
|
}
|
|
398
429
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
399
430
|
}
|
|
@@ -402,11 +433,11 @@ export class RPCTranslator {
|
|
|
402
433
|
await this.handlerAsUtility().utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot);
|
|
403
434
|
return toForeignCallResult([]);
|
|
404
435
|
}
|
|
405
|
-
async
|
|
436
|
+
async utilityValidateAndStoreEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot) {
|
|
406
437
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
407
438
|
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
408
439
|
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
409
|
-
await this.handlerAsUtility().
|
|
440
|
+
await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot);
|
|
410
441
|
return toForeignCallResult([]);
|
|
411
442
|
}
|
|
412
443
|
async utilityBulkRetrieveLogs(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot) {
|
|
@@ -483,13 +514,14 @@ export class RPCTranslator {
|
|
|
483
514
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
484
515
|
}
|
|
485
516
|
// AVM opcodes
|
|
486
|
-
|
|
517
|
+
avmOpcodeEmitPublicLog(_foreignMessage) {
|
|
487
518
|
// TODO(#8811): Implement
|
|
488
519
|
return toForeignCallResult([]);
|
|
489
520
|
}
|
|
490
|
-
async avmOpcodeStorageRead(foreignSlot) {
|
|
521
|
+
async avmOpcodeStorageRead(foreignSlot, foreignContractAddress) {
|
|
491
522
|
const slot = fromSingle(foreignSlot);
|
|
492
|
-
const
|
|
523
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
524
|
+
const value = (await this.handlerAsAvm().avmOpcodeStorageRead(slot, contractAddress)).value;
|
|
493
525
|
return toForeignCallResult([
|
|
494
526
|
toSingle(new Fr(value))
|
|
495
527
|
]);
|
|
@@ -543,10 +575,9 @@ export class RPCTranslator {
|
|
|
543
575
|
await this.handlerAsAvm().avmOpcodeEmitNoteHash(noteHash);
|
|
544
576
|
return toForeignCallResult([]);
|
|
545
577
|
}
|
|
546
|
-
async avmOpcodeNullifierExists(
|
|
547
|
-
const
|
|
548
|
-
const
|
|
549
|
-
const exists = await this.handlerAsAvm().avmOpcodeNullifierExists(innerNullifier, targetAddress);
|
|
578
|
+
async avmOpcodeNullifierExists(foreignSiloedNullifier) {
|
|
579
|
+
const siloedNullifier = fromSingle(foreignSiloedNullifier);
|
|
580
|
+
const exists = await this.handlerAsAvm().avmOpcodeNullifierExists(siloedNullifier);
|
|
550
581
|
return toForeignCallResult([
|
|
551
582
|
toSingle(new Fr(exists))
|
|
552
583
|
]);
|
|
@@ -609,16 +640,20 @@ export class RPCTranslator {
|
|
|
609
640
|
const args = fromArray(foreignArgs);
|
|
610
641
|
const argsHash = fromSingle(foreignArgsHash);
|
|
611
642
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
612
|
-
const returnValues = await this.handlerAsTxe().txePrivateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall);
|
|
643
|
+
const returnValues = await this.handlerAsTxe().txePrivateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, this.stateHandler.getCurrentJob());
|
|
644
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
645
|
+
await this.stateHandler.cycleJob();
|
|
613
646
|
return toForeignCallResult([
|
|
614
647
|
toArray(returnValues)
|
|
615
648
|
]);
|
|
616
649
|
}
|
|
617
|
-
async
|
|
650
|
+
async txeExecuteUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
|
|
618
651
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
619
652
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
620
653
|
const args = fromArray(foreignArgs);
|
|
621
|
-
const returnValues = await this.handlerAsTxe().
|
|
654
|
+
const returnValues = await this.handlerAsTxe().txeExecuteUtilityFunction(targetContractAddress, functionSelector, args, this.stateHandler.getCurrentJob());
|
|
655
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
656
|
+
await this.stateHandler.cycleJob();
|
|
622
657
|
return toForeignCallResult([
|
|
623
658
|
toArray(returnValues)
|
|
624
659
|
]);
|
|
@@ -629,6 +664,8 @@ export class RPCTranslator {
|
|
|
629
664
|
const calldata = fromArray(foreignCalldata);
|
|
630
665
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
631
666
|
const returnValues = await this.handlerAsTxe().txePublicCallNewFlow(from, address, calldata, isStaticCall);
|
|
667
|
+
// TODO(F-335): Avoid doing the following call here.
|
|
668
|
+
await this.stateHandler.cycleJob();
|
|
632
669
|
return toForeignCallResult([
|
|
633
670
|
toArray(returnValues)
|
|
634
671
|
]);
|
|
@@ -1,78 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ArchiverDataSourceBase } from '@aztec/archiver';
|
|
2
|
+
import { type EpochNumber, type SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
6
|
-
import type {
|
|
7
|
-
import
|
|
8
|
-
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
9
|
-
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
6
|
+
import type { L2Tips, ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
7
|
+
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
10
8
|
import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
/**
|
|
10
|
+
* TXE Archiver implementation.
|
|
11
|
+
* Provides most of the endpoints needed by the node for reading from and writing to state,
|
|
12
|
+
* without needing any of the extra overhead that the Archiver itself requires (i.e. an L1 client).
|
|
13
|
+
*/
|
|
14
|
+
export declare class TXEArchiver extends ArchiverDataSourceBase {
|
|
15
|
+
private readonly updater;
|
|
14
16
|
constructor(db: AztecAsyncKVStore);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
20
|
-
* @returns The number of the latest L2 block processed by the block source implementation.
|
|
21
|
-
*/
|
|
22
|
-
getBlockNumber(): Promise<BlockNumber>;
|
|
23
|
-
/**
|
|
24
|
-
* Gets the number of the latest L2 block proven seen by the block source implementation.
|
|
25
|
-
* @returns The number of the latest L2 block proven seen by the block source implementation.
|
|
26
|
-
*/
|
|
27
|
-
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
28
|
-
/**
|
|
29
|
-
* Gets a published l2 block. If a negative number is passed, the block returned is the most recent.
|
|
30
|
-
* @param number - The block number to return (inclusive).
|
|
31
|
-
* @returns The requested L2 block.
|
|
32
|
-
*/
|
|
33
|
-
getPublishedBlock(number: number): Promise<PublishedL2Block | undefined>;
|
|
34
|
-
getPublishedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<PublishedL2Block[]>;
|
|
35
|
-
private retrievePublishedBlocks;
|
|
36
|
-
/**
|
|
37
|
-
* Gets an l2 block. If a negative number is passed, the block returned is the most recent.
|
|
38
|
-
* @param number - The block number to return (inclusive).
|
|
39
|
-
* @returns The requested L2 block.
|
|
40
|
-
*/
|
|
41
|
-
getL2Block(number: BlockNumber | 'latest'): Promise<L2Block | undefined>;
|
|
42
|
-
/**
|
|
43
|
-
* Gets an L2 block (new format).
|
|
44
|
-
* @param number - The block number to return.
|
|
45
|
-
* @returns The requested L2 block.
|
|
46
|
-
*/
|
|
47
|
-
getL2BlockNew(number: BlockNumber): Promise<L2BlockNew | undefined>;
|
|
48
|
-
/**
|
|
49
|
-
* Gets an l2 block header.
|
|
50
|
-
* @param number - The block number to return or 'latest' for the most recent one.
|
|
51
|
-
* @returns The requested L2 block header.
|
|
52
|
-
*/
|
|
53
|
-
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
54
|
-
getBlockRange(from: number, limit: number, _proven?: boolean): Promise<L2Block[]>;
|
|
55
|
-
getPublishedCheckpoints(_from: CheckpointNumber, _limit: number): Promise<PublishedCheckpoint[]>;
|
|
56
|
-
getCheckpointByArchive(_archive: Fr): Promise<Checkpoint | undefined>;
|
|
57
|
-
getL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
58
|
-
getL2EpochNumber(): Promise<EpochNumber>;
|
|
59
|
-
getCheckpointsForEpoch(_epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
60
|
-
getBlocksForEpoch(_epochNumber: EpochNumber): Promise<L2Block[]>;
|
|
61
|
-
getBlockHeadersForEpoch(_epochNumber: EpochNumber): Promise<BlockHeader[]>;
|
|
62
|
-
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
63
|
-
getL2Tips(): Promise<L2Tips>;
|
|
17
|
+
addCheckpoints(checkpoints: PublishedCheckpoint[], result?: ValidateCheckpointResult): Promise<void>;
|
|
18
|
+
getRollupAddress(): Promise<EthAddress>;
|
|
19
|
+
getRegistryAddress(): Promise<EthAddress>;
|
|
64
20
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
65
21
|
getGenesisValues(): Promise<{
|
|
66
22
|
genesisArchiveRoot: Fr;
|
|
67
23
|
}>;
|
|
24
|
+
getL1Timestamp(): Promise<bigint | undefined>;
|
|
25
|
+
getL2Tips(): Promise<L2Tips>;
|
|
26
|
+
getL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
27
|
+
getL2EpochNumber(): Promise<EpochNumber | undefined>;
|
|
28
|
+
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
68
29
|
syncImmediate(): Promise<void>;
|
|
69
|
-
getContract(_address: AztecAddress, _timestamp?: UInt64): Promise<ContractInstanceWithAddress | undefined>;
|
|
70
|
-
getRollupAddress(): Promise<EthAddress>;
|
|
71
|
-
getRegistryAddress(): Promise<EthAddress>;
|
|
72
|
-
getL1Timestamp(): Promise<bigint>;
|
|
73
|
-
isPendingChainInvalid(): Promise<boolean>;
|
|
74
|
-
getPendingChainValidationStatus(): Promise<ValidateBlockResult>;
|
|
75
|
-
getPublishedBlockByHash(_blockHash: Fr): Promise<PublishedL2Block | undefined>;
|
|
76
|
-
getPublishedBlockByArchive(_archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
77
30
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZV9tYWNoaW5lL2FyY2hpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBaUQsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RyxPQUFPLEVBQW9CLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQW9DLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRTs7OztHQUlHO0FBQ0gscUJBQWEsV0FBWSxTQUFRLHNCQUFzQjtJQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBNEM7SUFFcEUsWUFBWSxFQUFFLEVBQUUsaUJBQWlCLEVBR2hDO0lBRVksY0FBYyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFaEg7SUFFTSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRTdDO0lBRU0sa0JBQWtCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUUvQztJQUVNLGNBQWMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FFbEQ7SUFFTSxnQkFBZ0IsSUFBSSxPQUFPLENBQUM7UUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQUE7S0FBRSxDQUFDLENBRTdEO0lBRU0sY0FBYyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRW5EO0lBRVksU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FnQ3hDO0lBRU0sZUFBZSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXhEO0lBRU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FFMUQ7SUFFTSxlQUFlLENBQUMsWUFBWSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWxFO0lBRU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEM7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/state_machine/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/state_machine/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAiD,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAoC,MAAM,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,sBAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IAEpE,YAAY,EAAE,EAAE,iBAAiB,EAGhC;IAEY,cAAc,CAAC,WAAW,EAAE,mBAAmB,EAAE,EAAE,MAAM,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhH;IAEM,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CAE7C;IAEM,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAE/C;IAEM,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAElD;IAEM,gBAAgB,IAAI,OAAO,CAAC;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,CAAC,CAE7D;IAEM,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnD;IAEY,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAgCxC;IAEM,eAAe,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAExD;IAEM,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAE1D;IAEM,eAAe,CAAC,YAAY,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAElE;IAEM,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;CACF"}
|