@aztec/sequencer-client 0.0.1-commit.8f9871590 → 0.0.1-commit.9117c5f5a

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.
Files changed (60) hide show
  1. package/dest/client/sequencer-client.d.ts +12 -7
  2. package/dest/client/sequencer-client.d.ts.map +1 -1
  3. package/dest/client/sequencer-client.js +15 -4
  4. package/dest/config.d.ts +3 -3
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +13 -4
  7. package/dest/global_variable_builder/global_builder.d.ts +2 -4
  8. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  9. package/dest/publisher/config.d.ts +35 -17
  10. package/dest/publisher/config.d.ts.map +1 -1
  11. package/dest/publisher/config.js +106 -42
  12. package/dest/publisher/index.d.ts +2 -1
  13. package/dest/publisher/index.d.ts.map +1 -1
  14. package/dest/publisher/l1_tx_failed_store/factory.d.ts +11 -0
  15. package/dest/publisher/l1_tx_failed_store/factory.d.ts.map +1 -0
  16. package/dest/publisher/l1_tx_failed_store/factory.js +22 -0
  17. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +59 -0
  18. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -0
  19. package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +1 -0
  20. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +15 -0
  21. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +1 -0
  22. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +34 -0
  23. package/dest/publisher/l1_tx_failed_store/index.d.ts +4 -0
  24. package/dest/publisher/l1_tx_failed_store/index.d.ts.map +1 -0
  25. package/dest/publisher/l1_tx_failed_store/index.js +2 -0
  26. package/dest/publisher/sequencer-publisher-factory.d.ts +11 -3
  27. package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
  28. package/dest/publisher/sequencer-publisher-factory.js +13 -2
  29. package/dest/publisher/sequencer-publisher.d.ts +15 -7
  30. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  31. package/dest/publisher/sequencer-publisher.js +244 -24
  32. package/dest/sequencer/checkpoint_proposal_job.d.ts +1 -1
  33. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
  34. package/dest/sequencer/checkpoint_proposal_job.js +34 -8
  35. package/dest/sequencer/metrics.d.ts +13 -5
  36. package/dest/sequencer/metrics.d.ts.map +1 -1
  37. package/dest/sequencer/metrics.js +32 -10
  38. package/dest/sequencer/sequencer.d.ts +15 -7
  39. package/dest/sequencer/sequencer.d.ts.map +1 -1
  40. package/dest/sequencer/sequencer.js +23 -25
  41. package/dest/sequencer/timetable.js +1 -1
  42. package/dest/test/index.d.ts +3 -5
  43. package/dest/test/index.d.ts.map +1 -1
  44. package/package.json +28 -28
  45. package/src/client/sequencer-client.ts +25 -7
  46. package/src/config.ts +17 -8
  47. package/src/global_variable_builder/global_builder.ts +1 -1
  48. package/src/publisher/config.ts +121 -43
  49. package/src/publisher/index.ts +3 -0
  50. package/src/publisher/l1_tx_failed_store/factory.ts +32 -0
  51. package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +55 -0
  52. package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +46 -0
  53. package/src/publisher/l1_tx_failed_store/index.ts +3 -0
  54. package/src/publisher/sequencer-publisher-factory.ts +23 -6
  55. package/src/publisher/sequencer-publisher.ts +214 -31
  56. package/src/sequencer/checkpoint_proposal_job.ts +53 -9
  57. package/src/sequencer/metrics.ts +39 -13
  58. package/src/sequencer/sequencer.ts +31 -30
  59. package/src/sequencer/timetable.ts +1 -1
  60. package/src/test/index.ts +2 -4
@@ -383,13 +383,15 @@ import { pick } from '@aztec/foundation/collection';
383
383
  import { EthAddress } from '@aztec/foundation/eth-address';
384
384
  import { Signature } from '@aztec/foundation/eth-signature';
385
385
  import { createLogger } from '@aztec/foundation/log';
386
+ import { makeBackoff, retry } from '@aztec/foundation/retry';
386
387
  import { bufferToHex } from '@aztec/foundation/string';
387
388
  import { Timer } from '@aztec/foundation/timer';
388
389
  import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
389
390
  import { encodeSlashConsensusVotes } from '@aztec/slasher';
390
391
  import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
391
392
  import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
392
- import { encodeFunctionData, toHex } from 'viem';
393
+ import { encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
394
+ import { createL1TxFailedStore } from './l1_tx_failed_store/index.js';
393
395
  import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
394
396
  export const Actions = [
395
397
  'invalidate-by-invalid-attestation',
@@ -429,10 +431,12 @@ export class SequencerPublisher {
429
431
  interrupted;
430
432
  metrics;
431
433
  epochCache;
434
+ failedTxStore;
432
435
  governanceLog;
433
436
  slashingLog;
434
437
  lastActions;
435
438
  isPayloadEmptyCache;
439
+ payloadProposedCache;
436
440
  log;
437
441
  ethereumSlotDuration;
438
442
  blobClient;
@@ -457,6 +461,7 @@ export class SequencerPublisher {
457
461
  this.slashingLog = createLogger('sequencer:publisher:slashing');
458
462
  this.lastActions = {};
459
463
  this.isPayloadEmptyCache = new Map();
464
+ this.payloadProposedCache = new Set();
460
465
  this.requests = [];
461
466
  this.log = deps.log ?? createLogger('sequencer:publisher');
462
467
  this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
@@ -482,6 +487,24 @@ export class SequencerPublisher {
482
487
  }
483
488
  // Initialize fee asset price oracle
484
489
  this.feeAssetPriceOracle = new FeeAssetPriceOracle(this.l1TxUtils.client, this.rollupContract, createLogger('sequencer:publisher:price-oracle'));
490
+ // Initialize failed L1 tx store (optional, for test networks)
491
+ this.failedTxStore = createL1TxFailedStore(config.l1TxFailedStore, this.log);
492
+ }
493
+ /**
494
+ * Backs up a failed L1 transaction to the configured store for debugging.
495
+ * Does nothing if no store is configured.
496
+ */ backupFailedTx(failedTx) {
497
+ if (!this.failedTxStore) {
498
+ return;
499
+ }
500
+ const tx = {
501
+ ...failedTx,
502
+ timestamp: Date.now()
503
+ };
504
+ // Fire and forget - don't block on backup
505
+ void this.failedTxStore.then((store)=>store?.saveFailedTx(tx)).catch((err)=>{
506
+ this.log.warn(`Failed to backup failed L1 tx to store`, err);
507
+ });
485
508
  }
486
509
  getRollupContract() {
487
510
  return this.rollupContract;
@@ -627,12 +650,31 @@ export class SequencerPublisher {
627
650
  // This ensures the committee gets precomputed correctly
628
651
  validRequests.sort((a, b)=>compareActions(a.action, b.action));
629
652
  try {
653
+ // Capture context for failed tx backup before sending
654
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
655
+ const multicallData = encodeFunctionData({
656
+ abi: multicall3Abi,
657
+ functionName: 'aggregate3',
658
+ args: [
659
+ validRequests.map((r)=>({
660
+ target: r.request.to,
661
+ callData: r.request.data,
662
+ allowFailure: true
663
+ }))
664
+ ]
665
+ });
666
+ const blobDataHex = blobConfig?.blobs?.map((b)=>toHex(b));
630
667
  this.log.debug('Forwarding transactions', {
631
668
  validRequests: validRequests.map((request)=>request.action),
632
669
  txConfig
633
670
  });
634
671
  const result = await Multicall3.forward(validRequests.map((request)=>request.request), this.l1TxUtils, txConfig, blobConfig, this.rollupContract.address, this.log);
635
- const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result);
672
+ const txContext = {
673
+ multicallData,
674
+ blobData: blobDataHex,
675
+ l1BlockNumber
676
+ };
677
+ const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result, txContext);
636
678
  return {
637
679
  result,
638
680
  expiredActions,
@@ -652,10 +694,33 @@ export class SequencerPublisher {
652
694
  }
653
695
  }
654
696
  }
655
- callbackBundledTransactions(requests, result) {
697
+ callbackBundledTransactions(requests, result, txContext) {
656
698
  const actionsListStr = requests.map((r)=>r.action).join(', ');
657
699
  if (result instanceof FormattedViemError) {
658
700
  this.log.error(`Failed to publish bundled transactions (${actionsListStr})`, result);
701
+ this.backupFailedTx({
702
+ id: keccak256(txContext.multicallData),
703
+ failureType: 'send-error',
704
+ request: {
705
+ to: MULTI_CALL_3_ADDRESS,
706
+ data: txContext.multicallData
707
+ },
708
+ blobData: txContext.blobData,
709
+ l1BlockNumber: txContext.l1BlockNumber.toString(),
710
+ error: {
711
+ message: result.message,
712
+ name: result.name
713
+ },
714
+ context: {
715
+ actions: requests.map((r)=>r.action),
716
+ requests: requests.map((r)=>({
717
+ action: r.action,
718
+ to: r.request.to,
719
+ data: r.request.data
720
+ })),
721
+ sender: this.getSenderAddress().toString()
722
+ }
723
+ });
659
724
  return {
660
725
  failedActions: requests.map((r)=>r.action)
661
726
  };
@@ -673,6 +738,37 @@ export class SequencerPublisher {
673
738
  failedActions.push(request.action);
674
739
  }
675
740
  }
741
+ // Single backup for the whole reverted tx
742
+ if (failedActions.length > 0 && result?.receipt?.status === 'reverted') {
743
+ this.backupFailedTx({
744
+ id: result.receipt.transactionHash,
745
+ failureType: 'revert',
746
+ request: {
747
+ to: MULTI_CALL_3_ADDRESS,
748
+ data: txContext.multicallData
749
+ },
750
+ blobData: txContext.blobData,
751
+ l1BlockNumber: result.receipt.blockNumber.toString(),
752
+ receipt: {
753
+ transactionHash: result.receipt.transactionHash,
754
+ blockNumber: result.receipt.blockNumber.toString(),
755
+ gasUsed: (result.receipt.gasUsed ?? 0n).toString(),
756
+ status: 'reverted'
757
+ },
758
+ error: {
759
+ message: result.errorMsg ?? 'Transaction reverted'
760
+ },
761
+ context: {
762
+ actions: failedActions,
763
+ requests: requests.filter((r)=>failedActions.includes(r.action)).map((r)=>({
764
+ action: r.action,
765
+ to: r.request.to,
766
+ data: r.request.data
767
+ })),
768
+ sender: this.getSenderAddress().toString()
769
+ }
770
+ });
771
+ }
676
772
  return {
677
773
  successfulActions,
678
774
  failedActions
@@ -775,6 +871,7 @@ export class SequencerPublisher {
775
871
  ...logData,
776
872
  request
777
873
  });
874
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
778
875
  try {
779
876
  const { gasUsed } = await this.l1TxUtils.simulate(request, undefined, undefined, mergeAbis([
780
877
  request.abi ?? [],
@@ -817,6 +914,27 @@ export class SequencerPublisher {
817
914
  }
818
915
  // Otherwise, throw. We cannot build the next checkpoint if we cannot invalidate the previous one.
819
916
  this.log.error(`Simulation for invalidate checkpoint ${checkpointNumber} failed`, viemError, logData);
917
+ this.backupFailedTx({
918
+ id: keccak256(request.data),
919
+ failureType: 'simulation',
920
+ request: {
921
+ to: request.to,
922
+ data: request.data,
923
+ value: request.value?.toString()
924
+ },
925
+ l1BlockNumber: l1BlockNumber.toString(),
926
+ error: {
927
+ message: viemError.message,
928
+ name: viemError.name
929
+ },
930
+ context: {
931
+ actions: [
932
+ `invalidate-${reason}`
933
+ ],
934
+ checkpointNumber,
935
+ sender: this.getSenderAddress().toString()
936
+ }
937
+ });
820
938
  throw new Error(`Failed to simulate invalidate checkpoint ${checkpointNumber}`, {
821
939
  cause: viemError
822
940
  });
@@ -844,22 +962,8 @@ export class SequencerPublisher {
844
962
  }
845
963
  /** Simulates `propose` to make sure that the checkpoint is valid for submission */ async validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, options) {
846
964
  const ts = BigInt((await this.l1TxUtils.getBlock()).timestamp + this.ethereumSlotDuration);
847
- // TODO(palla/mbps): This should not be needed, there's no flow where we propose with zero attestations. Or is there?
848
- // If we have no attestations, we still need to provide the empty attestations
849
- // so that the committee is recalculated correctly
850
- // const ignoreSignatures = attestationsAndSigners.attestations.length === 0;
851
- // if (ignoreSignatures) {
852
- // const { committee } = await this.epochCache.getCommittee(block.header.globalVariables.slotNumber);
853
- // if (!committee) {
854
- // this.log.warn(`No committee found for slot ${block.header.globalVariables.slotNumber}`);
855
- // throw new Error(`No committee found for slot ${block.header.globalVariables.slotNumber}`);
856
- // }
857
- // attestationsAndSigners.attestations = committee.map(committeeMember =>
858
- // CommitteeAttestation.fromAddress(committeeMember),
859
- // );
860
- // }
861
965
  const blobFields = checkpoint.toBlobFields();
862
- const blobs = getBlobsPerL1Block(blobFields);
966
+ const blobs = await getBlobsPerL1Block(blobFields);
863
967
  const blobInput = getPrefixedEthBlobCommitments(blobs);
864
968
  const args = [
865
969
  {
@@ -901,6 +1005,28 @@ export class SequencerPublisher {
901
1005
  this.log.warn(`Skipping vote cast for payload with empty code`);
902
1006
  return false;
903
1007
  }
1008
+ // Check if payload was already submitted to governance
1009
+ const cacheKey = payload.toString();
1010
+ if (!this.payloadProposedCache.has(cacheKey)) {
1011
+ try {
1012
+ const l1StartBlock = await this.rollupContract.getL1StartBlock();
1013
+ const proposed = await retry(()=>base.hasPayloadBeenProposed(payload.toString(), l1StartBlock), 'Check if payload was proposed', makeBackoff([
1014
+ 0,
1015
+ 1,
1016
+ 2
1017
+ ]), this.log, true);
1018
+ if (proposed) {
1019
+ this.payloadProposedCache.add(cacheKey);
1020
+ }
1021
+ } catch (err) {
1022
+ this.log.warn(`Failed to check if payload ${payload} was proposed after retries, skipping signal`, err);
1023
+ return false;
1024
+ }
1025
+ }
1026
+ if (this.payloadProposedCache.has(cacheKey)) {
1027
+ this.log.info(`Payload ${payload} was already proposed to governance, stopping signals`);
1028
+ return false;
1029
+ }
904
1030
  const cachedLastVote = this.lastActions[signalType];
905
1031
  this.lastActions[signalType] = slotNumber;
906
1032
  const action = signalType;
@@ -911,6 +1037,7 @@ export class SequencerPublisher {
911
1037
  signer: this.l1TxUtils.client.account?.address,
912
1038
  lastValidL2Slot: slotNumber
913
1039
  });
1040
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
914
1041
  try {
915
1042
  await this.l1TxUtils.simulate(request, {
916
1043
  time: timestamp
@@ -922,7 +1049,29 @@ export class SequencerPublisher {
922
1049
  request
923
1050
  });
924
1051
  } catch (err) {
925
- this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, err);
1052
+ const viemError = formatViemError(err);
1053
+ this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError);
1054
+ this.backupFailedTx({
1055
+ id: keccak256(request.data),
1056
+ failureType: 'simulation',
1057
+ request: {
1058
+ to: request.to,
1059
+ data: request.data,
1060
+ value: request.value?.toString()
1061
+ },
1062
+ l1BlockNumber: l1BlockNumber.toString(),
1063
+ error: {
1064
+ message: viemError.message,
1065
+ name: viemError.name
1066
+ },
1067
+ context: {
1068
+ actions: [
1069
+ action
1070
+ ],
1071
+ slot: slotNumber,
1072
+ sender: this.getSenderAddress().toString()
1073
+ }
1074
+ });
926
1075
  // Yes, we enqueue the request anyway, in case there was a bug with the simulation itself
927
1076
  }
928
1077
  // TODO(palla/slash): All votes (governance and slashing) should txTimeoutAt at the end of the slot.
@@ -1061,7 +1210,7 @@ export class SequencerPublisher {
1061
1210
  /** Simulates and enqueues a proposal for a checkpoint on L1 */ async enqueueProposeCheckpoint(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, opts = {}) {
1062
1211
  const checkpointHeader = checkpoint.header;
1063
1212
  const blobFields = checkpoint.toBlobFields();
1064
- const blobs = getBlobsPerL1Block(blobFields);
1213
+ const blobs = await getBlobsPerL1Block(blobFields);
1065
1214
  const proposeTxArgs = {
1066
1215
  header: checkpointHeader,
1067
1216
  archive: checkpoint.archive.root.toBuffer(),
@@ -1144,6 +1293,7 @@ export class SequencerPublisher {
1144
1293
  const cachedLastActionSlot = this.lastActions[action];
1145
1294
  this.lastActions[action] = slotNumber;
1146
1295
  this.log.debug(`Simulating ${action} for slot ${slotNumber}`, logData);
1296
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1147
1297
  let gasUsed;
1148
1298
  const simulateAbi = mergeAbis([
1149
1299
  request.abi ?? [],
@@ -1161,6 +1311,27 @@ export class SequencerPublisher {
1161
1311
  } catch (err) {
1162
1312
  const viemError = formatViemError(err, simulateAbi);
1163
1313
  this.log.error(`Simulation for ${action} at ${slotNumber} failed`, viemError, logData);
1314
+ this.backupFailedTx({
1315
+ id: keccak256(request.data),
1316
+ failureType: 'simulation',
1317
+ request: {
1318
+ to: request.to,
1319
+ data: request.data,
1320
+ value: request.value?.toString()
1321
+ },
1322
+ l1BlockNumber: l1BlockNumber.toString(),
1323
+ error: {
1324
+ message: viemError.message,
1325
+ name: viemError.name
1326
+ },
1327
+ context: {
1328
+ actions: [
1329
+ action
1330
+ ],
1331
+ slot: slotNumber,
1332
+ sender: this.getSenderAddress().toString()
1333
+ }
1334
+ });
1164
1335
  return false;
1165
1336
  }
1166
1337
  // We issued the simulation against the rollup contract, so we need to account for the overhead of the multicall3
@@ -1239,10 +1410,38 @@ export class SequencerPublisher {
1239
1410
  }, {}, {
1240
1411
  blobs: encodedData.blobs.map((b)=>b.data),
1241
1412
  kzg
1242
- }).catch((err)=>{
1243
- const { message, metaMessages } = formatViemError(err);
1244
- this.log.error(`Failed to validate blobs`, message, {
1245
- metaMessages
1413
+ }).catch(async (err)=>{
1414
+ const viemError = formatViemError(err);
1415
+ this.log.error(`Failed to validate blobs`, viemError.message, {
1416
+ metaMessages: viemError.metaMessages
1417
+ });
1418
+ const validateBlobsData = encodeFunctionData({
1419
+ abi: RollupAbi,
1420
+ functionName: 'validateBlobs',
1421
+ args: [
1422
+ blobInput
1423
+ ]
1424
+ });
1425
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1426
+ this.backupFailedTx({
1427
+ id: keccak256(validateBlobsData),
1428
+ failureType: 'simulation',
1429
+ request: {
1430
+ to: this.rollupContract.address,
1431
+ data: validateBlobsData
1432
+ },
1433
+ blobData: encodedData.blobs.map((b)=>toHex(b.data)),
1434
+ l1BlockNumber: l1BlockNumber.toString(),
1435
+ error: {
1436
+ message: viemError.message,
1437
+ name: viemError.name
1438
+ },
1439
+ context: {
1440
+ actions: [
1441
+ 'validate-blobs'
1442
+ ],
1443
+ sender: this.getSenderAddress().toString()
1444
+ }
1246
1445
  });
1247
1446
  throw new Error('Failed to validate blobs');
1248
1447
  });
@@ -1302,6 +1501,7 @@ export class SequencerPublisher {
1302
1501
  balance: 10n * WEI_CONST * WEI_CONST
1303
1502
  });
1304
1503
  }
1504
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1305
1505
  const simulationResult = await this.l1TxUtils.simulate({
1306
1506
  to: this.rollupContract.address,
1307
1507
  data: rollupData,
@@ -1329,6 +1529,26 @@ export class SequencerPublisher {
1329
1529
  };
1330
1530
  }
1331
1531
  this.log.error(`Failed to simulate propose tx`, viemError);
1532
+ this.backupFailedTx({
1533
+ id: keccak256(rollupData),
1534
+ failureType: 'simulation',
1535
+ request: {
1536
+ to: this.rollupContract.address,
1537
+ data: rollupData
1538
+ },
1539
+ l1BlockNumber: l1BlockNumber.toString(),
1540
+ error: {
1541
+ message: viemError.message,
1542
+ name: viemError.name
1543
+ },
1544
+ context: {
1545
+ actions: [
1546
+ 'propose'
1547
+ ],
1548
+ slot: Number(args[0].header.slotNumber),
1549
+ sender: this.getSenderAddress().toString()
1550
+ }
1551
+ });
1332
1552
  throw err;
1333
1553
  });
1334
1554
  return {
@@ -99,4 +99,4 @@ export declare class CheckpointProposalJob implements Traceable {
99
99
  private getSecondsIntoSlot;
100
100
  getPublisher(): SequencerPublisher;
101
101
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQUd6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFHTCxPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNELE9BQU8sRUFHTCxLQUFLLHVCQUF1QixFQUM1QixLQUFLLHNCQUFzQixFQUM1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUFtQyxNQUFNLHlCQUF5QixDQUFDO0FBSXBHLE9BQU8sRUFBaUIsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxFQUFjLEtBQUssU0FB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
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQUd6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFHTCxPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNELE9BQU8sRUFHTCxLQUFLLHVCQUF1QixFQUM1QixLQUFLLHNCQUFzQixFQUM1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUFtQyxNQUFNLHlCQUF5QixDQUFDO0FBSXBHLE9BQU8sRUFBaUIsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxFQUFjLEtBQUssU0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}
@@ -451,7 +451,7 @@ import { getSlotStartBuildTimestamp } from '@aztec/stdlib/epoch-helpers';
451
451
  import { Gas } from '@aztec/stdlib/gas';
452
452
  import { NoValidTxsError } from '@aztec/stdlib/interfaces/server';
453
453
  import { computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
454
- import { orderAttestations } from '@aztec/stdlib/p2p';
454
+ import { orderAttestations, trimAttestations } from '@aztec/stdlib/p2p';
455
455
  import { AttestationTimeoutError } from '@aztec/stdlib/validators';
456
456
  import { Attributes, trackSpan } from '@aztec/telemetry-client';
457
457
  import { DutyAlreadySignedError, SlashingProtectionError } from '@aztec/validator-ha-signer/errors';
@@ -590,7 +590,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
590
590
  // Wait until the voting promises have resolved, so all requests are enqueued (not sent)
591
591
  await Promise.all(votesPromises);
592
592
  if (checkpoint) {
593
- this.metrics.recordBlockProposalSuccess();
593
+ this.metrics.recordCheckpointProposalSuccess();
594
594
  }
595
595
  // Do not post anything to L1 if we are fishermen, but do perform L1 fee analysis
596
596
  if (this.config.fishermanMode) {
@@ -640,13 +640,12 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
640
640
  const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(this.checkpointNumber);
641
641
  const inHash = computeInHashFromL1ToL2Messages(l1ToL2Messages);
642
642
  // Collect the out hashes of all the checkpoints before this one in the same epoch
643
- const previousCheckpoints = (await this.l2BlockSource.getCheckpointsForEpoch(this.epoch)).filter((c)=>c.number < this.checkpointNumber);
644
- const previousCheckpointOutHashes = previousCheckpoints.map((c)=>c.getCheckpointOutHash());
643
+ const previousCheckpointOutHashes = (await this.l2BlockSource.getCheckpointsDataForEpoch(this.epoch)).filter((c)=>c.checkpointNumber < this.checkpointNumber).map((c)=>c.checkpointOutHash);
645
644
  // Get the fee asset price modifier from the oracle
646
645
  const feeAssetPriceModifier = await this.publisher.getFeeAssetPriceModifier();
647
646
  const fork = _ts_add_disposable_resource(env, await this.worldState.fork(this.syncedToBlockNumber, {
648
647
  closeDelayMs: 12_000
649
- }), false);
648
+ }), true);
650
649
  // Create checkpoint builder for the entire slot
651
650
  const checkpointBuilder = await this.checkpointsBuilder.startCheckpoint(this.checkpointNumber, checkpointGlobalVariables, feeAssetPriceModifier, l1ToL2Messages, previousCheckpointOutHashes, fork, this.log.getBindings());
652
651
  // Options for the validator client when creating block and checkpoint proposals
@@ -660,6 +659,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
660
659
  };
661
660
  let blocksInCheckpoint = [];
662
661
  let blockPendingBroadcast = undefined;
662
+ const checkpointBuildTimer = new Timer();
663
663
  try {
664
664
  // Main loop: build blocks for the checkpoint
665
665
  const result = await this.buildBlocksForCheckpoint(checkpointBuilder, checkpointGlobalVariables.timestamp, inHash, blockProposalOptions);
@@ -683,10 +683,21 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
683
683
  });
684
684
  return undefined;
685
685
  }
686
+ const minBlocksForCheckpoint = this.config.minBlocksForCheckpoint;
687
+ if (minBlocksForCheckpoint !== undefined && blocksInCheckpoint.length < minBlocksForCheckpoint) {
688
+ this.log.warn(`Checkpoint has fewer blocks than minimum (${blocksInCheckpoint.length} < ${minBlocksForCheckpoint}), skipping proposal`, {
689
+ slot: this.slot,
690
+ blocksBuilt: blocksInCheckpoint.length,
691
+ minBlocksForCheckpoint
692
+ });
693
+ return undefined;
694
+ }
686
695
  // Assemble and broadcast the checkpoint proposal, including the last block that was not
687
696
  // broadcasted yet, and wait to collect the committee attestations.
688
697
  this.setStateFn(SequencerState.ASSEMBLING_CHECKPOINT, this.slot);
689
698
  const checkpoint = await checkpointBuilder.completeCheckpoint();
699
+ // Record checkpoint-level build metrics
700
+ this.metrics.recordCheckpointBuild(checkpointBuildTimer.ms(), blocksInCheckpoint.length, checkpoint.getStats().txCount, Number(checkpoint.header.totalManaUsed.toBigInt()));
690
701
  // Do not collect attestations nor publish to L1 in fisherman mode
691
702
  if (this.config.fishermanMode) {
692
703
  this.log.info(`Built checkpoint for slot ${this.slot} with ${blocksInCheckpoint.length} blocks. ` + `Skipping proposal in fisherman mode.`, {
@@ -729,6 +740,14 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
729
740
  const aztecSlotDuration = this.l1Constants.slotDuration;
730
741
  const slotStartBuildTimestamp = this.getSlotStartBuildTimestamp();
731
742
  const txTimeoutAt = new Date((slotStartBuildTimestamp + aztecSlotDuration) * 1000);
743
+ // If we have been configured to potentially skip publishing checkpoint then roll the dice here
744
+ if (this.config.skipPublishingCheckpointsPercent !== undefined && this.config.skipPublishingCheckpointsPercent > 0) {
745
+ const result = Math.max(0, randomInt(100));
746
+ if (result < this.config.skipPublishingCheckpointsPercent) {
747
+ this.log.warn(`Skipping publishing proposal for checkpoint ${checkpoint.number}. Configured percentage: ${this.config.skipPublishingCheckpointsPercent}, generated value: ${result}`);
748
+ return checkpoint;
749
+ }
750
+ }
732
751
  await this.publisher.enqueueProposeCheckpoint(checkpoint, attestations, attestationsSignature, {
733
752
  txTimeoutAt,
734
753
  forcePendingCheckpointNumber: this.invalidateCheckpoint?.forcePendingCheckpointNumber
@@ -738,7 +757,8 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
738
757
  env.error = e;
739
758
  env.hasError = true;
740
759
  } finally{
741
- _ts_dispose_resources(env);
760
+ const result = _ts_dispose_resources(env);
761
+ if (result) await result;
742
762
  }
743
763
  } catch (err) {
744
764
  if (err && (err instanceof DutyAlreadySignedError || err instanceof SlashingProtectionError)) {
@@ -1053,8 +1073,14 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
1053
1073
  try {
1054
1074
  const attestations = await this.validatorClient.collectAttestations(proposal, numberOfRequiredAttestations, attestationDeadline);
1055
1075
  collectedAttestationsCount = attestations.length;
1076
+ // Trim attestations to minimum required to save L1 calldata gas
1077
+ const localAddresses = this.validatorClient.getValidatorAddresses();
1078
+ const trimmed = trimAttestations(attestations, numberOfRequiredAttestations, this.attestorAddress, localAddresses);
1079
+ if (trimmed.length < attestations.length) {
1080
+ this.log.debug(`Trimmed attestations from ${attestations.length} to ${trimmed.length} for L1 submission`);
1081
+ }
1056
1082
  // Rollup contract requires that the signatures are provided in the order of the committee
1057
- const sorted = orderAttestations(attestations, committee);
1083
+ const sorted = orderAttestations(trimmed, committee);
1058
1084
  // Manipulate the attestations if we've been configured to do so
1059
1085
  if (this.config.injectFakeAttestation || this.config.shuffleAttestationOrdering) {
1060
1086
  return this.manipulateAttestations(proposal.slotNumber, epoch, seed, committee, sorted);
@@ -1148,7 +1174,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
1148
1174
  slot: this.slot,
1149
1175
  feeAnalysisId: feeAnalysis?.id
1150
1176
  });
1151
- this.metrics.recordBlockProposalFailed('block_build_failed');
1177
+ this.metrics.recordCheckpointProposalFailed('block_build_failed');
1152
1178
  }
1153
1179
  this.publisher.clearPendingRequests();
1154
1180
  }
@@ -21,11 +21,16 @@ export declare class SequencerMetrics {
21
21
  private slots;
22
22
  private filledSlots;
23
23
  private blockProposalFailed;
24
- private blockProposalSuccess;
25
- private blockProposalPrecheckFailed;
24
+ private checkpointProposalSuccess;
25
+ private checkpointPrecheckFailed;
26
+ private checkpointProposalFailed;
26
27
  private checkpointSuccess;
27
28
  private slashingAttempts;
28
29
  private checkpointAttestationDelay;
30
+ private checkpointBuildDuration;
31
+ private checkpointBlockCount;
32
+ private checkpointTxCount;
33
+ private checkpointTotalMana;
29
34
  private fishermanWouldBeIncluded;
30
35
  private fishermanTimeBeforeBlock;
31
36
  private fishermanPendingBlobTxCount;
@@ -52,8 +57,11 @@ export declare class SequencerMetrics {
52
57
  incFilledSlot(proposer: string, coinbase: Hex | EthAddress | undefined): Promise<void>;
53
58
  recordCheckpointSuccess(): void;
54
59
  recordBlockProposalFailed(reason?: string): void;
55
- recordBlockProposalSuccess(): void;
56
- recordBlockProposalPrecheckFailed(checkType: 'slot_already_taken' | 'rollup_contract_check_failed' | 'slot_mismatch' | 'block_number_mismatch'): void;
60
+ recordCheckpointProposalSuccess(): void;
61
+ recordCheckpointPrecheckFailed(checkType: 'slot_already_taken' | 'rollup_contract_check_failed' | 'slot_mismatch' | 'block_number_mismatch'): void;
62
+ recordCheckpointProposalFailed(reason?: string): void;
63
+ /** Records aggregate metrics for a completed checkpoint build. */
64
+ recordCheckpointBuild(durationMs: number, blockCount: number, txCount: number, totalMana: number): void;
57
65
  recordSlashingAttempt(actionCount: number): void;
58
66
  /**
59
67
  * Records metrics for a completed fisherman fee analysis
@@ -61,4 +69,4 @@ export declare class SequencerMetrics {
61
69
  */
62
70
  recordFishermanFeeAnalysis(analysis: L1FeeAnalysisResult): void;
63
71
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFNTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBR1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR2pELHFCQUFhLGdCQUFnQjtJQStDekIsT0FBTyxDQUFDLE1BQU07SUE5Q2hCLFNBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBUTtJQUVyQixPQUFPLENBQUMsWUFBWSxDQUFnQjtJQUNwQyxPQUFPLENBQUMsa0JBQWtCLENBQVk7SUFDdEMsT0FBTyxDQUFDLHVCQUF1QixDQUFRO0lBQ3ZDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBWTtJQUdqRCxPQUFPLENBQUMseUJBQXlCLENBQVE7SUFDekMsT0FBTyxDQUFDLDhCQUE4QixDQUFRO0lBQzlDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBUTtJQUNsQyxPQUFPLENBQUMsbUJBQW1CLENBQVE7SUFFbkMsT0FBTyxDQUFDLE9BQU8sQ0FBUTtJQUV2QixPQUFPLENBQUMsS0FBSyxDQUFnQjtJQUM3QixPQUFPLENBQUMsV0FBVyxDQUFnQjtJQUVuQyxPQUFPLENBQUMsbUJBQW1CLENBQWdCO0lBQzNDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBZ0I7SUFDNUMsT0FBTyxDQUFDLDJCQUEyQixDQUFnQjtJQUNuRCxPQUFPLENBQUMsaUJBQWlCLENBQWdCO0lBQ3pDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLDBCQUEwQixDQUFZO0lBRzlDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBZ0I7SUFDaEQsT0FBTyxDQUFDLHdCQUF3QixDQUFZO0lBQzVDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBWTtJQUMvQyxPQUFPLENBQUMsNEJBQTRCLENBQVk7SUFDaEQsT0FBTyxDQUFDLHlCQUF5QixDQUFZO0lBQzdDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBWTtJQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQWdCO0lBQy9DLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBWTtJQUM1QyxPQUFPLENBQUMsOEJBQThCLENBQVk7SUFDbEQsT0FBTyxDQUFDLHlCQUF5QixDQUFZO0lBQzdDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBWTtJQUMxQyxPQUFPLENBQUMsNkJBQTZCLENBQVk7SUFDakQsT0FBTyxDQUFDLCtCQUErQixDQUFZO0lBQ25ELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBWTtJQUVqRCxPQUFPLENBQUMsWUFBWSxDQUFDLENBQWE7SUFFbEMsWUFDRSxNQUFNLEVBQUUsZUFBZSxFQUNmLE1BQU0sRUFBRSxjQUFjLEVBQzlCLElBQUksU0FBYyxFQWlIbkI7SUFFTSwwQkFBMEIsQ0FBQyx5QkFBeUIsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFPdkY7SUFFTSxnQ0FBZ0MsQ0FBQyxRQUFRLEVBQUUsTUFBTSxRQUV2RDtJQUVNLDJCQUEyQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFHbkU7SUFFRCxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBTTFEO0lBRUQsaUJBQWlCLFNBSWhCO0lBRUQsNkJBQTZCLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsY0FBYyxRQUl0RTtJQUVELFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBVzdDO0lBRUssYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxVQUFVLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FpQjNGO0lBRUQsdUJBQXVCLFNBRXRCO0lBRUQseUJBQXlCLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxRQUl4QztJQUVELDBCQUEwQixTQUV6QjtJQUVELGlDQUFpQyxDQUMvQixTQUFTLEVBQUUsb0JBQW9CLEdBQUcsOEJBQThCLEdBQUcsZUFBZSxHQUFHLHVCQUF1QixRQUs3RztJQUVELHFCQUFxQixDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0lBRUQ7OztPQUdHO0lBQ0gsMEJBQTBCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixRQWtIdkQ7Q0FDRiJ9
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFNTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBR1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELHFCQUFhLGdCQUFnQjtJQW9EekIsT0FBTyxDQUFDLE1BQU07SUFuRGhCLFNBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBUTtJQUVyQixPQUFPLENBQUMsWUFBWSxDQUFnQjtJQUNwQyxPQUFPLENBQUMsa0JBQWtCLENBQVk7SUFDdEMsT0FBTyxDQUFDLHVCQUF1QixDQUFRO0lBQ3ZDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBWTtJQUdqRCxPQUFPLENBQUMseUJBQXlCLENBQVE7SUFDekMsT0FBTyxDQUFDLDhCQUE4QixDQUFRO0lBQzlDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBUTtJQUNsQyxPQUFPLENBQUMsbUJBQW1CLENBQVE7SUFFbkMsT0FBTyxDQUFDLE9BQU8sQ0FBUTtJQUV2QixPQUFPLENBQUMsS0FBSyxDQUFnQjtJQUM3QixPQUFPLENBQUMsV0FBVyxDQUFnQjtJQUVuQyxPQUFPLENBQUMsbUJBQW1CLENBQWdCO0lBQzND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
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"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"}