@aztec/sequencer-client 0.0.1-commit.96bb3f7 → 0.0.1-commit.96dac018d
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 -4
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +17 -14
- 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/global_variable_builder/global_builder.js +2 -2
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +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-metrics.d.ts +1 -1
- package/dest/publisher/sequencer-publisher-metrics.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-metrics.js +12 -4
- package/dest/publisher/sequencer-publisher.d.ts +22 -8
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +297 -47
- package/dest/sequencer/checkpoint_proposal_job.d.ts +34 -9
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +171 -41
- package/dest/sequencer/checkpoint_voter.d.ts +3 -2
- package/dest/sequencer/checkpoint_voter.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_voter.js +34 -10
- package/dest/sequencer/index.d.ts +1 -2
- package/dest/sequencer/index.d.ts.map +1 -1
- package/dest/sequencer/index.js +0 -1
- package/dest/sequencer/metrics.d.ts +17 -5
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +111 -30
- package/dest/sequencer/sequencer.d.ts +31 -13
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +95 -36
- package/dest/sequencer/timetable.d.ts +1 -4
- package/dest/sequencer/timetable.d.ts.map +1 -1
- package/dest/sequencer/timetable.js +1 -4
- package/dest/test/index.d.ts +3 -5
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.d.ts +19 -13
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.js +31 -11
- package/dest/test/utils.d.ts +8 -8
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +12 -11
- package/package.json +30 -28
- package/src/client/sequencer-client.ts +25 -7
- package/src/config.ts +27 -22
- package/src/global_variable_builder/global_builder.ts +3 -3
- package/src/index.ts +1 -6
- 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-metrics.ts +7 -3
- package/src/publisher/sequencer-publisher.ts +274 -53
- package/src/sequencer/checkpoint_proposal_job.ts +243 -59
- package/src/sequencer/checkpoint_voter.ts +32 -7
- package/src/sequencer/index.ts +0 -1
- package/src/sequencer/metrics.ts +124 -32
- package/src/sequencer/sequencer.ts +118 -38
- package/src/sequencer/timetable.ts +6 -5
- package/src/test/index.ts +2 -4
- package/src/test/mock_checkpoint_builder.ts +75 -34
- package/src/test/utils.ts +24 -14
- package/dest/sequencer/block_builder.d.ts +0 -26
- package/dest/sequencer/block_builder.d.ts.map +0 -1
- package/dest/sequencer/block_builder.js +0 -129
- package/src/sequencer/block_builder.ts +0 -216
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint_voter.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_voter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint_voter.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_voter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAbtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAuD;IAC/E,OAAO,CAAC,cAAc,CAAuD;IAE7E,YACmB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,kBAAkB,EAC7B,eAAe,EAAE,UAAU,EAC3B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,sBAAsB,GAAG,SAAS,EACjD,WAAW,EAAE,wBAAwB,EACrC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EAa7B;IAED;;;OAGG;IACH,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAU3E;YAEa,qBAAqB;YAgCrB,mBAAmB;CAiClC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
2
|
+
import { DutyAlreadySignedError } from '@aztec/validator-ha-signer/errors';
|
|
3
|
+
import { DutyType } from '@aztec/validator-ha-signer/types';
|
|
2
4
|
/**
|
|
3
5
|
* Handles governance and slashing voting for a given slot.
|
|
4
6
|
*/ export class CheckpointVoter {
|
|
@@ -12,7 +14,8 @@ import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
|
12
14
|
metrics;
|
|
13
15
|
log;
|
|
14
16
|
slotTimestamp;
|
|
15
|
-
|
|
17
|
+
governanceSigner;
|
|
18
|
+
slashingSigner;
|
|
16
19
|
constructor(slot, publisher, attestorAddress, validatorClient, slasherClient, l1Constants, config, metrics, log){
|
|
17
20
|
this.slot = slot;
|
|
18
21
|
this.publisher = publisher;
|
|
@@ -24,7 +27,18 @@ import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
|
24
27
|
this.metrics = metrics;
|
|
25
28
|
this.log = log;
|
|
26
29
|
this.slotTimestamp = getTimestampForSlot(this.slot, this.l1Constants);
|
|
27
|
-
|
|
30
|
+
// Create separate signers with appropriate duty contexts for governance and slashing votes
|
|
31
|
+
// These use HA protection to ensure only one node signs per slot/duty
|
|
32
|
+
const governanceContext = {
|
|
33
|
+
slot: this.slot,
|
|
34
|
+
dutyType: DutyType.GOVERNANCE_VOTE
|
|
35
|
+
};
|
|
36
|
+
this.governanceSigner = (msg)=>this.validatorClient.signWithAddress(this.attestorAddress, msg, governanceContext).then((s)=>s.toString());
|
|
37
|
+
const slashingContext = {
|
|
38
|
+
slot: this.slot,
|
|
39
|
+
dutyType: DutyType.SLASHING_VOTE
|
|
40
|
+
};
|
|
41
|
+
this.slashingSigner = (msg)=>this.validatorClient.signWithAddress(this.attestorAddress, msg, slashingContext).then((s)=>s.toString());
|
|
28
42
|
}
|
|
29
43
|
/**
|
|
30
44
|
* Enqueues governance and slashing votes with the publisher.
|
|
@@ -55,11 +69,16 @@ import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
|
55
69
|
governanceProposerPayload: governanceProposerPayload.toString()
|
|
56
70
|
});
|
|
57
71
|
try {
|
|
58
|
-
return await this.publisher.enqueueGovernanceCastSignal(governanceProposerPayload, this.slot, this.slotTimestamp, this.attestorAddress, this.
|
|
72
|
+
return await this.publisher.enqueueGovernanceCastSignal(governanceProposerPayload, this.slot, this.slotTimestamp, this.attestorAddress, this.governanceSigner);
|
|
59
73
|
} catch (err) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
74
|
+
if (err instanceof DutyAlreadySignedError) {
|
|
75
|
+
this.log.info(`Governance vote already signed by another node`, {
|
|
76
|
+
slot: this.slot,
|
|
77
|
+
signedByNode: err.signedByNode
|
|
78
|
+
});
|
|
79
|
+
} else {
|
|
80
|
+
this.log.error(`Error enqueueing governance vote`, err);
|
|
81
|
+
}
|
|
63
82
|
return false;
|
|
64
83
|
}
|
|
65
84
|
}
|
|
@@ -74,11 +93,16 @@ import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
|
74
93
|
actionCount: actions.length
|
|
75
94
|
});
|
|
76
95
|
this.metrics.recordSlashingAttempt(actions.length);
|
|
77
|
-
return await this.publisher.enqueueSlashingActions(actions, this.slot, this.slotTimestamp, this.attestorAddress, this.
|
|
96
|
+
return await this.publisher.enqueueSlashingActions(actions, this.slot, this.slotTimestamp, this.attestorAddress, this.slashingSigner);
|
|
78
97
|
} catch (err) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
98
|
+
if (err instanceof DutyAlreadySignedError) {
|
|
99
|
+
this.log.info(`Slashing vote already signed by another node`, {
|
|
100
|
+
slot: this.slot,
|
|
101
|
+
signedByNode: err.signedByNode
|
|
102
|
+
});
|
|
103
|
+
} else {
|
|
104
|
+
this.log.error(`Error enqueueing slashing vote`, err);
|
|
105
|
+
}
|
|
82
106
|
return false;
|
|
83
107
|
}
|
|
84
108
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
export * from './block_builder.js';
|
|
2
1
|
export * from './checkpoint_proposal_job.js';
|
|
3
2
|
export * from './checkpoint_voter.js';
|
|
4
3
|
export * from './config.js';
|
|
5
4
|
export * from './events.js';
|
|
6
5
|
export * from './sequencer.js';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZ0JBQWdCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
package/dest/sequencer/index.js
CHANGED
|
@@ -21,15 +21,24 @@ 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;
|
|
32
37
|
private fishermanIncludedBlobTxCount;
|
|
38
|
+
private fishermanPendingBlobCount;
|
|
39
|
+
private fishermanIncludedBlobCount;
|
|
40
|
+
private fishermanBlockBlobsFull;
|
|
41
|
+
private fishermanMaxBlobCapacity;
|
|
33
42
|
private fishermanCalculatedPriorityFee;
|
|
34
43
|
private fishermanPriorityFeeDelta;
|
|
35
44
|
private fishermanEstimatedCost;
|
|
@@ -48,8 +57,11 @@ export declare class SequencerMetrics {
|
|
|
48
57
|
incFilledSlot(proposer: string, coinbase: Hex | EthAddress | undefined): Promise<void>;
|
|
49
58
|
recordCheckpointSuccess(): void;
|
|
50
59
|
recordBlockProposalFailed(reason?: string): void;
|
|
51
|
-
|
|
52
|
-
|
|
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;
|
|
53
65
|
recordSlashingAttempt(actionCount: number): void;
|
|
54
66
|
/**
|
|
55
67
|
* Records metrics for a completed fisherman fee analysis
|
|
@@ -57,4 +69,4 @@ export declare class SequencerMetrics {
|
|
|
57
69
|
*/
|
|
58
70
|
recordFishermanFeeAnalysis(analysis: L1FeeAnalysisResult): void;
|
|
59
71
|
}
|
|
60
|
-
//# 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,
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Attributes, Metrics } from '@aztec/telemetry-client';
|
|
1
|
+
import { Attributes, Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
|
|
2
2
|
import { formatUnits } from 'viem';
|
|
3
|
-
// TODO(palla/mbps): Review all metrics and add any missing ones per checkpoint
|
|
4
3
|
export class SequencerMetrics {
|
|
5
4
|
rollup;
|
|
6
5
|
tracer;
|
|
@@ -18,16 +17,25 @@ export class SequencerMetrics {
|
|
|
18
17
|
slots;
|
|
19
18
|
filledSlots;
|
|
20
19
|
blockProposalFailed;
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
checkpointProposalSuccess;
|
|
21
|
+
checkpointPrecheckFailed;
|
|
22
|
+
checkpointProposalFailed;
|
|
23
23
|
checkpointSuccess;
|
|
24
24
|
slashingAttempts;
|
|
25
25
|
checkpointAttestationDelay;
|
|
26
|
+
checkpointBuildDuration;
|
|
27
|
+
checkpointBlockCount;
|
|
28
|
+
checkpointTxCount;
|
|
29
|
+
checkpointTotalMana;
|
|
26
30
|
// Fisherman fee analysis metrics
|
|
27
31
|
fishermanWouldBeIncluded;
|
|
28
32
|
fishermanTimeBeforeBlock;
|
|
29
33
|
fishermanPendingBlobTxCount;
|
|
30
34
|
fishermanIncludedBlobTxCount;
|
|
35
|
+
fishermanPendingBlobCount;
|
|
36
|
+
fishermanIncludedBlobCount;
|
|
37
|
+
fishermanBlockBlobsFull;
|
|
38
|
+
fishermanMaxBlobCapacity;
|
|
31
39
|
fishermanCalculatedPriorityFee;
|
|
32
40
|
fishermanPriorityFeeDelta;
|
|
33
41
|
fishermanEstimatedCost;
|
|
@@ -39,35 +47,54 @@ export class SequencerMetrics {
|
|
|
39
47
|
this.rollup = rollup;
|
|
40
48
|
this.meter = client.getMeter(name);
|
|
41
49
|
this.tracer = client.getTracer(name);
|
|
42
|
-
this.blockCounter = this.meter
|
|
50
|
+
this.blockCounter = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_BLOCK_COUNT, {
|
|
51
|
+
[Attributes.STATUS]: [
|
|
52
|
+
'failed',
|
|
53
|
+
'built'
|
|
54
|
+
]
|
|
55
|
+
});
|
|
43
56
|
this.blockBuildDuration = this.meter.createHistogram(Metrics.SEQUENCER_BLOCK_BUILD_DURATION);
|
|
44
57
|
this.blockBuildManaPerSecond = this.meter.createGauge(Metrics.SEQUENCER_BLOCK_BUILD_MANA_PER_SECOND);
|
|
45
58
|
this.stateTransitionBufferDuration = this.meter.createHistogram(Metrics.SEQUENCER_STATE_TRANSITION_BUFFER_DURATION);
|
|
46
59
|
this.checkpointAttestationDelay = this.meter.createHistogram(Metrics.SEQUENCER_CHECKPOINT_ATTESTATION_DELAY);
|
|
47
|
-
|
|
48
|
-
this.
|
|
49
|
-
[Attributes.STATUS]: 'failed'
|
|
50
|
-
});
|
|
51
|
-
this.blockCounter.add(0, {
|
|
52
|
-
[Attributes.STATUS]: 'built'
|
|
53
|
-
});
|
|
54
|
-
this.rewards = this.meter.createGauge(Metrics.SEQUENCER_CURRENT_BLOCK_REWARDS);
|
|
55
|
-
this.slots = this.meter.createUpDownCounter(Metrics.SEQUENCER_SLOT_COUNT);
|
|
60
|
+
this.rewards = this.meter.createGauge(Metrics.SEQUENCER_CURRENT_SLOT_REWARDS);
|
|
61
|
+
this.slots = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_SLOT_COUNT);
|
|
56
62
|
/**
|
|
57
63
|
* NOTE: we do not track missed slots as a separate metric. That would be difficult to determine
|
|
58
64
|
* Instead, use a computed metric, `slots - filledSlots` to get the number of slots a sequencer has missed.
|
|
59
|
-
*/ this.filledSlots = this.meter
|
|
65
|
+
*/ this.filledSlots = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_FILLED_SLOT_COUNT);
|
|
60
66
|
this.timeToCollectAttestations = this.meter.createGauge(Metrics.SEQUENCER_COLLECT_ATTESTATIONS_DURATION);
|
|
61
67
|
this.allowanceToCollectAttestations = this.meter.createGauge(Metrics.SEQUENCER_COLLECT_ATTESTATIONS_TIME_ALLOWANCE);
|
|
62
68
|
this.requiredAttestions = this.meter.createGauge(Metrics.SEQUENCER_REQUIRED_ATTESTATIONS_COUNT);
|
|
63
69
|
this.collectedAttestions = this.meter.createGauge(Metrics.SEQUENCER_COLLECTED_ATTESTATIONS_COUNT);
|
|
64
|
-
this.blockProposalFailed = this.meter
|
|
65
|
-
this.
|
|
66
|
-
this.checkpointSuccess = this.meter
|
|
67
|
-
this.
|
|
68
|
-
|
|
70
|
+
this.blockProposalFailed = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_BLOCK_PROPOSAL_FAILED_COUNT);
|
|
71
|
+
this.checkpointProposalSuccess = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_CHECKPOINT_PROPOSAL_SUCCESS_COUNT);
|
|
72
|
+
this.checkpointSuccess = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_CHECKPOINT_SUCCESS_COUNT);
|
|
73
|
+
this.checkpointPrecheckFailed = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_CHECKPOINT_PRECHECK_FAILED_COUNT, {
|
|
74
|
+
[Attributes.ERROR_TYPE]: [
|
|
75
|
+
'slot_already_taken',
|
|
76
|
+
'rollup_contract_check_failed',
|
|
77
|
+
'slot_mismatch',
|
|
78
|
+
'block_number_mismatch'
|
|
79
|
+
]
|
|
80
|
+
});
|
|
81
|
+
this.checkpointProposalFailed = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_CHECKPOINT_PROPOSAL_FAILED_COUNT);
|
|
82
|
+
this.checkpointBuildDuration = this.meter.createHistogram(Metrics.SEQUENCER_CHECKPOINT_BUILD_DURATION);
|
|
83
|
+
this.checkpointBlockCount = this.meter.createGauge(Metrics.SEQUENCER_CHECKPOINT_BLOCK_COUNT);
|
|
84
|
+
this.checkpointTxCount = this.meter.createGauge(Metrics.SEQUENCER_CHECKPOINT_TX_COUNT);
|
|
85
|
+
this.checkpointTotalMana = this.meter.createGauge(Metrics.SEQUENCER_CHECKPOINT_TOTAL_MANA);
|
|
86
|
+
this.slashingAttempts = createUpDownCounterWithDefault(this.meter, Metrics.SEQUENCER_SLASHING_ATTEMPTS_COUNT);
|
|
69
87
|
// Fisherman fee analysis metrics
|
|
70
|
-
this.fishermanWouldBeIncluded = this.meter
|
|
88
|
+
this.fishermanWouldBeIncluded = createUpDownCounterWithDefault(this.meter, Metrics.FISHERMAN_FEE_ANALYSIS_WOULD_BE_INCLUDED, {
|
|
89
|
+
[Attributes.OK]: [
|
|
90
|
+
true,
|
|
91
|
+
false
|
|
92
|
+
],
|
|
93
|
+
[Attributes.BLOCK_FULL]: [
|
|
94
|
+
'true',
|
|
95
|
+
'false'
|
|
96
|
+
]
|
|
97
|
+
});
|
|
71
98
|
this.fishermanTimeBeforeBlock = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_TIME_BEFORE_BLOCK);
|
|
72
99
|
this.fishermanPendingBlobTxCount = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_PENDING_BLOB_TX_COUNT);
|
|
73
100
|
this.fishermanIncludedBlobTxCount = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_INCLUDED_BLOB_TX_COUNT);
|
|
@@ -77,6 +104,15 @@ export class SequencerMetrics {
|
|
|
77
104
|
this.fishermanEstimatedOverpayment = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_ESTIMATED_OVERPAYMENT);
|
|
78
105
|
this.fishermanMinedBlobTxPriorityFee = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_MINED_BLOB_TX_PRIORITY_FEE);
|
|
79
106
|
this.fishermanMinedBlobTxTotalCost = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_MINED_BLOB_TX_TOTAL_COST);
|
|
107
|
+
this.fishermanPendingBlobCount = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_PENDING_BLOB_COUNT);
|
|
108
|
+
this.fishermanIncludedBlobCount = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_INCLUDED_BLOB_COUNT);
|
|
109
|
+
this.fishermanBlockBlobsFull = createUpDownCounterWithDefault(this.meter, Metrics.FISHERMAN_FEE_ANALYSIS_BLOCK_BLOBS_FULL, {
|
|
110
|
+
[Attributes.OK]: [
|
|
111
|
+
true,
|
|
112
|
+
false
|
|
113
|
+
]
|
|
114
|
+
});
|
|
115
|
+
this.fishermanMaxBlobCapacity = this.meter.createHistogram(Metrics.FISHERMAN_FEE_ANALYSIS_MAX_BLOB_CAPACITY);
|
|
80
116
|
}
|
|
81
117
|
recordRequiredAttestations(requiredAttestationsCount, allowanceMs) {
|
|
82
118
|
this.requiredAttestions.record(requiredAttestationsCount);
|
|
@@ -146,14 +182,27 @@ export class SequencerMetrics {
|
|
|
146
182
|
}
|
|
147
183
|
});
|
|
148
184
|
}
|
|
149
|
-
|
|
150
|
-
this.
|
|
185
|
+
recordCheckpointProposalSuccess() {
|
|
186
|
+
this.checkpointProposalSuccess.add(1);
|
|
151
187
|
}
|
|
152
|
-
|
|
153
|
-
this.
|
|
188
|
+
recordCheckpointPrecheckFailed(checkType) {
|
|
189
|
+
this.checkpointPrecheckFailed.add(1, {
|
|
154
190
|
[Attributes.ERROR_TYPE]: checkType
|
|
155
191
|
});
|
|
156
192
|
}
|
|
193
|
+
recordCheckpointProposalFailed(reason) {
|
|
194
|
+
this.checkpointProposalFailed.add(1, {
|
|
195
|
+
...reason && {
|
|
196
|
+
[Attributes.ERROR_TYPE]: reason
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/** Records aggregate metrics for a completed checkpoint build. */ recordCheckpointBuild(durationMs, blockCount, txCount, totalMana) {
|
|
201
|
+
this.checkpointBuildDuration.record(Math.ceil(durationMs));
|
|
202
|
+
this.checkpointBlockCount.record(blockCount);
|
|
203
|
+
this.checkpointTxCount.record(txCount);
|
|
204
|
+
this.checkpointTotalMana.record(totalMana);
|
|
205
|
+
}
|
|
157
206
|
recordSlashingAttempt(actionCount) {
|
|
158
207
|
this.slashingAttempts.add(actionCount);
|
|
159
208
|
}
|
|
@@ -174,9 +223,11 @@ export class SequencerMetrics {
|
|
|
174
223
|
};
|
|
175
224
|
// Record pending block snapshot data (once per strategy for comparison)
|
|
176
225
|
this.fishermanPendingBlobTxCount.record(analysis.pendingSnapshot.pendingBlobTxCount, strategyAttributes);
|
|
226
|
+
this.fishermanPendingBlobCount.record(analysis.pendingSnapshot.pendingBlobCount, strategyAttributes);
|
|
177
227
|
// Record mined block data if available
|
|
178
228
|
if (analysis.minedBlock) {
|
|
179
229
|
this.fishermanIncludedBlobTxCount.record(analysis.minedBlock.includedBlobTxCount, strategyAttributes);
|
|
230
|
+
this.fishermanIncludedBlobCount.record(analysis.minedBlock.includedBlobCount, strategyAttributes);
|
|
180
231
|
// Record actual fees from blob transactions in the mined block
|
|
181
232
|
for (const blobTx of analysis.minedBlock.includedBlobTxs){
|
|
182
233
|
// Record priority fee per gas in Gwei
|
|
@@ -201,16 +252,34 @@ export class SequencerMetrics {
|
|
|
201
252
|
// Record analysis results if available
|
|
202
253
|
if (analysis.analysis) {
|
|
203
254
|
this.fishermanTimeBeforeBlock.record(Math.ceil(analysis.analysis.timeBeforeBlockMs), strategyAttributes);
|
|
255
|
+
// Record whether the block reached 100% blob capacity
|
|
256
|
+
if (analysis.analysis.blockBlobsFull) {
|
|
257
|
+
this.fishermanBlockBlobsFull.add(1, {
|
|
258
|
+
...strategyAttributes,
|
|
259
|
+
[Attributes.OK]: true
|
|
260
|
+
});
|
|
261
|
+
} else {
|
|
262
|
+
this.fishermanBlockBlobsFull.add(1, {
|
|
263
|
+
...strategyAttributes,
|
|
264
|
+
[Attributes.OK]: false
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
// Record the max blob capacity for this block
|
|
268
|
+
this.fishermanMaxBlobCapacity.record(analysis.analysis.maxBlobCapacity, strategyAttributes);
|
|
204
269
|
// Record strategy-specific inclusion result
|
|
205
270
|
if (strategyResult.wouldBeIncluded !== undefined) {
|
|
271
|
+
const inclusionAttributes = {
|
|
272
|
+
...strategyAttributes,
|
|
273
|
+
[Attributes.BLOCK_FULL]: analysis.analysis.blockBlobsFull ? 'true' : 'false'
|
|
274
|
+
};
|
|
206
275
|
if (strategyResult.wouldBeIncluded) {
|
|
207
276
|
this.fishermanWouldBeIncluded.add(1, {
|
|
208
|
-
...
|
|
277
|
+
...inclusionAttributes,
|
|
209
278
|
[Attributes.OK]: true
|
|
210
279
|
});
|
|
211
280
|
} else {
|
|
212
281
|
this.fishermanWouldBeIncluded.add(1, {
|
|
213
|
-
...
|
|
282
|
+
...inclusionAttributes,
|
|
214
283
|
[Attributes.OK]: false,
|
|
215
284
|
...strategyResult.exclusionReason && {
|
|
216
285
|
[Attributes.ERROR_TYPE]: strategyResult.exclusionReason
|
|
@@ -221,15 +290,27 @@ export class SequencerMetrics {
|
|
|
221
290
|
// Record strategy-specific priority fee delta
|
|
222
291
|
if (strategyResult.priorityFeeDelta !== undefined) {
|
|
223
292
|
const priorityFeeDeltaGwei = Number(strategyResult.priorityFeeDelta) / 1e9;
|
|
224
|
-
|
|
293
|
+
const deltaAttributes = {
|
|
294
|
+
...strategyAttributes,
|
|
295
|
+
[Attributes.BLOCK_FULL]: analysis.analysis.blockBlobsFull ? 'true' : 'false'
|
|
296
|
+
};
|
|
297
|
+
this.fishermanPriorityFeeDelta.record(priorityFeeDeltaGwei, deltaAttributes);
|
|
225
298
|
}
|
|
226
299
|
// Record estimated cost if available
|
|
227
300
|
if (strategyResult.estimatedCostEth !== undefined) {
|
|
228
|
-
|
|
301
|
+
const costAttributes = {
|
|
302
|
+
...strategyAttributes,
|
|
303
|
+
[Attributes.BLOCK_FULL]: analysis.analysis.blockBlobsFull ? 'true' : 'false'
|
|
304
|
+
};
|
|
305
|
+
this.fishermanEstimatedCost.record(strategyResult.estimatedCostEth, costAttributes);
|
|
229
306
|
}
|
|
230
307
|
// Record estimated overpayment if available
|
|
231
308
|
if (strategyResult.estimatedOverpaymentEth !== undefined) {
|
|
232
|
-
|
|
309
|
+
const overpaymentAttributes = {
|
|
310
|
+
...strategyAttributes,
|
|
311
|
+
[Attributes.BLOCK_FULL]: analysis.analysis.blockBlobsFull ? 'true' : 'false'
|
|
312
|
+
};
|
|
313
|
+
this.fishermanEstimatedOverpayment.record(strategyResult.estimatedOverpaymentEth, overpaymentAttributes);
|
|
233
314
|
}
|
|
234
315
|
}
|
|
235
316
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
2
|
import { type RollupContract } from '@aztec/ethereum/contracts';
|
|
3
|
-
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
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
6
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
7
7
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
8
8
|
import type { P2P } from '@aztec/p2p';
|
|
9
9
|
import type { SlasherClientInterface } from '@aztec/slasher';
|
|
10
|
-
import type {
|
|
10
|
+
import type { BlockData, L2BlockSink, L2BlockSource, ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
11
11
|
import type { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
12
12
|
import { type ResolvedSequencerConfig, type SequencerConfig, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
13
13
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
14
14
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
15
|
-
import { FullNodeCheckpointsBuilder, type ValidatorClient } from '@aztec/validator-client';
|
|
15
|
+
import { FullNodeCheckpointsBuilder, NodeKeystoreAdapter, type ValidatorClient } from '@aztec/validator-client';
|
|
16
16
|
import type { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
|
|
17
17
|
import type { SequencerPublisherFactory } from '../publisher/sequencer-publisher-factory.js';
|
|
18
18
|
import type { InvalidateCheckpointRequest, SequencerPublisher } from '../publisher/sequencer-publisher.js';
|
|
@@ -50,8 +50,10 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
50
50
|
private runningPromise?;
|
|
51
51
|
private state;
|
|
52
52
|
private metrics;
|
|
53
|
-
/** The last slot for which we attempted to
|
|
54
|
-
private
|
|
53
|
+
/** The last slot for which we attempted to perform our voting duties with degraded block production */
|
|
54
|
+
private lastSlotForFallbackVote;
|
|
55
|
+
/** The last slot for which we logged "no committee" warning, to avoid spam */
|
|
56
|
+
private lastSlotForNoCommitteeWarning;
|
|
55
57
|
/** The last slot for which we triggered a checkpoint proposal job, to prevent duplicate attempts. */
|
|
56
58
|
private lastSlotForCheckpointProposalJob;
|
|
57
59
|
/** Last successful checkpoint proposed */
|
|
@@ -60,14 +62,13 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
60
62
|
private lastEpochForStrategyComparison;
|
|
61
63
|
/** The maximum number of seconds that the sequencer can be into a slot to transition to a particular state. */
|
|
62
64
|
protected timetable: SequencerTimetable;
|
|
63
|
-
protected publisher: SequencerPublisher | undefined;
|
|
64
65
|
/** Config for the sequencer */
|
|
65
66
|
protected config: ResolvedSequencerConfig;
|
|
66
67
|
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, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
|
|
67
68
|
/** Updates sequencer config by the defined values and updates the timetable */
|
|
68
69
|
updateConfig(config: Partial<SequencerConfig>): void;
|
|
69
|
-
/** Initializes the sequencer (precomputes tables
|
|
70
|
-
init():
|
|
70
|
+
/** Initializes the sequencer (precomputes tables). Takes about 3s. */
|
|
71
|
+
init(): void;
|
|
71
72
|
/** Starts the sequencer and moves to IDLE state. */
|
|
72
73
|
start(): void;
|
|
73
74
|
/** Stops the sequencer from building blocks and moves to STOPPED state. */
|
|
@@ -88,7 +89,11 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
88
89
|
*/
|
|
89
90
|
protected work(): Promise<Checkpoint | undefined>;
|
|
90
91
|
private prepareCheckpointProposal;
|
|
91
|
-
protected createCheckpointProposalJob(slot: SlotNumber, checkpointNumber: CheckpointNumber, syncedToBlockNumber: BlockNumber, proposer: EthAddress | undefined, publisher: SequencerPublisher, attestorAddress: EthAddress, invalidateCheckpoint: InvalidateCheckpointRequest | undefined): CheckpointProposalJob;
|
|
92
|
+
protected createCheckpointProposalJob(epoch: EpochNumber, slot: SlotNumber, checkpointNumber: CheckpointNumber, syncedToBlockNumber: BlockNumber, proposer: EthAddress | undefined, publisher: SequencerPublisher, attestorAddress: EthAddress, invalidateCheckpoint: InvalidateCheckpointRequest | undefined): CheckpointProposalJob;
|
|
93
|
+
/**
|
|
94
|
+
* Returns the current sequencer state.
|
|
95
|
+
*/
|
|
96
|
+
getState(): SequencerState;
|
|
92
97
|
/**
|
|
93
98
|
* Internal helper for setting the sequencer state and checks if we have enough time left in the slot to transition to the new state.
|
|
94
99
|
* @param proposedState - The new state to transition to.
|
|
@@ -120,7 +125,15 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
120
125
|
ts: bigint;
|
|
121
126
|
}): Promise<void>;
|
|
122
127
|
/**
|
|
123
|
-
*
|
|
128
|
+
* Tries to vote on slashing actions and governance proposals when escape hatch is open.
|
|
129
|
+
* This allows the sequencer to participate in voting without performing checkpoint proposal work.
|
|
130
|
+
*/
|
|
131
|
+
protected tryVoteWhenEscapeHatchOpen(args: {
|
|
132
|
+
slot: SlotNumber;
|
|
133
|
+
proposer: EthAddress | undefined;
|
|
134
|
+
}): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* Considers invalidating a block if the pending chain is invalid. Depends on how long the invalid block
|
|
124
137
|
* has been there without being invalidated and whether the sequencer is in the committee or not. We always
|
|
125
138
|
* have the proposer try to invalidate, but if they fail, the sequencers in the committee are expected to try,
|
|
126
139
|
* and if they fail, any sequencer will try as well.
|
|
@@ -134,6 +147,8 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
134
147
|
getSlasherClient(): SlasherClientInterface | undefined;
|
|
135
148
|
get tracer(): Tracer;
|
|
136
149
|
getValidatorAddresses(): EthAddress[];
|
|
150
|
+
/** Updates the publisher factory's node keystore adapter after a keystore reload. */
|
|
151
|
+
updatePublisherNodeKeyStore(adapter: NodeKeystoreAdapter): void;
|
|
137
152
|
getConfig(): {
|
|
138
153
|
sequencerPollingIntervalMS: number;
|
|
139
154
|
maxTxsPerBlock: number;
|
|
@@ -143,7 +158,7 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
143
158
|
maxL2BlockGas: number;
|
|
144
159
|
maxDABlockGas: number;
|
|
145
160
|
coinbase?: EthAddress | undefined;
|
|
146
|
-
feeRecipient?: import("
|
|
161
|
+
feeRecipient?: import("@aztec/stdlib/aztec-address").AztecAddress | undefined;
|
|
147
162
|
acvmWorkingDirectory?: string | undefined;
|
|
148
163
|
acvmBinaryPath?: string | undefined;
|
|
149
164
|
txPublicSetupAllowList?: import("@aztec/stdlib/interfaces/server").AllowedElement[] | undefined;
|
|
@@ -163,17 +178,20 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
163
178
|
fishermanMode: boolean;
|
|
164
179
|
shuffleAttestationOrdering: boolean;
|
|
165
180
|
blockDurationMs?: number | undefined;
|
|
181
|
+
expectedBlockProposalsPerSlot?: number | undefined;
|
|
166
182
|
buildCheckpointIfEmpty: boolean;
|
|
167
183
|
skipPushProposedBlocksToArchiver: boolean;
|
|
184
|
+
minBlocksForCheckpoint?: number | undefined;
|
|
185
|
+
skipPublishingCheckpointsPercent: number;
|
|
168
186
|
};
|
|
169
187
|
private get l1PublishingTime();
|
|
170
188
|
}
|
|
171
189
|
type SequencerSyncCheckResult = {
|
|
172
|
-
|
|
190
|
+
blockData?: BlockData;
|
|
173
191
|
checkpointNumber: CheckpointNumber;
|
|
174
192
|
blockNumber: BlockNumber;
|
|
175
193
|
archive: Fr;
|
|
176
194
|
l1Timestamp: bigint;
|
|
177
195
|
pendingChainValidationStatus: ValidateCheckpointResult;
|
|
178
196
|
};
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQW9CLEtBQUssY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0csT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUNMLEtBQUssdUJBQXVCLEVBQzVCLEtBQUssZUFBZSxFQUVwQixLQUFLLHNCQUFzQixFQUM1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsT0FBTyxFQUFjLEtBQUssZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFpQyxNQUFNLHlCQUF5QixDQUFD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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,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|