@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.
- package/dest/client/sequencer-client.d.ts +12 -7
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +15 -4
- package/dest/config.d.ts +3 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +13 -4
- package/dest/global_variable_builder/global_builder.d.ts +2 -4
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/publisher/config.d.ts +35 -17
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +106 -42
- package/dest/publisher/index.d.ts +2 -1
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/l1_tx_failed_store/factory.d.ts +11 -0
- package/dest/publisher/l1_tx_failed_store/factory.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/factory.js +22 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +59 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +1 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +15 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +34 -0
- package/dest/publisher/l1_tx_failed_store/index.d.ts +4 -0
- package/dest/publisher/l1_tx_failed_store/index.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/index.js +2 -0
- package/dest/publisher/sequencer-publisher-factory.d.ts +11 -3
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.js +13 -2
- package/dest/publisher/sequencer-publisher.d.ts +15 -7
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +244 -24
- package/dest/sequencer/checkpoint_proposal_job.d.ts +1 -1
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +34 -8
- package/dest/sequencer/metrics.d.ts +13 -5
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +32 -10
- package/dest/sequencer/sequencer.d.ts +15 -7
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +23 -25
- package/dest/sequencer/timetable.js +1 -1
- package/dest/test/index.d.ts +3 -5
- package/dest/test/index.d.ts.map +1 -1
- package/package.json +28 -28
- package/src/client/sequencer-client.ts +25 -7
- package/src/config.ts +17 -8
- package/src/global_variable_builder/global_builder.ts +1 -1
- package/src/publisher/config.ts +121 -43
- package/src/publisher/index.ts +3 -0
- package/src/publisher/l1_tx_failed_store/factory.ts +32 -0
- package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +55 -0
- package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +46 -0
- package/src/publisher/l1_tx_failed_store/index.ts +3 -0
- package/src/publisher/sequencer-publisher-factory.ts +23 -6
- package/src/publisher/sequencer-publisher.ts +214 -31
- package/src/sequencer/checkpoint_proposal_job.ts +53 -9
- package/src/sequencer/metrics.ts +39 -13
- package/src/sequencer/sequencer.ts +31 -30
- package/src/sequencer/timetable.ts +1 -1
- 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
|
|
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
|
-
|
|
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
|
|
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,
|
|
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.
|
|
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
|
|
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
|
-
}),
|
|
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(
|
|
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.
|
|
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
|
|
25
|
-
private
|
|
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
|
-
|
|
56
|
-
|
|
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,
|
|
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":"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;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"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"}
|