@aztec/sequencer-client 5.0.0-nightly.20260428 → 5.0.0-nightly.20260430
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/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +9 -5
- package/dest/publisher/sequencer-publisher.d.ts +1 -1
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +2 -2
- package/dest/sequencer/checkpoint_proposal_job.d.ts +8 -2
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +181 -19
- package/dest/sequencer/metrics.d.ts +3 -1
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +7 -0
- package/dest/sequencer/sequencer.d.ts +11 -4
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +33 -8
- package/dest/test/utils.d.ts +1 -1
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +7 -6
- package/package.json +27 -27
- package/src/config.ts +9 -4
- package/src/publisher/sequencer-publisher.ts +2 -4
- package/src/sequencer/README.md +20 -21
- package/src/sequencer/checkpoint_proposal_job.ts +202 -17
- package/src/sequencer/metrics.ts +9 -0
- package/src/sequencer/sequencer.ts +37 -9
- package/src/test/utils.ts +28 -10
|
@@ -491,6 +491,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
491
491
|
checkpointsBuilder;
|
|
492
492
|
blockSink;
|
|
493
493
|
l1Constants;
|
|
494
|
+
signatureContext;
|
|
494
495
|
config;
|
|
495
496
|
timetable;
|
|
496
497
|
slasherClient;
|
|
@@ -547,10 +548,14 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
547
548
|
], []));
|
|
548
549
|
}
|
|
549
550
|
log;
|
|
551
|
+
checkpointEventLog;
|
|
550
552
|
/** Tracks the fire-and-forget L1 submission promise so it can be awaited during shutdown. */ pendingL1Submission;
|
|
551
553
|
/** Pipelined parent chain state used while building and later submitting this checkpoint. */ pipelinedParentSimulationOverridesPlan;
|
|
554
|
+
getSignatureContext() {
|
|
555
|
+
return this.signatureContext;
|
|
556
|
+
}
|
|
552
557
|
constructor(slotNow, targetSlot, targetEpoch, checkpointNumber, syncedToBlockNumber, // TODO(palla/mbps): Can we remove the proposer in favor of attestorAddress? Need to check fisherman-node flows.
|
|
553
|
-
proposer, publisher, attestorAddress, invalidateCheckpoint, validatorClient, globalsBuilder, p2pClient, worldState, l1ToL2MessageSource, l2BlockSource, checkpointsBuilder, blockSink, l1Constants, config, timetable, slasherClient, epochCache, dateProvider, metrics, checkpointMetrics, eventEmitter, setStateFn, tracer, bindings, proposedCheckpointData){
|
|
558
|
+
proposer, publisher, attestorAddress, invalidateCheckpoint, validatorClient, globalsBuilder, p2pClient, worldState, l1ToL2MessageSource, l2BlockSource, checkpointsBuilder, blockSink, l1Constants, signatureContext, config, timetable, slasherClient, epochCache, dateProvider, metrics, checkpointMetrics, eventEmitter, setStateFn, tracer, bindings, proposedCheckpointData){
|
|
554
559
|
this.slotNow = slotNow;
|
|
555
560
|
this.targetSlot = targetSlot;
|
|
556
561
|
this.targetEpoch = targetEpoch;
|
|
@@ -569,6 +574,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
569
574
|
this.checkpointsBuilder = checkpointsBuilder;
|
|
570
575
|
this.blockSink = blockSink;
|
|
571
576
|
this.l1Constants = l1Constants;
|
|
577
|
+
this.signatureContext = signatureContext;
|
|
572
578
|
this.config = config;
|
|
573
579
|
this.timetable = timetable;
|
|
574
580
|
this.slasherClient = slasherClient;
|
|
@@ -585,11 +591,21 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
585
591
|
...bindings,
|
|
586
592
|
instanceId: `slot-${this.slotNow}`
|
|
587
593
|
});
|
|
594
|
+
this.checkpointEventLog = createLogger('sequencer:checkpoint-events', {
|
|
595
|
+
...bindings,
|
|
596
|
+
instanceId: `slot-${this.slotNow}`
|
|
597
|
+
});
|
|
588
598
|
}
|
|
589
599
|
/** Awaits the pending L1 submission if one is in progress. Call during shutdown. */ async awaitPendingSubmission() {
|
|
590
600
|
this.log.info('Awaiting pending L1 payload submission');
|
|
591
601
|
await this.pendingL1Submission;
|
|
592
602
|
}
|
|
603
|
+
logCheckpointEvent(eventName, message, fields) {
|
|
604
|
+
this.checkpointEventLog.debug(message, {
|
|
605
|
+
eventName: `sequencer-checkpoint-${eventName}`,
|
|
606
|
+
...fields
|
|
607
|
+
});
|
|
608
|
+
}
|
|
593
609
|
/**
|
|
594
610
|
* Executes the checkpoint proposal job.
|
|
595
611
|
* Builds blocks, assembles checkpoint, and broadcasts the proposal (blocking).
|
|
@@ -661,6 +677,12 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
661
677
|
const l1Response = await this.publisher.sendRequestsAt(submitAfter);
|
|
662
678
|
const proposedAction = l1Response?.successfulActions.find((a)=>a === 'propose');
|
|
663
679
|
if (proposedAction) {
|
|
680
|
+
this.logCheckpointEvent('published', `Checkpoint published for slot ${this.targetSlot}`, {
|
|
681
|
+
slot: this.targetSlot,
|
|
682
|
+
checkpointNumber: this.checkpointNumber,
|
|
683
|
+
successfulActions: l1Response?.successfulActions,
|
|
684
|
+
sentActions: l1Response?.sentActions
|
|
685
|
+
});
|
|
664
686
|
this.eventEmitter.emit('checkpoint-published', {
|
|
665
687
|
checkpoint: this.checkpointNumber,
|
|
666
688
|
slot: this.targetSlot
|
|
@@ -668,6 +690,24 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
668
690
|
const coinbase = checkpoint.header.coinbase;
|
|
669
691
|
await this.metrics.incFilledSlot(this.publisher.getSenderAddress().toString(), coinbase);
|
|
670
692
|
} else {
|
|
693
|
+
this.logCheckpointEvent('publish-failed', `Checkpoint publish failed for slot ${this.targetSlot}`, {
|
|
694
|
+
slot: this.targetSlot,
|
|
695
|
+
checkpointNumber: this.checkpointNumber,
|
|
696
|
+
successfulActions: l1Response?.successfulActions,
|
|
697
|
+
failedActions: l1Response?.failedActions,
|
|
698
|
+
sentActions: l1Response?.sentActions,
|
|
699
|
+
expiredActions: l1Response?.expiredActions,
|
|
700
|
+
reason: 'propose_action_not_successful'
|
|
701
|
+
});
|
|
702
|
+
this.log.warn(`Checkpoint publish failed for slot ${this.targetSlot}`, {
|
|
703
|
+
slot: this.targetSlot,
|
|
704
|
+
checkpointNumber: this.checkpointNumber,
|
|
705
|
+
successfulActions: l1Response?.successfulActions,
|
|
706
|
+
failedActions: l1Response?.failedActions,
|
|
707
|
+
sentActions: l1Response?.sentActions,
|
|
708
|
+
expiredActions: l1Response?.expiredActions,
|
|
709
|
+
reason: 'propose_action_not_successful'
|
|
710
|
+
});
|
|
671
711
|
this.eventEmitter.emit('checkpoint-publish-failed', {
|
|
672
712
|
...l1Response,
|
|
673
713
|
slot: this.targetSlot
|
|
@@ -680,7 +720,16 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
680
720
|
if (err instanceof SequencerInterruptedError) {
|
|
681
721
|
return;
|
|
682
722
|
}
|
|
683
|
-
this.
|
|
723
|
+
this.logCheckpointEvent('publish-failed', `Checkpoint publish failed for slot ${this.targetSlot}`, {
|
|
724
|
+
slot: this.targetSlot,
|
|
725
|
+
checkpointNumber: this.checkpointNumber,
|
|
726
|
+
reason: err instanceof Error ? err.message : String(err)
|
|
727
|
+
});
|
|
728
|
+
this.log.error(`Background attestation/L1 pipeline failed for slot ${this.targetSlot}`, err, {
|
|
729
|
+
slot: this.targetSlot,
|
|
730
|
+
checkpointNumber: this.checkpointNumber,
|
|
731
|
+
reason: err instanceof Error ? err.message : String(err)
|
|
732
|
+
});
|
|
684
733
|
this.eventEmitter.emit('checkpoint-publish-failed', {
|
|
685
734
|
slot: this.targetSlot
|
|
686
735
|
});
|
|
@@ -854,11 +903,15 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
854
903
|
const feeRecipient = this.validatorClient.getFeeRecipientForAttestor(this.attestorAddress);
|
|
855
904
|
// Start the checkpoint
|
|
856
905
|
this.setStateFn(SequencerState.INITIALIZING_CHECKPOINT, this.targetSlot);
|
|
857
|
-
this.
|
|
906
|
+
this.logCheckpointEvent('slot-started', `Starting checkpoint proposal for slot ${this.targetSlot}`, {
|
|
858
907
|
buildSlot: this.slotNow,
|
|
859
908
|
submissionSlot: this.targetSlot,
|
|
909
|
+
slot: this.targetSlot,
|
|
910
|
+
checkpointNumber: this.checkpointNumber,
|
|
860
911
|
pipelining: this.epochCache.isProposerPipeliningEnabled(),
|
|
861
912
|
proposer: this.proposer?.toString(),
|
|
913
|
+
attestorAddress: this.attestorAddress.toString(),
|
|
914
|
+
publisherAddress: this.publisher.getSenderAddress().toString(),
|
|
862
915
|
coinbase: coinbase.toString()
|
|
863
916
|
});
|
|
864
917
|
this.metrics.incOpenSlot(this.targetSlot, this.proposer?.toString() ?? 'unknown');
|
|
@@ -916,8 +969,15 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
916
969
|
throw err;
|
|
917
970
|
}
|
|
918
971
|
if (blocksInCheckpoint.length === 0) {
|
|
972
|
+
this.logCheckpointEvent('build-failed', `Checkpoint build failed for slot ${this.targetSlot}`, {
|
|
973
|
+
slot: this.targetSlot,
|
|
974
|
+
checkpointNumber: this.checkpointNumber,
|
|
975
|
+
reason: 'no_blocks_built'
|
|
976
|
+
});
|
|
919
977
|
this.log.warn(`No blocks were built for slot ${this.targetSlot}`, {
|
|
920
|
-
slot: this.targetSlot
|
|
978
|
+
slot: this.targetSlot,
|
|
979
|
+
checkpointNumber: this.checkpointNumber,
|
|
980
|
+
reason: 'no_blocks_built'
|
|
921
981
|
});
|
|
922
982
|
this.eventEmitter.emit('checkpoint-empty', {
|
|
923
983
|
slot: this.targetSlot
|
|
@@ -926,10 +986,19 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
926
986
|
}
|
|
927
987
|
const minBlocksForCheckpoint = this.config.minBlocksForCheckpoint;
|
|
928
988
|
if (minBlocksForCheckpoint !== undefined && blocksInCheckpoint.length < minBlocksForCheckpoint) {
|
|
989
|
+
this.logCheckpointEvent('build-failed', `Checkpoint build failed for slot ${this.targetSlot}`, {
|
|
990
|
+
slot: this.targetSlot,
|
|
991
|
+
checkpointNumber: this.checkpointNumber,
|
|
992
|
+
blocksBuilt: blocksInCheckpoint.length,
|
|
993
|
+
minBlocksForCheckpoint,
|
|
994
|
+
reason: 'min_blocks_not_met'
|
|
995
|
+
});
|
|
929
996
|
this.log.warn(`Checkpoint has fewer blocks than minimum (${blocksInCheckpoint.length} < ${minBlocksForCheckpoint}), skipping proposal`, {
|
|
930
997
|
slot: this.targetSlot,
|
|
998
|
+
checkpointNumber: this.checkpointNumber,
|
|
931
999
|
blocksBuilt: blocksInCheckpoint.length,
|
|
932
|
-
minBlocksForCheckpoint
|
|
1000
|
+
minBlocksForCheckpoint,
|
|
1001
|
+
reason: 'min_blocks_not_met'
|
|
933
1002
|
});
|
|
934
1003
|
return undefined;
|
|
935
1004
|
}
|
|
@@ -948,13 +1017,35 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
948
1017
|
maxTxsPerCheckpoint: this.config.maxTxsPerCheckpoint
|
|
949
1018
|
});
|
|
950
1019
|
} catch (err) {
|
|
1020
|
+
this.logCheckpointEvent('build-failed', `Checkpoint build failed for slot ${this.targetSlot}`, {
|
|
1021
|
+
slot: this.targetSlot,
|
|
1022
|
+
checkpointNumber: this.checkpointNumber,
|
|
1023
|
+
blocksBuilt: blocksInCheckpoint.length,
|
|
1024
|
+
reason: 'invalid_checkpoint',
|
|
1025
|
+
checkpoint: checkpoint.header.toInspect()
|
|
1026
|
+
});
|
|
951
1027
|
this.log.error(`Built an invalid checkpoint at slot ${this.slotNow} (skipping proposal)`, err, {
|
|
1028
|
+
slot: this.targetSlot,
|
|
1029
|
+
checkpointNumber: this.checkpointNumber,
|
|
1030
|
+
blocksBuilt: blocksInCheckpoint.length,
|
|
1031
|
+
reason: 'invalid_checkpoint',
|
|
952
1032
|
checkpoint: checkpoint.header.toInspect()
|
|
953
1033
|
});
|
|
954
1034
|
return undefined;
|
|
955
1035
|
}
|
|
956
1036
|
// Record checkpoint-level build metrics
|
|
957
1037
|
this.checkpointMetrics.recordCheckpointBuild(checkpointBuildTimer.ms(), blocksInCheckpoint.length, checkpoint.getStats().txCount, Number(checkpoint.header.totalManaUsed.toBigInt()));
|
|
1038
|
+
this.logCheckpointEvent('built', `Checkpoint built for slot ${this.targetSlot}`, {
|
|
1039
|
+
slot: this.targetSlot,
|
|
1040
|
+
buildSlot: this.slotNow,
|
|
1041
|
+
checkpointNumber: this.checkpointNumber,
|
|
1042
|
+
proposer: this.proposer?.toString(),
|
|
1043
|
+
attestorAddress: this.attestorAddress.toString(),
|
|
1044
|
+
publisherAddress: this.publisher.getSenderAddress().toString(),
|
|
1045
|
+
blocksBuilt: blocksInCheckpoint.length,
|
|
1046
|
+
txCount: checkpoint.getStats().txCount,
|
|
1047
|
+
totalMana: Number(checkpoint.header.totalManaUsed.toBigInt())
|
|
1048
|
+
});
|
|
958
1049
|
// In fisherman mode, return the checkpoint without broadcasting or collecting attestations
|
|
959
1050
|
if (this.config.fishermanMode) {
|
|
960
1051
|
this.log.info(`Built checkpoint for slot ${this.targetSlot} with ${blocksInCheckpoint.length} blocks. ` + `Skipping proposal in fisherman mode.`, {
|
|
@@ -973,8 +1064,10 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
973
1064
|
// Create the checkpoint proposal and broadcast it
|
|
974
1065
|
const proposal = await this.validatorClient.createCheckpointProposal(checkpoint.header, checkpoint.archive.root, this.checkpointNumber, feeAssetPriceModifier, blockPendingBroadcast, this.proposer, checkpointProposalOptions);
|
|
975
1066
|
const blockProposedAt = this.dateProvider.now();
|
|
976
|
-
|
|
977
|
-
|
|
1067
|
+
if (!this.config.skipBroadcastProposals) {
|
|
1068
|
+
await this.p2pClient.broadcastCheckpointProposal(proposal);
|
|
1069
|
+
this.checkpointMetrics.noteCheckpointBroadcast(this.dateProvider.now());
|
|
1070
|
+
}
|
|
978
1071
|
// Return immediately after broadcast — attestation collection happens in the background
|
|
979
1072
|
return {
|
|
980
1073
|
checkpoint,
|
|
@@ -1077,7 +1170,9 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1077
1170
|
break;
|
|
1078
1171
|
}
|
|
1079
1172
|
// Once we have a signed proposal and the archiver agreed with our proposed block, then we broadcast it.
|
|
1080
|
-
proposal &&
|
|
1173
|
+
if (proposal && !this.config.skipBroadcastProposals) {
|
|
1174
|
+
await this.p2pClient.broadcastProposal(proposal);
|
|
1175
|
+
}
|
|
1081
1176
|
// Wait until the next block's start time
|
|
1082
1177
|
await this.waitUntilNextSubslot(timingInfo.deadline);
|
|
1083
1178
|
}
|
|
@@ -1114,10 +1209,23 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1114
1209
|
// Wait until we have enough txs to build the block
|
|
1115
1210
|
const { availableTxs, canStartBuilding, minTxs } = await this.waitForMinTxs(opts);
|
|
1116
1211
|
if (!canStartBuilding) {
|
|
1212
|
+
this.logCheckpointEvent('block-build-failed', `Block build failed for slot ${this.targetSlot}`, {
|
|
1213
|
+
reason: 'insufficient_txs',
|
|
1214
|
+
blockNumber,
|
|
1215
|
+
slot: this.targetSlot,
|
|
1216
|
+
checkpointNumber: this.checkpointNumber,
|
|
1217
|
+
indexWithinCheckpoint,
|
|
1218
|
+
availableTxs,
|
|
1219
|
+
minTxs
|
|
1220
|
+
});
|
|
1117
1221
|
this.log.warn(`Not enough txs to build block ${blockNumber} at index ${indexWithinCheckpoint} in slot ${this.targetSlot} (got ${availableTxs} txs but needs ${minTxs})`, {
|
|
1222
|
+
reason: 'insufficient_txs',
|
|
1118
1223
|
blockNumber,
|
|
1119
1224
|
slot: this.targetSlot,
|
|
1120
|
-
|
|
1225
|
+
checkpointNumber: this.checkpointNumber,
|
|
1226
|
+
indexWithinCheckpoint,
|
|
1227
|
+
availableTxs,
|
|
1228
|
+
minTxs
|
|
1121
1229
|
});
|
|
1122
1230
|
this.eventEmitter.emit('block-tx-count-check-failed', {
|
|
1123
1231
|
minTxs,
|
|
@@ -1158,8 +1266,19 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1158
1266
|
// If any txs failed during execution, drop them from the mempool so we don't pick them up again
|
|
1159
1267
|
await this.dropFailedTxsFromP2P(buildResult.failedTxs);
|
|
1160
1268
|
if (buildResult.status === 'insufficient-valid-txs') {
|
|
1269
|
+
this.logCheckpointEvent('block-build-failed', `Block build failed for slot ${this.targetSlot}`, {
|
|
1270
|
+
reason: 'insufficient_valid_txs',
|
|
1271
|
+
slot: this.targetSlot,
|
|
1272
|
+
checkpointNumber: this.checkpointNumber,
|
|
1273
|
+
blockNumber,
|
|
1274
|
+
numTxs: buildResult.processedCount,
|
|
1275
|
+
indexWithinCheckpoint,
|
|
1276
|
+
minValidTxs
|
|
1277
|
+
});
|
|
1161
1278
|
this.log.warn(`Block ${blockNumber} at index ${indexWithinCheckpoint} on slot ${this.targetSlot} has too few valid txs to be proposed`, {
|
|
1279
|
+
reason: 'insufficient_valid_txs',
|
|
1162
1280
|
slot: this.targetSlot,
|
|
1281
|
+
checkpointNumber: this.checkpointNumber,
|
|
1163
1282
|
blockNumber,
|
|
1164
1283
|
numTxs: buildResult.processedCount,
|
|
1165
1284
|
indexWithinCheckpoint,
|
|
@@ -1208,9 +1327,17 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1208
1327
|
reason: err.message,
|
|
1209
1328
|
slot: this.targetSlot
|
|
1210
1329
|
});
|
|
1330
|
+
this.logCheckpointEvent('block-build-failed', `Block build failed for slot ${this.targetSlot}`, {
|
|
1331
|
+
reason: err instanceof Error ? err.message : String(err),
|
|
1332
|
+
slot: this.targetSlot,
|
|
1333
|
+
checkpointNumber: this.checkpointNumber,
|
|
1334
|
+
blockNumber
|
|
1335
|
+
});
|
|
1211
1336
|
this.log.error(`Error building block`, err, {
|
|
1212
|
-
|
|
1213
|
-
slot: this.targetSlot
|
|
1337
|
+
reason: err instanceof Error ? err.message : String(err),
|
|
1338
|
+
slot: this.targetSlot,
|
|
1339
|
+
checkpointNumber: this.checkpointNumber,
|
|
1340
|
+
blockNumber
|
|
1214
1341
|
});
|
|
1215
1342
|
this.metrics.recordBlockProposalFailed(err.name || 'unknown_error');
|
|
1216
1343
|
this.metrics.recordFailedBlock();
|
|
@@ -1303,7 +1430,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1303
1430
|
*/ async waitForAttestations(proposal) {
|
|
1304
1431
|
if (this.config.fishermanMode) {
|
|
1305
1432
|
this.log.debug('Skipping attestation collection in fisherman mode');
|
|
1306
|
-
return CommitteeAttestationsAndSigners.empty();
|
|
1433
|
+
return CommitteeAttestationsAndSigners.empty(this.getSignatureContext());
|
|
1307
1434
|
}
|
|
1308
1435
|
const slotNumber = proposal.slotNumber;
|
|
1309
1436
|
const { committee, seed, epoch } = await this.epochCache.getCommittee(slotNumber);
|
|
@@ -1311,7 +1438,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1311
1438
|
throw new Error('No committee when collecting attestations');
|
|
1312
1439
|
} else if (committee.length === 0) {
|
|
1313
1440
|
this.log.verbose(`Attesting committee is empty`);
|
|
1314
|
-
return CommitteeAttestationsAndSigners.empty();
|
|
1441
|
+
return CommitteeAttestationsAndSigners.empty(this.getSignatureContext());
|
|
1315
1442
|
} else {
|
|
1316
1443
|
this.log.debug(`Attesting committee length is ${committee.length}`, {
|
|
1317
1444
|
committee
|
|
@@ -1321,7 +1448,10 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1321
1448
|
if (this.config.skipCollectingAttestations) {
|
|
1322
1449
|
this.log.warn('Skipping attestation collection as per config (attesting with own keys only)');
|
|
1323
1450
|
const attestations = await this.validatorClient?.collectOwnAttestations(proposal, this.checkpointNumber);
|
|
1324
|
-
|
|
1451
|
+
this.logCheckpointAttestations('collected', committee, attestations ?? [], numberOfRequiredAttestations, {
|
|
1452
|
+
reason: 'collect_own_only'
|
|
1453
|
+
});
|
|
1454
|
+
return new CommitteeAttestationsAndSigners(orderAttestations(attestations ?? [], committee), this.getSignatureContext());
|
|
1325
1455
|
}
|
|
1326
1456
|
const attestationTimeAllowed = this.config.enforceTimeTable ? this.timetable.getCheckpointAttestationDeadline() : this.l1Constants.slotDuration;
|
|
1327
1457
|
const attestationDeadline = new Date((this.getSlotStartBuildTimestamp() + attestationTimeAllowed) * 1000);
|
|
@@ -1339,16 +1469,27 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1339
1469
|
}
|
|
1340
1470
|
// Rollup contract requires that the signatures are provided in the order of the committee
|
|
1341
1471
|
const sorted = orderAttestations(trimmed, committee);
|
|
1472
|
+
this.logCheckpointAttestations('collected', committee, attestations, numberOfRequiredAttestations, {
|
|
1473
|
+
submittedCount: trimmed.length
|
|
1474
|
+
});
|
|
1342
1475
|
// Manipulate the attestations if we've been configured to do so
|
|
1343
1476
|
if (this.config.injectFakeAttestation || this.config.injectHighSValueAttestation || this.config.injectUnrecoverableSignatureAttestation || this.config.shuffleAttestationOrdering) {
|
|
1344
1477
|
return this.manipulateAttestations(proposal.slotNumber, epoch, seed, committee, sorted);
|
|
1345
1478
|
}
|
|
1346
|
-
return new CommitteeAttestationsAndSigners(sorted);
|
|
1479
|
+
return new CommitteeAttestationsAndSigners(sorted, this.getSignatureContext());
|
|
1347
1480
|
} catch (err) {
|
|
1348
1481
|
if (err && err instanceof AttestationTimeoutError) {
|
|
1349
1482
|
collectedAttestationsCount = err.collectedCount;
|
|
1483
|
+
this.logCheckpointAttestations('failed', committee, undefined, numberOfRequiredAttestations, {
|
|
1484
|
+
collectedCount: collectedAttestationsCount,
|
|
1485
|
+
reason: 'timeout'
|
|
1486
|
+
});
|
|
1350
1487
|
this.log.error(`Timeout while waiting for attestations for checkpoint proposal at slot ${proposal.slotNumber} (collected ${collectedAttestationsCount}/${numberOfRequiredAttestations})`, err);
|
|
1351
1488
|
} else {
|
|
1489
|
+
this.logCheckpointAttestations('failed', committee, undefined, numberOfRequiredAttestations, {
|
|
1490
|
+
collectedCount: collectedAttestationsCount,
|
|
1491
|
+
reason: err instanceof Error ? err.message : String(err)
|
|
1492
|
+
});
|
|
1352
1493
|
this.log.error(`Error collecting attestations for checkpoint proposal at slot ${proposal.slotNumber}`, err);
|
|
1353
1494
|
}
|
|
1354
1495
|
return undefined;
|
|
@@ -1356,6 +1497,27 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1356
1497
|
this.metrics.recordCollectedAttestations(collectedAttestationsCount, collectAttestationsTimer.ms());
|
|
1357
1498
|
}
|
|
1358
1499
|
}
|
|
1500
|
+
logCheckpointAttestations(status, committee, attestations, requiredAttestations, opts = {}) {
|
|
1501
|
+
const signedValidators = attestations?.map((attestation)=>attestation.getSender()?.toString()).filter((address)=>address !== undefined) ?? [];
|
|
1502
|
+
const collectedCount = opts.collectedCount ?? new Set(signedValidators).size;
|
|
1503
|
+
const missingValidatorCount = status === 'failed' ? Math.max(0, requiredAttestations - collectedCount) : undefined;
|
|
1504
|
+
this.logCheckpointEvent(`attestations-${status}`, `Checkpoint attestations ${status} for slot ${this.targetSlot}`, {
|
|
1505
|
+
slot: this.targetSlot,
|
|
1506
|
+
checkpointNumber: this.checkpointNumber,
|
|
1507
|
+
committeeSize: committee.length,
|
|
1508
|
+
requiredAttestations,
|
|
1509
|
+
collectedAttestations: collectedCount,
|
|
1510
|
+
...opts.submittedCount !== undefined && {
|
|
1511
|
+
submittedAttestations: opts.submittedCount
|
|
1512
|
+
},
|
|
1513
|
+
...missingValidatorCount !== undefined && {
|
|
1514
|
+
missingValidatorCount
|
|
1515
|
+
},
|
|
1516
|
+
...opts.reason !== undefined && {
|
|
1517
|
+
reason: opts.reason
|
|
1518
|
+
}
|
|
1519
|
+
});
|
|
1520
|
+
}
|
|
1359
1521
|
/** Breaks the attestations before publishing based on attack configs */ manipulateAttestations(slotNumber, epoch, seed, committee, attestations) {
|
|
1360
1522
|
// Compute the proposer index in the committee, since we dont want to tweak it.
|
|
1361
1523
|
// Otherwise, the L1 rollup contract will reject the block outright.
|
|
@@ -1381,7 +1543,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1381
1543
|
unfreeze(attestations[targetIndex]).signature = generateRecoverableSignature();
|
|
1382
1544
|
}
|
|
1383
1545
|
}
|
|
1384
|
-
return new CommitteeAttestationsAndSigners(attestations);
|
|
1546
|
+
return new CommitteeAttestationsAndSigners(attestations, this.getSignatureContext());
|
|
1385
1547
|
}
|
|
1386
1548
|
if (this.config.shuffleAttestationOrdering) {
|
|
1387
1549
|
this.log.warn(`Shuffling attestation ordering in checkpoint for slot ${slotNumber} (proposer #${proposerIndex})`);
|
|
@@ -1407,10 +1569,10 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1407
1569
|
shuffled[i]
|
|
1408
1570
|
];
|
|
1409
1571
|
}
|
|
1410
|
-
const signers = new CommitteeAttestationsAndSigners(attestations).getSigners();
|
|
1411
|
-
return new MaliciousCommitteeAttestationsAndSigners(shuffled, signers);
|
|
1572
|
+
const signers = new CommitteeAttestationsAndSigners(attestations, this.getSignatureContext()).getSigners();
|
|
1573
|
+
return new MaliciousCommitteeAttestationsAndSigners(shuffled, signers, this.getSignatureContext());
|
|
1412
1574
|
}
|
|
1413
|
-
return new CommitteeAttestationsAndSigners(attestations);
|
|
1575
|
+
return new CommitteeAttestationsAndSigners(attestations, this.getSignatureContext());
|
|
1414
1576
|
}
|
|
1415
1577
|
async dropFailedTxsFromP2P(failedTxs) {
|
|
1416
1578
|
if (failedTxs.length === 0) {
|
|
@@ -13,6 +13,7 @@ export declare class SequencerMetrics {
|
|
|
13
13
|
private blockBuildDuration;
|
|
14
14
|
private blockBuildManaPerSecond;
|
|
15
15
|
private stateTransitionBufferDuration;
|
|
16
|
+
private stateDuration;
|
|
16
17
|
private timeToCollectAttestations;
|
|
17
18
|
private allowanceToCollectAttestations;
|
|
18
19
|
private requiredAttestions;
|
|
@@ -53,6 +54,7 @@ export declare class SequencerMetrics {
|
|
|
53
54
|
recordBuiltBlock(buildDurationMs: number, totalMana: number, slot: SlotNumber): void;
|
|
54
55
|
recordFailedBlock(): void;
|
|
55
56
|
recordStateTransitionBufferMs(durationMs: number, state: SequencerState): void;
|
|
57
|
+
recordStateDuration(durationMs: number, state: SequencerState): void;
|
|
56
58
|
recordPipelineDepth(depth: number): void;
|
|
57
59
|
recordPipelineDiscard(count?: number): void;
|
|
58
60
|
recordPipelineParentCheckpointMismatch(reason: string): void;
|
|
@@ -70,4 +72,4 @@ export declare class SequencerMetrics {
|
|
|
70
72
|
*/
|
|
71
73
|
recordFishermanFeeAnalysis(analysis: L1FeeAnalysisResult): void;
|
|
72
74
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFNTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBR1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELHFCQUFhLGdCQUFnQjtJQXVEekIsT0FBTyxDQUFDLE1BQU07SUF0RGhCLFNBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBUTtJQUVyQixPQUFPLENBQUMsWUFBWSxDQUFnQjtJQUNwQyxPQUFPLENBQUMsa0JBQWtCLENBQVk7SUFDdEMsT0FBTyxDQUFDLHVCQUF1QixDQUFRO0lBQ3ZDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBWTtJQUNqRCxPQUFPLENBQUMsYUFBYSxDQUFZO0lBR2pDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBUTtJQUN6QyxPQUFPLENBQUMsOEJBQThCLENBQVE7SUFDOUMsT0FBTyxDQUFDLGtCQUFrQixDQUFRO0lBQ2xDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBUTtJQUVuQyxPQUFPLENBQUMsT0FBTyxDQUFRO0lBRXZCLE9BQU8sQ0FBQyxLQUFLLENBQWdCO0lBQzdCLE9BQU8sQ0FBQyxXQUFXLENBQWdCO0lBRW5DLE9B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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,gBAAgB;IAuDzB,OAAO,CAAC,MAAM;IAtDhB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,6BAA6B,CAAY;IACjD,OAAO,CAAC,aAAa,CAAY;IAGjC,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,8BAA8B,CAAQ;IAC9C,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAgB;IAEnC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,yBAAyB,CAAgB;IACjD,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,kCAAkC,CAAgB;IAG1D,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,wBAAwB,CAAY;IAC5C,OAAO,CAAC,2BAA2B,CAAY;IAC/C,OAAO,CAAC,4BAA4B,CAAY;IAChD,OAAO,CAAC,yBAAyB,CAAY;IAC7C,OAAO,CAAC,0BAA0B,CAAY;IAC9C,OAAO,CAAC,uBAAuB,CAAgB;IAC/C,OAAO,CAAC,wBAAwB,CAAY;IAC5C,OAAO,CAAC,8BAA8B,CAAY;IAClD,OAAO,CAAC,yBAAyB,CAAY;IAC7C,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,6BAA6B,CAAY;IACjD,OAAO,CAAC,+BAA+B,CAAY;IACnD,OAAO,CAAC,6BAA6B,CAAY;IAEjD,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,uBAAuB,CAAC,CAAS;IACzC,OAAO,CAAC,kBAAkB,CAAC,CAAa;IAExC,OAAO,CAAC,YAAY,CAAC,CAAa;IAElC,YACE,MAAM,EAAE,eAAe,EACf,MAAM,EAAE,cAAc,EAC9B,IAAI,SAAc,EAyInB;IAEM,0BAA0B,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAOvF;IAEM,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAGnE;IAED,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,QAc5E;IAED,iBAAiB,SAIhB;IAED,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,QAItE;IAED,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,QAI5D;IAED,mBAAmB,CAAC,KAAK,EAAE,MAAM,QAEhC;IAED,qBAAqB,CAAC,KAAK,SAAI,QAE9B;IAED,sCAAsC,CAAC,MAAM,EAAE,MAAM,QAIpD;IAED,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAW7C;IAEK,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB3F;IAED,uBAAuB,SAEtB;IAED,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,QAIxC;IAED,+BAA+B,SAE9B;IAED,8BAA8B,CAC5B,SAAS,EAAE,oBAAoB,GAAG,8BAA8B,GAAG,eAAe,GAAG,uBAAuB,QAG7G;IAED,8BAA8B,CAAC,MAAM,CAAC,EAAE,MAAM,QAI7C;IAED,qBAAqB,CAAC,WAAW,EAAE,MAAM,QAExC;IAED;;;OAGG;IACH,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,QAkHvD;CACF"}
|
|
@@ -8,6 +8,7 @@ export class SequencerMetrics {
|
|
|
8
8
|
blockBuildDuration;
|
|
9
9
|
blockBuildManaPerSecond;
|
|
10
10
|
stateTransitionBufferDuration;
|
|
11
|
+
stateDuration;
|
|
11
12
|
// these are gauges because for individual sequencers building a block is not something that happens often enough to warrant a histogram
|
|
12
13
|
timeToCollectAttestations;
|
|
13
14
|
allowanceToCollectAttestations;
|
|
@@ -58,6 +59,7 @@ export class SequencerMetrics {
|
|
|
58
59
|
this.blockBuildManaPerSecond = this.meter.createGauge(Metrics.SEQUENCER_BLOCK_BUILD_MANA_PER_SECOND);
|
|
59
60
|
this.blockInterBlockTime = this.meter.createHistogram(Metrics.SEQUENCER_BLOCK_INTER_BLOCK_TIME);
|
|
60
61
|
this.stateTransitionBufferDuration = this.meter.createHistogram(Metrics.SEQUENCER_STATE_TRANSITION_BUFFER_DURATION);
|
|
62
|
+
this.stateDuration = this.meter.createHistogram(Metrics.SEQUENCER_STATE_DURATION);
|
|
61
63
|
this.rewards = this.meter.createGauge(Metrics.SEQUENCER_CURRENT_SLOT_REWARDS);
|
|
62
64
|
this.slots = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_SLOT_COUNT);
|
|
63
65
|
/**
|
|
@@ -158,6 +160,11 @@ export class SequencerMetrics {
|
|
|
158
160
|
[Attributes.SEQUENCER_STATE]: state
|
|
159
161
|
});
|
|
160
162
|
}
|
|
163
|
+
recordStateDuration(durationMs, state) {
|
|
164
|
+
this.stateDuration.record(Math.ceil(durationMs), {
|
|
165
|
+
[Attributes.SEQUENCER_STATE]: state
|
|
166
|
+
});
|
|
167
|
+
}
|
|
161
168
|
recordPipelineDepth(depth) {
|
|
162
169
|
this.pipelineDepth.record(depth);
|
|
163
170
|
}
|
|
@@ -3,12 +3,14 @@ import { type RollupContract } from '@aztec/ethereum/contracts';
|
|
|
3
3
|
import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
6
7
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
7
8
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
8
9
|
import type { P2P } from '@aztec/p2p';
|
|
9
10
|
import type { SlasherClientInterface } from '@aztec/slasher';
|
|
10
11
|
import type { BlockData, L2BlockSink, L2BlockSource, ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
11
12
|
import type { Checkpoint, ProposedCheckpointData } from '@aztec/stdlib/checkpoint';
|
|
13
|
+
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
12
14
|
import { type ResolvedSequencerConfig, type SequencerConfig, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
13
15
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
14
16
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
@@ -46,11 +48,14 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
46
48
|
protected epochCache: EpochCache;
|
|
47
49
|
protected rollupContract: RollupContract;
|
|
48
50
|
protected telemetry: TelemetryClient;
|
|
49
|
-
protected log:
|
|
51
|
+
protected log: Logger;
|
|
50
52
|
private runningPromise?;
|
|
51
53
|
private state;
|
|
54
|
+
private stateSlotNumber;
|
|
55
|
+
private stateEnteredAtMs;
|
|
52
56
|
private metrics;
|
|
53
57
|
private checkpointProposalJobMetrics;
|
|
58
|
+
private readonly stateLog;
|
|
54
59
|
/** The last slot for which we attempted to perform our voting duties with degraded block production */
|
|
55
60
|
private lastSlotForFallbackVote;
|
|
56
61
|
/** The last slot for which we logged "no committee" warning, to avoid spam */
|
|
@@ -67,7 +72,8 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
67
72
|
protected timetable: SequencerTimetable;
|
|
68
73
|
/** Config for the sequencer */
|
|
69
74
|
protected config: ResolvedSequencerConfig;
|
|
70
|
-
|
|
75
|
+
private readonly signatureContext;
|
|
76
|
+
constructor(publisherFactory: SequencerPublisherFactory, validatorClient: ValidatorClient, globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer, slasherClient: SlasherClientInterface | undefined, l2BlockSource: L2BlockSource & L2BlockSink, l1ToL2MessageSource: L1ToL2MessageSource, checkpointsBuilder: FullNodeCheckpointsBuilder, l1Constants: SequencerRollupConstants, dateProvider: DateProvider, epochCache: EpochCache, rollupContract: RollupContract, config: SequencerConfig & Pick<ChainConfig, 'l1ChainId' | 'l1Contracts'>, telemetry?: TelemetryClient, log?: Logger);
|
|
71
77
|
/** Updates sequencer config by the defined values and updates the timetable */
|
|
72
78
|
updateConfig(config: Partial<SequencerConfig>): void;
|
|
73
79
|
/** Initializes the sequencer (precomputes tables). Takes about 3s. */
|
|
@@ -175,7 +181,7 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
175
181
|
feeRecipient?: import("@aztec/stdlib/aztec-address").AztecAddress | undefined;
|
|
176
182
|
acvmWorkingDirectory?: string | undefined;
|
|
177
183
|
acvmBinaryPath?: string | undefined;
|
|
178
|
-
txPublicSetupAllowListExtend?: import("@aztec/stdlib/
|
|
184
|
+
txPublicSetupAllowListExtend?: import("@aztec/stdlib/config").AllowedElement[] | undefined;
|
|
179
185
|
governanceProposerPayload?: EthAddress | undefined;
|
|
180
186
|
enforceTimeTable: boolean;
|
|
181
187
|
l1PublishingTime?: number | undefined;
|
|
@@ -198,6 +204,7 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
198
204
|
skipPushProposedBlocksToArchiver: boolean;
|
|
199
205
|
minBlocksForCheckpoint?: number | undefined;
|
|
200
206
|
skipPublishingCheckpointsPercent: number;
|
|
207
|
+
skipBroadcastProposals?: boolean | undefined;
|
|
201
208
|
};
|
|
202
209
|
private get l1PublishingTime();
|
|
203
210
|
}
|
|
@@ -212,4 +219,4 @@ type SequencerSyncCheckResult = {
|
|
|
212
219
|
syncedL2Slot: SlotNumber;
|
|
213
220
|
pendingChainValidationStatus: ValidateCheckpointResult;
|
|
214
221
|
};
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQW9CLEtBQUssY0FBYyxFQUE4QixNQUFNLDJCQUEyQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxlQUFlLEVBRXBCLEtBQUssc0JBQXNCLEVBQzVCLE1BQU0saUNBQWlDLENBQUM7QUFD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAoB,KAAK,cAAc,EAA8B,MAAM,2BAA2B,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEzG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|