@aztec/txe 0.0.1-commit.d431d1c → 0.0.1-commit.dbf9cec
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 +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 +5 -5
- 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 +7 -8
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +105 -34
- package/dest/rpc_translator.d.ts +16 -10
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +74 -38
- package/dest/state_machine/archiver.d.ts +2 -2
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +7 -6
- 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 -7
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +31 -17
- package/dest/state_machine/mock_epoch_cache.d.ts +6 -2
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +6 -1
- 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 +9 -6
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +83 -23
- 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 +5 -5
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +7 -5
- package/package.json +15 -15
- package/src/index.ts +83 -49
- package/src/oracle/interfaces.ts +8 -3
- package/src/oracle/txe_oracle_public_context.ts +8 -10
- package/src/oracle/txe_oracle_top_level_context.ts +134 -81
- package/src/rpc_translator.ts +78 -31
- package/src/state_machine/archiver.ts +6 -8
- package/src/state_machine/dummy_p2p_client.ts +40 -22
- package/src/state_machine/index.ts +49 -19
- package/src/state_machine/mock_epoch_cache.ts +7 -1
- package/src/state_machine/synchronizer.ts +2 -2
- package/src/txe_session.ts +98 -82
- package/src/util/txe_public_contract_data_source.ts +10 -36
- package/src/utils/block_creation.ts +8 -6
- 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
|
@@ -4,8 +4,7 @@ import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
|
4
4
|
import { packAsHintedNote } from '@aztec/pxe/simulator';
|
|
5
5
|
import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
6
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import {
|
|
8
|
-
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
7
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
9
8
|
import { addressFromSingle, arrayOfArraysToBoundedVecOfArrays, arrayToBoundedVec, bufferToU8Array, fromArray, fromSingle, fromUintArray, fromUintBoundedVec, toArray, toForeignCallResult, toSingle } from './util/encoding.js';
|
|
10
9
|
const MAX_EVENT_LEN = 12; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_RESERVED_FIELDS
|
|
11
10
|
const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
|
|
@@ -177,6 +176,12 @@ export class RPCTranslator {
|
|
|
177
176
|
const selector = EventSelector.fromField(fromSingle(foreignSelector));
|
|
178
177
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
179
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
|
+
}
|
|
180
185
|
const events = await this.handlerAsTxe().txeGetPrivateEvents(selector, contractAddress, scope);
|
|
181
186
|
if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
|
|
182
187
|
throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
|
|
@@ -210,15 +215,15 @@ export class RPCTranslator {
|
|
|
210
215
|
}
|
|
211
216
|
// When the argument is a slice, noir automatically adds a length field to oracle call.
|
|
212
217
|
// When the argument is an array, we add the field length manually to the signature.
|
|
213
|
-
|
|
218
|
+
async utilityLog(foreignLevel, foreignMessage, _foreignLength, foreignFields) {
|
|
214
219
|
const level = fromSingle(foreignLevel).toNumber();
|
|
215
220
|
const message = fromArray(foreignMessage).map((field)=>String.fromCharCode(field.toNumber())).join('');
|
|
216
221
|
const fields = fromArray(foreignFields);
|
|
217
|
-
this.handlerAsMisc().
|
|
222
|
+
await this.handlerAsMisc().utilityLog(level, message, fields);
|
|
218
223
|
return toForeignCallResult([]);
|
|
219
224
|
}
|
|
220
225
|
async utilityStorageRead(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
|
|
221
|
-
const blockHash =
|
|
226
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
222
227
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
223
228
|
const startStorageSlot = fromSingle(foreignStartStorageSlot);
|
|
224
229
|
const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
|
|
@@ -228,7 +233,7 @@ export class RPCTranslator {
|
|
|
228
233
|
]);
|
|
229
234
|
}
|
|
230
235
|
async utilityGetPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
|
|
231
|
-
const blockHash =
|
|
236
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
232
237
|
const leafSlot = fromSingle(foreignLeafSlot);
|
|
233
238
|
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(blockHash, leafSlot);
|
|
234
239
|
if (!witness) {
|
|
@@ -293,6 +298,14 @@ export class RPCTranslator {
|
|
|
293
298
|
await this.handlerAsPrivate().privateNotifyCreatedNullifier(innerNullifier);
|
|
294
299
|
return toForeignCallResult([]);
|
|
295
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
|
+
}
|
|
296
309
|
async utilityCheckNullifierExists(foreignInnerNullifier) {
|
|
297
310
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
298
311
|
const exists = await this.handlerAsUtility().utilityCheckNullifierExists(innerNullifier);
|
|
@@ -311,15 +324,27 @@ export class RPCTranslator {
|
|
|
311
324
|
...instance.publicKeys.toFields()
|
|
312
325
|
].map(toSingle));
|
|
313
326
|
}
|
|
314
|
-
async
|
|
327
|
+
async utilityTryGetPublicKeysAndPartialAddress(foreignAddress) {
|
|
315
328
|
const address = addressFromSingle(foreignAddress);
|
|
316
|
-
const
|
|
317
|
-
return
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
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
|
+
}
|
|
323
348
|
}
|
|
324
349
|
async utilityGetKeyValidationRequest(foreignPkMHash) {
|
|
325
350
|
const pkMHash = fromSingle(foreignPkMHash);
|
|
@@ -330,7 +355,7 @@ export class RPCTranslator {
|
|
|
330
355
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
|
|
331
356
|
}
|
|
332
357
|
async utilityGetNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
333
|
-
const blockHash =
|
|
358
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
334
359
|
const nullifier = fromSingle(foreignNullifier);
|
|
335
360
|
const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(blockHash, nullifier);
|
|
336
361
|
if (!witness) {
|
|
@@ -376,21 +401,26 @@ export class RPCTranslator {
|
|
|
376
401
|
}
|
|
377
402
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
378
403
|
}
|
|
379
|
-
async
|
|
380
|
-
const blockHash =
|
|
381
|
-
const
|
|
382
|
-
const
|
|
383
|
-
const witness = await this.handlerAsUtility().utilityGetMembershipWitness(blockHash, 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);
|
|
384
408
|
if (!witness) {
|
|
385
|
-
throw new Error(`
|
|
409
|
+
throw new Error(`Note hash ${noteHash} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
386
410
|
}
|
|
387
|
-
return toForeignCallResult(
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
411
|
+
return toForeignCallResult(witness.toNoirRepresentation());
|
|
412
|
+
}
|
|
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());
|
|
391
421
|
}
|
|
392
422
|
async utilityGetLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
393
|
-
const blockHash =
|
|
423
|
+
const blockHash = new BlockHash(fromSingle(foreignBlockHash));
|
|
394
424
|
const nullifier = fromSingle(foreignNullifier);
|
|
395
425
|
const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(blockHash, nullifier);
|
|
396
426
|
if (!witness) {
|
|
@@ -403,11 +433,11 @@ export class RPCTranslator {
|
|
|
403
433
|
await this.handlerAsUtility().utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot);
|
|
404
434
|
return toForeignCallResult([]);
|
|
405
435
|
}
|
|
406
|
-
async
|
|
436
|
+
async utilityValidateAndStoreEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot) {
|
|
407
437
|
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
408
438
|
const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
|
|
409
439
|
const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
|
|
410
|
-
await this.handlerAsUtility().
|
|
440
|
+
await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot);
|
|
411
441
|
return toForeignCallResult([]);
|
|
412
442
|
}
|
|
413
443
|
async utilityBulkRetrieveLogs(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot) {
|
|
@@ -484,13 +514,14 @@ export class RPCTranslator {
|
|
|
484
514
|
throw new Error('Offchain effects are not yet supported in the TestEnvironment');
|
|
485
515
|
}
|
|
486
516
|
// AVM opcodes
|
|
487
|
-
|
|
517
|
+
avmOpcodeEmitPublicLog(_foreignMessage) {
|
|
488
518
|
// TODO(#8811): Implement
|
|
489
519
|
return toForeignCallResult([]);
|
|
490
520
|
}
|
|
491
|
-
async avmOpcodeStorageRead(foreignSlot) {
|
|
521
|
+
async avmOpcodeStorageRead(foreignSlot, foreignContractAddress) {
|
|
492
522
|
const slot = fromSingle(foreignSlot);
|
|
493
|
-
const
|
|
523
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
524
|
+
const value = (await this.handlerAsAvm().avmOpcodeStorageRead(slot, contractAddress)).value;
|
|
494
525
|
return toForeignCallResult([
|
|
495
526
|
toSingle(new Fr(value))
|
|
496
527
|
]);
|
|
@@ -544,10 +575,9 @@ export class RPCTranslator {
|
|
|
544
575
|
await this.handlerAsAvm().avmOpcodeEmitNoteHash(noteHash);
|
|
545
576
|
return toForeignCallResult([]);
|
|
546
577
|
}
|
|
547
|
-
async avmOpcodeNullifierExists(
|
|
548
|
-
const
|
|
549
|
-
const
|
|
550
|
-
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);
|
|
551
581
|
return toForeignCallResult([
|
|
552
582
|
toSingle(new Fr(exists))
|
|
553
583
|
]);
|
|
@@ -610,16 +640,20 @@ export class RPCTranslator {
|
|
|
610
640
|
const args = fromArray(foreignArgs);
|
|
611
641
|
const argsHash = fromSingle(foreignArgsHash);
|
|
612
642
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
613
|
-
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();
|
|
614
646
|
return toForeignCallResult([
|
|
615
647
|
toArray(returnValues)
|
|
616
648
|
]);
|
|
617
649
|
}
|
|
618
|
-
async
|
|
650
|
+
async txeExecuteUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
|
|
619
651
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
620
652
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
621
653
|
const args = fromArray(foreignArgs);
|
|
622
|
-
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();
|
|
623
657
|
return toForeignCallResult([
|
|
624
658
|
toArray(returnValues)
|
|
625
659
|
]);
|
|
@@ -630,6 +664,8 @@ export class RPCTranslator {
|
|
|
630
664
|
const calldata = fromArray(foreignCalldata);
|
|
631
665
|
const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
|
|
632
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();
|
|
633
669
|
return toForeignCallResult([
|
|
634
670
|
toArray(returnValues)
|
|
635
671
|
]);
|
|
@@ -14,7 +14,7 @@ import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
|
14
14
|
export declare class TXEArchiver extends ArchiverDataSourceBase {
|
|
15
15
|
private readonly updater;
|
|
16
16
|
constructor(db: AztecAsyncKVStore);
|
|
17
|
-
addCheckpoints(checkpoints: PublishedCheckpoint[], result?: ValidateCheckpointResult): Promise<
|
|
17
|
+
addCheckpoints(checkpoints: PublishedCheckpoint[], result?: ValidateCheckpointResult): Promise<void>;
|
|
18
18
|
getRollupAddress(): Promise<EthAddress>;
|
|
19
19
|
getRegistryAddress(): Promise<EthAddress>;
|
|
20
20
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
@@ -28,4 +28,4 @@ export declare class TXEArchiver extends ArchiverDataSourceBase {
|
|
|
28
28
|
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
29
29
|
syncImmediate(): Promise<void>;
|
|
30
30
|
}
|
|
31
|
-
//# 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,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;
|
|
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"}
|
|
@@ -9,15 +9,14 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
9
9
|
*/ export class TXEArchiver extends ArchiverDataSourceBase {
|
|
10
10
|
updater = new ArchiverDataStoreUpdater(this.store);
|
|
11
11
|
constructor(db){
|
|
12
|
-
const store = new KVArchiverDataStore(db, 9999
|
|
12
|
+
const store = new KVArchiverDataStore(db, 9999, {
|
|
13
|
+
epochDuration: 32
|
|
14
|
+
});
|
|
13
15
|
super(store);
|
|
14
16
|
}
|
|
15
|
-
// TXE-specific method for adding checkpoints
|
|
16
17
|
async addCheckpoints(checkpoints, result) {
|
|
17
|
-
await this.updater.
|
|
18
|
-
return true;
|
|
18
|
+
await this.updater.addCheckpoints(checkpoints, result);
|
|
19
19
|
}
|
|
20
|
-
// Abstract method implementations
|
|
21
20
|
getRollupAddress() {
|
|
22
21
|
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
23
22
|
}
|
|
@@ -48,7 +47,9 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
48
47
|
if (!checkpointedBlock) {
|
|
49
48
|
throw new Error(`L2Tips requested from TXE Archiver but no checkpointed block found for block number ${number}`);
|
|
50
49
|
}
|
|
51
|
-
|
|
50
|
+
// TXE uses 1-block-per-checkpoint for testing simplicity, so we can use block number as checkpoint number.
|
|
51
|
+
// This uses the deprecated fromBlockNumber method intentionally for the TXE testing environment.
|
|
52
|
+
const checkpoint = await this.store.getRangeOfCheckpoints(CheckpointNumber.fromBlockNumber(number), 1);
|
|
52
53
|
if (checkpoint.length === 0) {
|
|
53
54
|
throw new Error(`L2Tips requested from TXE Archiver but no checkpoint found for block number ${number}`);
|
|
54
55
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import type { AuthRequest, ENR, P2P, P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PConfig, P2PSyncState, PeerId, ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators, StatusMessage } from '@aztec/p2p';
|
|
2
|
+
import type { AuthRequest, ENR, P2P, P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PConfig, P2PDuplicateAttestationCallback, P2PDuplicateProposalCallback, P2PSyncState, PeerId, ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators, StatusMessage } from '@aztec/p2p';
|
|
3
3
|
import type { EthAddress, L2BlockStreamEvent, L2Tips } from '@aztec/stdlib/block';
|
|
4
|
-
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
5
|
-
import type { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
|
|
6
|
-
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
4
|
+
import type { ITxProvider, PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
5
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposal, TopicType } from '@aztec/stdlib/p2p';
|
|
6
|
+
import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
7
7
|
export declare class DummyP2P implements P2P {
|
|
8
|
-
|
|
8
|
+
validateTxsReceivedInBlockProposal(_txs: Tx[]): Promise<void>;
|
|
9
9
|
clear(): Promise<void>;
|
|
10
10
|
getPendingTxs(): Promise<Tx[]>;
|
|
11
11
|
getEncodedEnr(): Promise<string | undefined>;
|
|
12
12
|
getPeers(_includePending?: boolean): Promise<PeerInfo[]>;
|
|
13
|
+
getGossipMeshPeerCount(_topicType: TopicType): Promise<number>;
|
|
13
14
|
broadcastProposal(_proposal: BlockProposal): Promise<void>;
|
|
14
15
|
broadcastCheckpointProposal(_proposal: CheckpointProposal): Promise<void>;
|
|
15
16
|
broadcastCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void>;
|
|
@@ -18,12 +19,13 @@ export declare class DummyP2P implements P2P {
|
|
|
18
19
|
requestTxs(_txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
19
20
|
requestTxByHash(_txHash: TxHash): Promise<Tx | undefined>;
|
|
20
21
|
sendTx(_tx: Tx): Promise<void>;
|
|
21
|
-
|
|
22
|
+
handleFailedExecution(_txHashes: TxHash[]): Promise<void>;
|
|
22
23
|
getTxByHashFromPool(_txHash: TxHash): Promise<Tx | undefined>;
|
|
23
24
|
getTxByHash(_txHash: TxHash): Promise<Tx | undefined>;
|
|
24
25
|
getArchivedTxByHash(_txHash: TxHash): Promise<Tx | undefined>;
|
|
25
26
|
getTxStatus(_txHash: TxHash): Promise<'pending' | 'mined' | undefined>;
|
|
26
27
|
iteratePendingTxs(): AsyncIterableIterator<Tx>;
|
|
28
|
+
iterateEligiblePendingTxs(): AsyncIterableIterator<Tx>;
|
|
27
29
|
getPendingTxCount(): Promise<number>;
|
|
28
30
|
start(): Promise<void>;
|
|
29
31
|
stop(): Promise<void>;
|
|
@@ -31,25 +33,27 @@ export declare class DummyP2P implements P2P {
|
|
|
31
33
|
getStatus(): Promise<P2PSyncState>;
|
|
32
34
|
getEnr(): ENR | undefined;
|
|
33
35
|
isP2PClient(): true;
|
|
36
|
+
getTxProvider(): ITxProvider;
|
|
34
37
|
getTxsByHash(_txHashes: TxHash[]): Promise<Tx[]>;
|
|
35
38
|
getCheckpointAttestationsForSlot(_slot: SlotNumber, _proposalId?: string): Promise<CheckpointAttestation[]>;
|
|
36
|
-
|
|
39
|
+
addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void>;
|
|
37
40
|
getL2BlockHash(_number: number): Promise<string | undefined>;
|
|
38
41
|
updateP2PConfig(_config: Partial<P2PConfig>): Promise<void>;
|
|
39
42
|
getL2Tips(): Promise<L2Tips>;
|
|
40
43
|
handleBlockStreamEvent(_event: L2BlockStreamEvent): Promise<void>;
|
|
41
44
|
sync(): void;
|
|
42
|
-
requestTxsByHash(_txHashes: TxHash[]): Promise<Tx[]>;
|
|
43
|
-
getTxs(_filter: 'all' | 'pending' | 'mined'): Promise<Tx[]>;
|
|
44
45
|
getTxsByHashFromPool(_txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
45
46
|
hasTxsInPool(_txHashes: TxHash[]): Promise<boolean[]>;
|
|
46
|
-
addTxsToPool(_txs: Tx[]): Promise<number>;
|
|
47
47
|
getSyncedLatestBlockNum(): Promise<number>;
|
|
48
48
|
getSyncedProvenBlockNum(): Promise<number>;
|
|
49
49
|
getSyncedLatestSlot(): Promise<bigint>;
|
|
50
|
-
|
|
50
|
+
protectTxs(_txHashes: TxHash[], _blockHeader: BlockHeader): Promise<TxHash[]>;
|
|
51
|
+
prepareForSlot(_slotNumber: SlotNumber): Promise<void>;
|
|
51
52
|
addReqRespSubProtocol(_subProtocol: ReqRespSubProtocol, _handler: ReqRespSubProtocolHandler, _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol]): Promise<void>;
|
|
52
53
|
handleAuthRequestFromPeer(_authRequest: AuthRequest, _peerId: PeerId): Promise<StatusMessage>;
|
|
53
54
|
registerThisValidatorAddresses(_address: EthAddress[]): void;
|
|
55
|
+
registerDuplicateProposalCallback(_callback: P2PDuplicateProposalCallback): void;
|
|
56
|
+
registerDuplicateAttestationCallback(_callback: P2PDuplicateAttestationCallback): void;
|
|
57
|
+
hasBlockProposalsForSlot(_slot: SlotNumber): Promise<boolean>;
|
|
54
58
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtbXlfcDJwX2NsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YXRlX21hY2hpbmUvZHVtbXlfcDJwX2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFDVixXQUFXLEVBQ1gsR0FBRyxFQUNILEdBQUcsRUFDSCx3QkFBd0IsRUFDeEIsNkJBQTZCLEVBQzdCLFNBQVMsRUFDVCwrQkFBK0IsRUFDL0IsNEJBQTRCLEVBQzVCLFlBQVksRUFDWixNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsYUFBYSxFQUNkLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0UsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdHLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEUscUJBQWEsUUFBUyxZQUFXLEdBQUc7SUFDM0Isa0NBQWtDLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFbkU7SUFFTSxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUU1QjtJQUVNLGFBQWEsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FFcEM7SUFFTSxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FFbEQ7SUFF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dummy_p2p_client.d.ts","sourceRoot":"","sources":["../../src/state_machine/dummy_p2p_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EACV,WAAW,EACX,GAAG,EACH,GAAG,EACH,wBAAwB,EACxB,6BAA6B,EAC7B,SAAS,EACT,YAAY,EACZ,MAAM,EACN,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"dummy_p2p_client.d.ts","sourceRoot":"","sources":["../../src/state_machine/dummy_p2p_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export class DummyP2P {
|
|
2
|
-
|
|
2
|
+
validateTxsReceivedInBlockProposal(_txs) {
|
|
3
3
|
return Promise.resolve();
|
|
4
4
|
}
|
|
5
5
|
clear() {
|
|
@@ -14,6 +14,9 @@ export class DummyP2P {
|
|
|
14
14
|
getPeers(_includePending) {
|
|
15
15
|
throw new Error('DummyP2P does not implement "getPeers"');
|
|
16
16
|
}
|
|
17
|
+
getGossipMeshPeerCount(_topicType) {
|
|
18
|
+
return Promise.resolve(0);
|
|
19
|
+
}
|
|
17
20
|
broadcastProposal(_proposal) {
|
|
18
21
|
throw new Error('DummyP2P does not implement "broadcastProposal"');
|
|
19
22
|
}
|
|
@@ -38,8 +41,8 @@ export class DummyP2P {
|
|
|
38
41
|
sendTx(_tx) {
|
|
39
42
|
throw new Error('DummyP2P does not implement "sendTx"');
|
|
40
43
|
}
|
|
41
|
-
|
|
42
|
-
throw new Error('DummyP2P does not implement "
|
|
44
|
+
handleFailedExecution(_txHashes) {
|
|
45
|
+
throw new Error('DummyP2P does not implement "handleFailedExecution"');
|
|
43
46
|
}
|
|
44
47
|
getTxByHashFromPool(_txHash) {
|
|
45
48
|
throw new Error('DummyP2P does not implement "getTxByHashFromPool"');
|
|
@@ -58,6 +61,9 @@ export class DummyP2P {
|
|
|
58
61
|
iteratePendingTxs() {
|
|
59
62
|
throw new Error('DummyP2P does not implement "iteratePendingTxs"');
|
|
60
63
|
}
|
|
64
|
+
iterateEligiblePendingTxs() {
|
|
65
|
+
throw new Error('DummyP2P does not implement "iterateEligiblePendingTxs"');
|
|
66
|
+
}
|
|
61
67
|
getPendingTxCount() {
|
|
62
68
|
throw new Error('DummyP2P does not implement "getPendingTxCount"');
|
|
63
69
|
}
|
|
@@ -79,14 +85,17 @@ export class DummyP2P {
|
|
|
79
85
|
isP2PClient() {
|
|
80
86
|
throw new Error('DummyP2P does not implement "isP2PClient"');
|
|
81
87
|
}
|
|
88
|
+
getTxProvider() {
|
|
89
|
+
throw new Error('DummyP2P does not implement "getTxProvider"');
|
|
90
|
+
}
|
|
82
91
|
getTxsByHash(_txHashes) {
|
|
83
92
|
throw new Error('DummyP2P does not implement "getTxsByHash"');
|
|
84
93
|
}
|
|
85
94
|
getCheckpointAttestationsForSlot(_slot, _proposalId) {
|
|
86
95
|
throw new Error('DummyP2P does not implement "getCheckpointAttestationsForSlot"');
|
|
87
96
|
}
|
|
88
|
-
|
|
89
|
-
throw new Error('DummyP2P does not implement "
|
|
97
|
+
addOwnCheckpointAttestations(_attestations) {
|
|
98
|
+
throw new Error('DummyP2P does not implement "addOwnCheckpointAttestations"');
|
|
90
99
|
}
|
|
91
100
|
getL2BlockHash(_number) {
|
|
92
101
|
throw new Error('DummyP2P does not implement "getL2BlockHash"');
|
|
@@ -103,21 +112,12 @@ export class DummyP2P {
|
|
|
103
112
|
sync() {
|
|
104
113
|
throw new Error('DummyP2P does not implement "sync"');
|
|
105
114
|
}
|
|
106
|
-
requestTxsByHash(_txHashes) {
|
|
107
|
-
throw new Error('DummyP2P does not implement "requestTxsByHash"');
|
|
108
|
-
}
|
|
109
|
-
getTxs(_filter) {
|
|
110
|
-
throw new Error('DummyP2P does not implement "getTxs"');
|
|
111
|
-
}
|
|
112
115
|
getTxsByHashFromPool(_txHashes) {
|
|
113
116
|
throw new Error('DummyP2P does not implement "getTxsByHashFromPool"');
|
|
114
117
|
}
|
|
115
118
|
hasTxsInPool(_txHashes) {
|
|
116
119
|
throw new Error('DummyP2P does not implement "hasTxsInPool"');
|
|
117
120
|
}
|
|
118
|
-
addTxsToPool(_txs) {
|
|
119
|
-
throw new Error('DummyP2P does not implement "addTxs"');
|
|
120
|
-
}
|
|
121
121
|
getSyncedLatestBlockNum() {
|
|
122
122
|
throw new Error('DummyP2P does not implement "getSyncedLatestBlockNum"');
|
|
123
123
|
}
|
|
@@ -127,8 +127,11 @@ export class DummyP2P {
|
|
|
127
127
|
getSyncedLatestSlot() {
|
|
128
128
|
throw new Error('DummyP2P does not implement "getSyncedLatestSlot"');
|
|
129
129
|
}
|
|
130
|
-
|
|
131
|
-
throw new Error('DummyP2P does not implement "
|
|
130
|
+
protectTxs(_txHashes, _blockHeader) {
|
|
131
|
+
throw new Error('DummyP2P does not implement "protectTxs".');
|
|
132
|
+
}
|
|
133
|
+
prepareForSlot(_slotNumber) {
|
|
134
|
+
return Promise.resolve();
|
|
132
135
|
}
|
|
133
136
|
addReqRespSubProtocol(_subProtocol, _handler, _validator) {
|
|
134
137
|
throw new Error('DummyP2P does not implement "addReqRespSubProtocol".');
|
|
@@ -138,4 +141,13 @@ export class DummyP2P {
|
|
|
138
141
|
}
|
|
139
142
|
//This is no-op
|
|
140
143
|
registerThisValidatorAddresses(_address) {}
|
|
144
|
+
registerDuplicateProposalCallback(_callback) {
|
|
145
|
+
throw new Error('DummyP2P does not implement "registerDuplicateProposalCallback"');
|
|
146
|
+
}
|
|
147
|
+
registerDuplicateAttestationCallback(_callback) {
|
|
148
|
+
throw new Error('DummyP2P does not implement "registerDuplicateAttestationCallback"');
|
|
149
|
+
}
|
|
150
|
+
hasBlockProposalsForSlot(_slot) {
|
|
151
|
+
throw new Error('DummyP2P does not implement "hasBlockProposalsForSlot"');
|
|
152
|
+
}
|
|
141
153
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
3
|
-
import { L2BlockNew } from '@aztec/stdlib/block';
|
|
1
|
+
import { type AnchorBlockStore, type ContractStore, ContractSyncService, type NoteStore } from '@aztec/pxe/server';
|
|
2
|
+
import { L2Block } from '@aztec/stdlib/block';
|
|
4
3
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
5
4
|
import { TXEArchiver } from './archiver.js';
|
|
6
5
|
import { TXESynchronizer } from './synchronizer.js';
|
|
@@ -9,8 +8,9 @@ export declare class TXEStateMachine {
|
|
|
9
8
|
synchronizer: TXESynchronizer;
|
|
10
9
|
archiver: TXEArchiver;
|
|
11
10
|
anchorBlockStore: AnchorBlockStore;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
contractSyncService: ContractSyncService;
|
|
12
|
+
constructor(node: AztecNode, synchronizer: TXESynchronizer, archiver: TXEArchiver, anchorBlockStore: AnchorBlockStore, contractSyncService: ContractSyncService);
|
|
13
|
+
static create(archiver: TXEArchiver, anchorBlockStore: AnchorBlockStore, contractStore: ContractStore, noteStore: NoteStore): Promise<TXEStateMachine>;
|
|
14
|
+
handleL2Block(block: L2Block): Promise<void>;
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZV9tYWNoaW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUFFLEtBQUssYUFBYSxFQUFFLG1CQUFtQixFQUFFLEtBQUssU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBS3BELHFCQUFhLGVBQWU7SUFFakIsSUFBSSxFQUFFLFNBQVM7SUFDZixZQUFZLEVBQUUsZUFBZTtJQUM3QixRQUFRLEVBQUUsV0FBVztJQUNyQixnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsbUJBQW1CLEVBQUUsbUJBQW1CO0lBTGpELFlBQ1MsSUFBSSxFQUFFLFNBQVMsRUFDZixZQUFZLEVBQUUsZUFBZSxFQUM3QixRQUFRLEVBQUUsV0FBVyxFQUNyQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQzdDO0lBRUosT0FBb0IsTUFBTSxDQUN4QixRQUFRLEVBQUUsV0FBVyxFQUNyQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsYUFBYSxFQUFFLGFBQWEsRUFDNUIsU0FBUyxFQUFFLFNBQVMsNEJBcUNyQjtJQUVZLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxpQkF5Q3hDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state_machine/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state_machine/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAIjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBAAa,eAAe;IAEjB,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,eAAe;IAC7B,QAAQ,EAAE,WAAW;IACrB,gBAAgB,EAAE,gBAAgB;IAClC,mBAAmB,EAAE,mBAAmB;IALjD,YACS,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,eAAe,EAC7B,QAAQ,EAAE,WAAW,EACrB,gBAAgB,EAAE,gBAAgB,EAClC,mBAAmB,EAAE,mBAAmB,EAC7C;IAEJ,OAAoB,MAAM,CACxB,QAAQ,EAAE,WAAW,EACrB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,4BAqCrB;IAEY,aAAa,CAAC,KAAK,EAAE,OAAO,iBAyCxC;CACF"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { AztecNodeService } from '@aztec/aztec-node';
|
|
2
2
|
import { TestCircuitVerifier } from '@aztec/bb-prover/test';
|
|
3
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
-
import {
|
|
6
|
+
import { ContractSyncService } from '@aztec/pxe/server';
|
|
5
7
|
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
6
9
|
import { getPackageVersion } from '@aztec/stdlib/update-checker';
|
|
7
|
-
import { TXEArchiver } from './archiver.js';
|
|
8
10
|
import { DummyP2P } from './dummy_p2p_client.js';
|
|
9
11
|
import { TXEGlobalVariablesBuilder } from './global_variable_builder.js';
|
|
10
12
|
import { MockEpochCache } from './mock_epoch_cache.js';
|
|
@@ -16,33 +18,45 @@ export class TXEStateMachine {
|
|
|
16
18
|
synchronizer;
|
|
17
19
|
archiver;
|
|
18
20
|
anchorBlockStore;
|
|
19
|
-
|
|
21
|
+
contractSyncService;
|
|
22
|
+
constructor(node, synchronizer, archiver, anchorBlockStore, contractSyncService){
|
|
20
23
|
this.node = node;
|
|
21
24
|
this.synchronizer = synchronizer;
|
|
22
25
|
this.archiver = archiver;
|
|
23
26
|
this.anchorBlockStore = anchorBlockStore;
|
|
27
|
+
this.contractSyncService = contractSyncService;
|
|
24
28
|
}
|
|
25
|
-
static async create(
|
|
26
|
-
const archiver = new TXEArchiver(db);
|
|
29
|
+
static async create(archiver, anchorBlockStore, contractStore, noteStore) {
|
|
27
30
|
const synchronizer = await TXESynchronizer.create();
|
|
28
|
-
const anchorBlockStore = new AnchorBlockStore(db);
|
|
29
31
|
const aztecNodeConfig = {};
|
|
30
32
|
const log = createLogger('txe_node');
|
|
31
|
-
const node = new AztecNodeService(aztecNodeConfig, new DummyP2P(), archiver, archiver, archiver, archiver, synchronizer, undefined, undefined, undefined, undefined, VERSION, CHAIN_ID, new TXEGlobalVariablesBuilder(), new MockEpochCache(), getPackageVersion() ?? '', new TestCircuitVerifier(), undefined, log);
|
|
32
|
-
|
|
33
|
+
const node = new AztecNodeService(aztecNodeConfig, new DummyP2P(), archiver, archiver, archiver, archiver, synchronizer, undefined, undefined, undefined, undefined, undefined, VERSION, CHAIN_ID, new TXEGlobalVariablesBuilder(), new MockEpochCache(), getPackageVersion() ?? '', new TestCircuitVerifier(), undefined, log);
|
|
34
|
+
const contractSyncService = new ContractSyncService(node, contractStore, noteStore, createLogger('txe:contract_sync'));
|
|
35
|
+
return new this(node, synchronizer, archiver, anchorBlockStore, contractSyncService);
|
|
33
36
|
}
|
|
34
37
|
async handleL2Block(block) {
|
|
35
|
-
// Create a checkpoint from the block
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
// Create a checkpoint from the block manually.
|
|
39
|
+
// TXE uses 1-block-per-checkpoint for testing simplicity, so we can use block number as checkpoint number.
|
|
40
|
+
// This uses the deprecated fromBlockNumber method intentionally for the TXE testing environment.
|
|
41
|
+
const checkpointNumber = CheckpointNumber.fromBlockNumber(block.number);
|
|
42
|
+
const checkpoint = new Checkpoint(block.archive, CheckpointHeader.from({
|
|
43
|
+
lastArchiveRoot: block.header.lastArchive.root,
|
|
44
|
+
inHash: Fr.ZERO,
|
|
45
|
+
blobsHash: Fr.ZERO,
|
|
46
|
+
blockHeadersHash: Fr.ZERO,
|
|
47
|
+
epochOutHash: Fr.ZERO,
|
|
48
|
+
slotNumber: block.header.globalVariables.slotNumber,
|
|
49
|
+
timestamp: block.header.globalVariables.timestamp,
|
|
50
|
+
coinbase: block.header.globalVariables.coinbase,
|
|
51
|
+
feeRecipient: block.header.globalVariables.feeRecipient,
|
|
52
|
+
gasFees: block.header.globalVariables.gasFees,
|
|
53
|
+
totalManaUsed: block.header.totalManaUsed
|
|
54
|
+
}), [
|
|
43
55
|
block
|
|
44
|
-
];
|
|
56
|
+
], checkpointNumber);
|
|
45
57
|
const publishedCheckpoint = new PublishedCheckpoint(checkpoint, new L1PublishedData(BigInt(block.header.globalVariables.blockNumber), block.header.globalVariables.timestamp, block.header.globalVariables.blockNumber.toString()), []);
|
|
58
|
+
// Wipe contract sync cache when anchor block changes (mirrors BlockSynchronizer behavior)
|
|
59
|
+
this.contractSyncService.wipe();
|
|
46
60
|
await Promise.all([
|
|
47
61
|
this.synchronizer.handleL2Block(block),
|
|
48
62
|
this.archiver.addCheckpoints([
|