@aztec/sequencer-client 5.0.0-nightly.20260623 → 5.0.0-nightly.20260625
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/publisher/sequencer-publisher.d.ts +13 -3
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +51 -0
- package/dest/sequencer/sequencer.d.ts +8 -6
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +38 -19
- package/package.json +27 -27
- package/src/publisher/sequencer-publisher.ts +42 -0
- package/src/sequencer/sequencer.ts +40 -18
|
@@ -33,9 +33,9 @@ export type SendRequestsResult = {
|
|
|
33
33
|
/** Actions whose L1 simulation failed (subset of sentActions). */
|
|
34
34
|
failedActions: Action[];
|
|
35
35
|
};
|
|
36
|
-
export declare const Actions: readonly ["invalidate-by-invalid-attestation", "invalidate-by-insufficient-attestations", "propose", "governance-signal", "vote-offenses", "execute-slash"];
|
|
36
|
+
export declare const Actions: readonly ["invalidate-by-invalid-attestation", "invalidate-by-insufficient-attestations", "prune", "propose", "governance-signal", "vote-offenses", "execute-slash"];
|
|
37
37
|
export type Action = (typeof Actions)[number];
|
|
38
|
-
export declare const compareActions: (a: "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "vote-offenses", b: "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "vote-offenses") => number;
|
|
38
|
+
export declare const compareActions: (a: "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "prune" | "vote-offenses", b: "execute-slash" | "governance-signal" | "invalidate-by-insufficient-attestations" | "invalidate-by-invalid-attestation" | "propose" | "prune" | "vote-offenses") => number;
|
|
39
39
|
export type InvalidateCheckpointRequest = {
|
|
40
40
|
request: L1TxRequest;
|
|
41
41
|
reason: 'invalid-attestation' | 'insufficient-attestations';
|
|
@@ -197,6 +197,16 @@ export declare class SequencerPublisher {
|
|
|
197
197
|
* @returns True if the signal was successfully enqueued, false otherwise.
|
|
198
198
|
*/
|
|
199
199
|
enqueueGovernanceCastSignal(governancePayload: EthAddress, slotNumber: SlotNumber, signerAddress: EthAddress, signer: (msg: TypedDataDefinition) => Promise<`0x${string}`>): Promise<boolean>;
|
|
200
|
+
/**
|
|
201
|
+
* Enqueues a `prune()` transaction if the rollup is prunable at the given slot's L1 timestamp.
|
|
202
|
+
* `prune()` is permissionless and idempotent — if the chain is no longer prunable by send time the
|
|
203
|
+
* bundle simulation usually drops the entry; on a node without `eth_simulateV1` the bundle is sent
|
|
204
|
+
* as-is and the prune reverts `Rollup__NothingToPrune` inside `aggregate3(allowFailure: true)`
|
|
205
|
+
* (a failed action, never a whole-tx revert). Used by the failed-sync fallback so a stuck pending
|
|
206
|
+
* chain (e.g. bad data blocking sync) can be wound back to recover.
|
|
207
|
+
* @returns true if a prune request was enqueued, false otherwise.
|
|
208
|
+
*/
|
|
209
|
+
enqueuePruneIfPrunable(slotNumber: SlotNumber): Promise<boolean>;
|
|
200
210
|
/** Enqueues all slashing actions as returned by the slasher client. */
|
|
201
211
|
enqueueSlashingActions(actions: ProposerSlashAction[], slotNumber: SlotNumber, signerAddress: EthAddress, signer: (msg: TypedDataDefinition) => Promise<`0x${string}`>): Promise<boolean>;
|
|
202
212
|
/** Enqueues a proposal for a checkpoint on L1 */
|
|
@@ -225,4 +235,4 @@ export declare class SequencerPublisher {
|
|
|
225
235
|
private getNextL1SlotTimestamp;
|
|
226
236
|
}
|
|
227
237
|
export {};
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLXB1Ymxpc2hlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1Ymxpc2hlci9zZXF1ZW5jZXItcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBRUwsS0FBSywwQkFBMEIsRUFJL0IsS0FBSyxjQUFjLEVBQ25CLEtBQUssdUJBQXVCLEVBQzVCLEtBQUssd0JBQXdCLEVBRTlCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUYsT0FBTyxFQUNMLEtBQUssWUFBWSxFQUNqQixLQUFLLFVBQVUsRUFDZixLQUFLLFdBQVcsRUFDaEIsS0FBSyxTQUFTLEVBRWQsS0FBSyxnQkFBZ0IsRUFFdEIsTUFBTSw2QkFBNkIsQ0FBQztBQVFyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHL0UsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQTZCLE1BQU0sZ0JBQWdCLENB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAEL,KAAK,0BAA0B,EAI/B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAE9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,mBAAmB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,KAAK,gBAAgB,EAEtB,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG/E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,KAAK,mBAAmB,EAA6B,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAM3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAiC,MAAM,yBAAyB,CAAC;AAE3G,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAIzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAiB7E,2FAA2F;AAC3F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6DAA6D;IAC7D,MAAM,EAAE;QAAE,OAAO,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACxC,8EAA8E;IAC9E,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qEAAqE;IACrE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kEAAkE;IAClE,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAkBF,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -408,6 +408,7 @@ import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
|
408
408
|
export const Actions = [
|
|
409
409
|
'invalidate-by-invalid-attestation',
|
|
410
410
|
'invalidate-by-insufficient-attestations',
|
|
411
|
+
'prune',
|
|
411
412
|
'propose',
|
|
412
413
|
'governance-signal',
|
|
413
414
|
'vote-offenses',
|
|
@@ -1167,6 +1168,56 @@ export class SequencerPublisher {
|
|
|
1167
1168
|
*/ enqueueGovernanceCastSignal(governancePayload, slotNumber, signerAddress, signer) {
|
|
1168
1169
|
return this.enqueueCastSignalHelper(slotNumber, 'governance-signal', governancePayload, this.govProposerContract, signerAddress, signer);
|
|
1169
1170
|
}
|
|
1171
|
+
/**
|
|
1172
|
+
* Enqueues a `prune()` transaction if the rollup is prunable at the given slot's L1 timestamp.
|
|
1173
|
+
* `prune()` is permissionless and idempotent — if the chain is no longer prunable by send time the
|
|
1174
|
+
* bundle simulation usually drops the entry; on a node without `eth_simulateV1` the bundle is sent
|
|
1175
|
+
* as-is and the prune reverts `Rollup__NothingToPrune` inside `aggregate3(allowFailure: true)`
|
|
1176
|
+
* (a failed action, never a whole-tx revert). Used by the failed-sync fallback so a stuck pending
|
|
1177
|
+
* chain (e.g. bad data blocking sync) can be wound back to recover.
|
|
1178
|
+
* @returns true if a prune request was enqueued, false otherwise.
|
|
1179
|
+
*/ async enqueuePruneIfPrunable(slotNumber) {
|
|
1180
|
+
if (this.lastActions['prune'] === slotNumber) {
|
|
1181
|
+
this.log.debug(`Skipping duplicate prune for slot ${slotNumber}`, {
|
|
1182
|
+
slotNumber
|
|
1183
|
+
});
|
|
1184
|
+
return false;
|
|
1185
|
+
}
|
|
1186
|
+
// Use the SAME timestamp the bundle simulator overrides block.timestamp with at send time
|
|
1187
|
+
// (sequencer-bundle-simulator.ts) so this upfront check and the send-time sim agree. Slot-start
|
|
1188
|
+
// and last-L1-slot both fall within the same L2 slot (and epoch, which is what `canPruneAtTime`
|
|
1189
|
+
// derives), so they agree today; matching the simulator keeps it robust if the contract ever uses
|
|
1190
|
+
// the timestamp more granularly.
|
|
1191
|
+
const ts = getLastL1SlotTimestampForL2Slot(slotNumber, this.epochCache.getL1Constants());
|
|
1192
|
+
const canPrune = await this.rollupContract.canPruneAtTime(ts).catch((err)=>{
|
|
1193
|
+
this.log.error(`Failed to check canPruneAtTime for slot ${slotNumber}`, err, {
|
|
1194
|
+
slotNumber
|
|
1195
|
+
});
|
|
1196
|
+
return false;
|
|
1197
|
+
});
|
|
1198
|
+
if (!canPrune) {
|
|
1199
|
+
this.log.debug(`Rollup not prunable at slot ${slotNumber}`, {
|
|
1200
|
+
slotNumber
|
|
1201
|
+
});
|
|
1202
|
+
return false;
|
|
1203
|
+
}
|
|
1204
|
+
const request = {
|
|
1205
|
+
to: this.rollupContract.address,
|
|
1206
|
+
data: encodeFunctionData({
|
|
1207
|
+
abi: RollupAbi,
|
|
1208
|
+
functionName: 'prune',
|
|
1209
|
+
args: []
|
|
1210
|
+
})
|
|
1211
|
+
};
|
|
1212
|
+
this.log.info(`Enqueuing rollup prune for slot ${slotNumber}`, {
|
|
1213
|
+
slotNumber
|
|
1214
|
+
});
|
|
1215
|
+
return this.enqueueRequest('prune', request, {
|
|
1216
|
+
address: this.rollupContract.address,
|
|
1217
|
+
abi: RollupAbi,
|
|
1218
|
+
eventName: 'PrunedPending'
|
|
1219
|
+
}, slotNumber);
|
|
1220
|
+
}
|
|
1170
1221
|
/** Enqueues all slashing actions as returned by the slasher client. */ async enqueueSlashingActions(actions, slotNumber, signerAddress, signer) {
|
|
1171
1222
|
if (actions.length === 0) {
|
|
1172
1223
|
this.log.debug(`No slashing actions to enqueue for slot ${slotNumber}`);
|
|
@@ -66,8 +66,8 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
66
66
|
private metrics;
|
|
67
67
|
private checkpointProposalJobMetrics;
|
|
68
68
|
private readonly stateLog;
|
|
69
|
-
/** The last slot for which we attempted to perform our
|
|
70
|
-
private
|
|
69
|
+
/** The last slot for which we attempted to perform our fallback duties (votes and/or prune) with degraded block production */
|
|
70
|
+
private lastSlotForFallbackAction;
|
|
71
71
|
/** The (checkpoint, slot) of the last invalidation request we successfully simulated, to prevent
|
|
72
72
|
* re-simulating and re-submitting the same invalidation across the many ticks within a single slot. */
|
|
73
73
|
private lastInvalidationAttempt;
|
|
@@ -185,13 +185,15 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
185
185
|
*/
|
|
186
186
|
protected checkCanPropose(targetSlot: SlotNumber): Promise<[boolean, EthAddress | undefined]>;
|
|
187
187
|
/**
|
|
188
|
-
* Tries to vote on slashing actions and governance when we cannot build and are past the
|
|
189
|
-
* This allows the sequencer to participate in governance/slashing votes even when it
|
|
188
|
+
* Tries to vote on slashing actions and governance and to prune when we cannot build and are past the
|
|
189
|
+
* block-building window. This allows the sequencer to participate in governance/slashing votes even when it
|
|
190
|
+
* cannot build blocks, and to prune the pending chain so it can recover from bad data that is blocking sync.
|
|
190
191
|
*/
|
|
191
|
-
protected
|
|
192
|
+
protected tryVoteAndPruneWhenCannotBuild(args: {
|
|
192
193
|
slot: SlotNumber;
|
|
193
194
|
targetSlot: SlotNumber;
|
|
194
195
|
}): Promise<void>;
|
|
196
|
+
private tryEnqueuePruneIfPrunable;
|
|
195
197
|
/**
|
|
196
198
|
* Tries to vote on slashing actions and governance proposals when escape hatch is open.
|
|
197
199
|
* This allows the sequencer to participate in voting without performing checkpoint proposal work.
|
|
@@ -284,4 +286,4 @@ type SequencerSyncCheckResult = {
|
|
|
284
286
|
syncedL2Slot: SlotNumber;
|
|
285
287
|
pendingChainValidationStatus: ValidateCheckpointResult;
|
|
286
288
|
};
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQW1DLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFvQixLQUFLLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQ1YsU0FBUyxFQUNULFdBQVcsRUFDWCxhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxLQUFLLFVBQVUsRUFDZixLQUFLLHNCQUFzQixFQUU1QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBT3hELE9BQU8sRUFDTCxLQUFLLHVCQUF1QixFQUM1QixLQUFLLGVBQWUsRUFFcEIsS0FBSyxzQkFBc0IsRUFDNUIs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|
|
@@ -395,7 +395,7 @@ import { SequencerInterruptedError } from './errors.js';
|
|
|
395
395
|
import { SequencerMetrics } from './metrics.js';
|
|
396
396
|
import { SequencerState } from './utils.js';
|
|
397
397
|
export { SequencerState };
|
|
398
|
-
_dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpointProposal'), _dec2 = trackSpan('Sequencer.
|
|
398
|
+
_dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpointProposal'), _dec2 = trackSpan('Sequencer.tryVoteAndPruneWhenCannotBuild', ({ slot })=>({
|
|
399
399
|
[Attributes.SLOT_NUMBER]: slot
|
|
400
400
|
})), _dec3 = trackSpan('Sequencer.tryVoteWhenEscapeHatchOpen', ({ slot })=>({
|
|
401
401
|
[Attributes.SLOT_NUMBER]: slot
|
|
@@ -438,7 +438,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
438
438
|
[
|
|
439
439
|
_dec2,
|
|
440
440
|
2,
|
|
441
|
-
"
|
|
441
|
+
"tryVoteAndPruneWhenCannotBuild"
|
|
442
442
|
],
|
|
443
443
|
[
|
|
444
444
|
_dec3,
|
|
@@ -454,7 +454,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
454
454
|
metrics;
|
|
455
455
|
checkpointProposalJobMetrics;
|
|
456
456
|
stateLog;
|
|
457
|
-
/** The last slot for which we attempted to perform our
|
|
457
|
+
/** The last slot for which we attempted to perform our fallback duties (votes and/or prune) with degraded block production */ lastSlotForFallbackAction;
|
|
458
458
|
/** The (checkpoint, slot) of the last invalidation request we successfully simulated, to prevent
|
|
459
459
|
* re-simulating and re-submitting the same invalidation across the many ticks within a single slot. */ lastInvalidationAttempt;
|
|
460
460
|
/** The last slot for which we logged "no committee" warning, to avoid spam */ lastSlotForNoCommitteeWarning;
|
|
@@ -737,7 +737,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
737
737
|
slot
|
|
738
738
|
});
|
|
739
739
|
if (!syncedTo) {
|
|
740
|
-
await this.
|
|
740
|
+
await this.tryVoteAndPruneWhenCannotBuild({
|
|
741
741
|
slot,
|
|
742
742
|
targetSlot
|
|
743
743
|
});
|
|
@@ -759,7 +759,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
759
759
|
});
|
|
760
760
|
// Mark the slot as attempted so a deadline abort is not retried within the same slot. Vote-only actions
|
|
761
761
|
// still need to run because sync can succeed even when it is too late to start building a checkpoint.
|
|
762
|
-
await this.
|
|
762
|
+
await this.tryVoteAndPruneWhenCannotBuild({
|
|
763
763
|
slot,
|
|
764
764
|
targetSlot
|
|
765
765
|
});
|
|
@@ -1149,13 +1149,14 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
1149
1149
|
];
|
|
1150
1150
|
}
|
|
1151
1151
|
/**
|
|
1152
|
-
* Tries to vote on slashing actions and governance when we cannot build and are past the
|
|
1153
|
-
* This allows the sequencer to participate in governance/slashing votes even when it
|
|
1154
|
-
|
|
1152
|
+
* Tries to vote on slashing actions and governance and to prune when we cannot build and are past the
|
|
1153
|
+
* block-building window. This allows the sequencer to participate in governance/slashing votes even when it
|
|
1154
|
+
* cannot build blocks, and to prune the pending chain so it can recover from bad data that is blocking sync.
|
|
1155
|
+
*/ async tryVoteAndPruneWhenCannotBuild(args) {
|
|
1155
1156
|
const { slot, targetSlot } = args;
|
|
1156
1157
|
// Prevent duplicate attempts in the same slot
|
|
1157
|
-
if (this.
|
|
1158
|
-
this.log.trace(`Already attempted
|
|
1158
|
+
if (this.lastSlotForFallbackAction === slot) {
|
|
1159
|
+
this.log.trace(`Already attempted fallback actions in slot ${slot} (skipping)`);
|
|
1159
1160
|
return;
|
|
1160
1161
|
}
|
|
1161
1162
|
// Vote-only actions do not give up the slot: if sync recovers, a later work-loop iteration can still build.
|
|
@@ -1177,7 +1178,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
1177
1178
|
return;
|
|
1178
1179
|
}
|
|
1179
1180
|
// Mark this slot as attempted
|
|
1180
|
-
this.
|
|
1181
|
+
this.lastSlotForFallbackAction = slot;
|
|
1181
1182
|
// Get a publisher for voting
|
|
1182
1183
|
const { attestorAddress, publisher } = await this.publisherFactory.create(proposer);
|
|
1183
1184
|
this.log.debug(`Attempting to vote despite sync failure at slot ${slot}`, {
|
|
@@ -1188,35 +1189,53 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
1188
1189
|
const voter = new CheckpointVoter(targetSlot, publisher, attestorAddress, this.validatorClient, this.slasherClient, this.l1Constants, this.config, this.metrics, this.log);
|
|
1189
1190
|
const votesPromises = voter.enqueueVotes();
|
|
1190
1191
|
const votes = await Promise.all(votesPromises);
|
|
1191
|
-
if (
|
|
1192
|
-
|
|
1192
|
+
// Even if we cannot build, try to prune so a stuck pending chain (e.g. bad data blocking sync) can
|
|
1193
|
+
// recover. prune() is permissionless, so it rides the same fallback multicall as the votes.
|
|
1194
|
+
const pruneEnqueued = await this.tryEnqueuePruneIfPrunable(targetSlot, publisher);
|
|
1195
|
+
// Bail if nothing to do
|
|
1196
|
+
if (votes.every((p)=>!p) && !pruneEnqueued) {
|
|
1197
|
+
this.log.debug(`Nothing to enqueue for slot ${slot} (no votes, not prunable)`);
|
|
1193
1198
|
return;
|
|
1194
1199
|
}
|
|
1195
|
-
|
|
1196
|
-
|
|
1200
|
+
const [governanceVoteEnqueued, slashingVoteEnqueued] = votes;
|
|
1201
|
+
this.log.info(`Submitting fallback requests in slot ${slot} despite sync failure`, {
|
|
1202
|
+
slot,
|
|
1203
|
+
pruneEnqueued,
|
|
1204
|
+
governanceVoteEnqueued: !!governanceVoteEnqueued,
|
|
1205
|
+
slashingVoteEnqueued: !!slashingVoteEnqueued
|
|
1197
1206
|
});
|
|
1198
1207
|
// Votes are EIP-712-signed for `targetSlot` (the pipelined slot in which the multicall is
|
|
1199
1208
|
// expected to mine). Delay submission to the start of `targetSlot` so the tx mines in the
|
|
1200
1209
|
// slot the votes were signed for. We fire-and-forget so we don't block the sequencer's
|
|
1201
1210
|
// work loop while waiting for the target slot to start.
|
|
1202
1211
|
void publisher.sendRequestsAt(targetSlot).catch((err)=>{
|
|
1203
|
-
this.log.error(`Failed to publish
|
|
1212
|
+
this.log.error(`Failed to publish fallback requests despite sync failure for slot ${slot}`, err, {
|
|
1204
1213
|
slot
|
|
1205
1214
|
});
|
|
1206
1215
|
});
|
|
1207
1216
|
}
|
|
1217
|
+
async tryEnqueuePruneIfPrunable(targetSlot, publisher) {
|
|
1218
|
+
try {
|
|
1219
|
+
return await publisher.enqueuePruneIfPrunable(targetSlot);
|
|
1220
|
+
} catch (err) {
|
|
1221
|
+
this.log.error(`Failed to enqueue rollup prune for slot ${targetSlot}`, err, {
|
|
1222
|
+
targetSlot
|
|
1223
|
+
});
|
|
1224
|
+
return false;
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1208
1227
|
/**
|
|
1209
1228
|
* Tries to vote on slashing actions and governance proposals when escape hatch is open.
|
|
1210
1229
|
* This allows the sequencer to participate in voting without performing checkpoint proposal work.
|
|
1211
1230
|
*/ async tryVoteWhenEscapeHatchOpen(args) {
|
|
1212
1231
|
const { slot, targetSlot, proposer } = args;
|
|
1213
1232
|
// Prevent duplicate attempts in the same slot
|
|
1214
|
-
if (this.
|
|
1233
|
+
if (this.lastSlotForFallbackAction === slot) {
|
|
1215
1234
|
this.log.trace(`Already attempted to vote in slot ${slot} (escape hatch open, skipping)`);
|
|
1216
1235
|
return;
|
|
1217
1236
|
}
|
|
1218
1237
|
// Mark this slot as attempted
|
|
1219
|
-
this.
|
|
1238
|
+
this.lastSlotForFallbackAction = slot;
|
|
1220
1239
|
const { attestorAddress, publisher } = await this.publisherFactory.create(proposer);
|
|
1221
1240
|
this.log.debug(`Escape hatch open for slot ${slot}, attempting vote-only actions`, {
|
|
1222
1241
|
slot,
|
|
@@ -1242,7 +1261,7 @@ _dec = trackSpan('Sequencer.work'), _dec1 = trackSpan('Sequencer.prepareCheckpoi
|
|
|
1242
1261
|
// the multicall mines in the slot the votes were signed for; otherwise the L1 contract reads
|
|
1243
1262
|
// `signaler = getCurrentProposer()` against the wrong slot and signature verification fails
|
|
1244
1263
|
// silently inside Multicall3. Fire-and-forget so we don't block the sequencer's work loop while
|
|
1245
|
-
// waiting for the target slot to start, mirroring
|
|
1264
|
+
// waiting for the target slot to start, mirroring tryVoteAndPruneWhenCannotBuild.
|
|
1246
1265
|
void publisher.sendRequestsAt(targetSlot).catch((err)=>{
|
|
1247
1266
|
this.log.error(`Failed to publish escape-hatch votes for slot ${slot}`, err, {
|
|
1248
1267
|
slot,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "5.0.0-nightly.
|
|
3
|
+
"version": "5.0.0-nightly.20260625",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -27,37 +27,37 @@
|
|
|
27
27
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@aztec/aztec.js": "5.0.0-nightly.
|
|
31
|
-
"@aztec/bb-prover": "5.0.0-nightly.
|
|
32
|
-
"@aztec/blob-client": "5.0.0-nightly.
|
|
33
|
-
"@aztec/blob-lib": "5.0.0-nightly.
|
|
34
|
-
"@aztec/constants": "5.0.0-nightly.
|
|
35
|
-
"@aztec/epoch-cache": "5.0.0-nightly.
|
|
36
|
-
"@aztec/ethereum": "5.0.0-nightly.
|
|
37
|
-
"@aztec/foundation": "5.0.0-nightly.
|
|
38
|
-
"@aztec/l1-artifacts": "5.0.0-nightly.
|
|
39
|
-
"@aztec/node-keystore": "5.0.0-nightly.
|
|
40
|
-
"@aztec/noir-acvm_js": "5.0.0-nightly.
|
|
41
|
-
"@aztec/noir-contracts.js": "5.0.0-nightly.
|
|
42
|
-
"@aztec/noir-protocol-circuits-types": "5.0.0-nightly.
|
|
43
|
-
"@aztec/noir-types": "5.0.0-nightly.
|
|
44
|
-
"@aztec/p2p": "5.0.0-nightly.
|
|
45
|
-
"@aztec/protocol-contracts": "5.0.0-nightly.
|
|
46
|
-
"@aztec/prover-client": "5.0.0-nightly.
|
|
47
|
-
"@aztec/simulator": "5.0.0-nightly.
|
|
48
|
-
"@aztec/slasher": "5.0.0-nightly.
|
|
49
|
-
"@aztec/stdlib": "5.0.0-nightly.
|
|
50
|
-
"@aztec/telemetry-client": "5.0.0-nightly.
|
|
51
|
-
"@aztec/validator-client": "5.0.0-nightly.
|
|
52
|
-
"@aztec/validator-ha-signer": "5.0.0-nightly.
|
|
53
|
-
"@aztec/world-state": "5.0.0-nightly.
|
|
30
|
+
"@aztec/aztec.js": "5.0.0-nightly.20260625",
|
|
31
|
+
"@aztec/bb-prover": "5.0.0-nightly.20260625",
|
|
32
|
+
"@aztec/blob-client": "5.0.0-nightly.20260625",
|
|
33
|
+
"@aztec/blob-lib": "5.0.0-nightly.20260625",
|
|
34
|
+
"@aztec/constants": "5.0.0-nightly.20260625",
|
|
35
|
+
"@aztec/epoch-cache": "5.0.0-nightly.20260625",
|
|
36
|
+
"@aztec/ethereum": "5.0.0-nightly.20260625",
|
|
37
|
+
"@aztec/foundation": "5.0.0-nightly.20260625",
|
|
38
|
+
"@aztec/l1-artifacts": "5.0.0-nightly.20260625",
|
|
39
|
+
"@aztec/node-keystore": "5.0.0-nightly.20260625",
|
|
40
|
+
"@aztec/noir-acvm_js": "5.0.0-nightly.20260625",
|
|
41
|
+
"@aztec/noir-contracts.js": "5.0.0-nightly.20260625",
|
|
42
|
+
"@aztec/noir-protocol-circuits-types": "5.0.0-nightly.20260625",
|
|
43
|
+
"@aztec/noir-types": "5.0.0-nightly.20260625",
|
|
44
|
+
"@aztec/p2p": "5.0.0-nightly.20260625",
|
|
45
|
+
"@aztec/protocol-contracts": "5.0.0-nightly.20260625",
|
|
46
|
+
"@aztec/prover-client": "5.0.0-nightly.20260625",
|
|
47
|
+
"@aztec/simulator": "5.0.0-nightly.20260625",
|
|
48
|
+
"@aztec/slasher": "5.0.0-nightly.20260625",
|
|
49
|
+
"@aztec/stdlib": "5.0.0-nightly.20260625",
|
|
50
|
+
"@aztec/telemetry-client": "5.0.0-nightly.20260625",
|
|
51
|
+
"@aztec/validator-client": "5.0.0-nightly.20260625",
|
|
52
|
+
"@aztec/validator-ha-signer": "5.0.0-nightly.20260625",
|
|
53
|
+
"@aztec/world-state": "5.0.0-nightly.20260625",
|
|
54
54
|
"lodash.chunk": "^4.2.0",
|
|
55
55
|
"tslib": "^2.4.0",
|
|
56
56
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@aztec/archiver": "5.0.0-nightly.
|
|
60
|
-
"@aztec/kv-store": "5.0.0-nightly.
|
|
59
|
+
"@aztec/archiver": "5.0.0-nightly.20260625",
|
|
60
|
+
"@aztec/kv-store": "5.0.0-nightly.20260625",
|
|
61
61
|
"@electric-sql/pglite": "^0.3.14",
|
|
62
62
|
"@jest/globals": "^30.0.0",
|
|
63
63
|
"@types/jest": "^30.0.0",
|
|
@@ -117,6 +117,7 @@ type L1ProcessArgs = {
|
|
|
117
117
|
export const Actions = [
|
|
118
118
|
'invalidate-by-invalid-attestation',
|
|
119
119
|
'invalidate-by-insufficient-attestations',
|
|
120
|
+
'prune',
|
|
120
121
|
'propose',
|
|
121
122
|
'governance-signal',
|
|
122
123
|
'vote-offenses',
|
|
@@ -1060,6 +1061,47 @@ export class SequencerPublisher {
|
|
|
1060
1061
|
);
|
|
1061
1062
|
}
|
|
1062
1063
|
|
|
1064
|
+
/**
|
|
1065
|
+
* Enqueues a `prune()` transaction if the rollup is prunable at the given slot's L1 timestamp.
|
|
1066
|
+
* `prune()` is permissionless and idempotent — if the chain is no longer prunable by send time the
|
|
1067
|
+
* bundle simulation usually drops the entry; on a node without `eth_simulateV1` the bundle is sent
|
|
1068
|
+
* as-is and the prune reverts `Rollup__NothingToPrune` inside `aggregate3(allowFailure: true)`
|
|
1069
|
+
* (a failed action, never a whole-tx revert). Used by the failed-sync fallback so a stuck pending
|
|
1070
|
+
* chain (e.g. bad data blocking sync) can be wound back to recover.
|
|
1071
|
+
* @returns true if a prune request was enqueued, false otherwise.
|
|
1072
|
+
*/
|
|
1073
|
+
public async enqueuePruneIfPrunable(slotNumber: SlotNumber): Promise<boolean> {
|
|
1074
|
+
if (this.lastActions['prune'] === slotNumber) {
|
|
1075
|
+
this.log.debug(`Skipping duplicate prune for slot ${slotNumber}`, { slotNumber });
|
|
1076
|
+
return false;
|
|
1077
|
+
}
|
|
1078
|
+
// Use the SAME timestamp the bundle simulator overrides block.timestamp with at send time
|
|
1079
|
+
// (sequencer-bundle-simulator.ts) so this upfront check and the send-time sim agree. Slot-start
|
|
1080
|
+
// and last-L1-slot both fall within the same L2 slot (and epoch, which is what `canPruneAtTime`
|
|
1081
|
+
// derives), so they agree today; matching the simulator keeps it robust if the contract ever uses
|
|
1082
|
+
// the timestamp more granularly.
|
|
1083
|
+
const ts = getLastL1SlotTimestampForL2Slot(slotNumber, this.epochCache.getL1Constants());
|
|
1084
|
+
const canPrune = await this.rollupContract.canPruneAtTime(ts).catch(err => {
|
|
1085
|
+
this.log.error(`Failed to check canPruneAtTime for slot ${slotNumber}`, err, { slotNumber });
|
|
1086
|
+
return false;
|
|
1087
|
+
});
|
|
1088
|
+
if (!canPrune) {
|
|
1089
|
+
this.log.debug(`Rollup not prunable at slot ${slotNumber}`, { slotNumber });
|
|
1090
|
+
return false;
|
|
1091
|
+
}
|
|
1092
|
+
const request: L1TxRequest = {
|
|
1093
|
+
to: this.rollupContract.address,
|
|
1094
|
+
data: encodeFunctionData({ abi: RollupAbi, functionName: 'prune', args: [] }),
|
|
1095
|
+
};
|
|
1096
|
+
this.log.info(`Enqueuing rollup prune for slot ${slotNumber}`, { slotNumber });
|
|
1097
|
+
return this.enqueueRequest(
|
|
1098
|
+
'prune',
|
|
1099
|
+
request,
|
|
1100
|
+
{ address: this.rollupContract.address, abi: RollupAbi, eventName: 'PrunedPending' },
|
|
1101
|
+
slotNumber,
|
|
1102
|
+
);
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1063
1105
|
/** Enqueues all slashing actions as returned by the slasher client. */
|
|
1064
1106
|
public async enqueueSlashingActions(
|
|
1065
1107
|
actions: ProposerSlashAction[],
|
|
@@ -88,8 +88,8 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
88
88
|
private checkpointProposalJobMetrics: CheckpointProposalJobMetrics;
|
|
89
89
|
private readonly stateLog: Logger;
|
|
90
90
|
|
|
91
|
-
/** The last slot for which we attempted to perform our
|
|
92
|
-
private
|
|
91
|
+
/** The last slot for which we attempted to perform our fallback duties (votes and/or prune) with degraded block production */
|
|
92
|
+
private lastSlotForFallbackAction: SlotNumber | undefined;
|
|
93
93
|
|
|
94
94
|
/** The (checkpoint, slot) of the last invalidation request we successfully simulated, to prevent
|
|
95
95
|
* re-simulating and re-submitting the same invalidation across the many ticks within a single slot. */
|
|
@@ -455,7 +455,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
455
455
|
// We are the proposer and the escape hatch is closed: now run the full sync check before building.
|
|
456
456
|
const syncedTo = await this.checkSync({ ts, slot });
|
|
457
457
|
if (!syncedTo) {
|
|
458
|
-
await this.
|
|
458
|
+
await this.tryVoteAndPruneWhenCannotBuild({ slot, targetSlot });
|
|
459
459
|
return undefined;
|
|
460
460
|
}
|
|
461
461
|
|
|
@@ -475,7 +475,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
475
475
|
});
|
|
476
476
|
// Mark the slot as attempted so a deadline abort is not retried within the same slot. Vote-only actions
|
|
477
477
|
// still need to run because sync can succeed even when it is too late to start building a checkpoint.
|
|
478
|
-
await this.
|
|
478
|
+
await this.tryVoteAndPruneWhenCannotBuild({ slot, targetSlot });
|
|
479
479
|
this.lastSlotForCheckpointProposalJob = targetSlot;
|
|
480
480
|
return undefined;
|
|
481
481
|
}
|
|
@@ -944,16 +944,17 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
944
944
|
}
|
|
945
945
|
|
|
946
946
|
/**
|
|
947
|
-
* Tries to vote on slashing actions and governance when we cannot build and are past the
|
|
948
|
-
* This allows the sequencer to participate in governance/slashing votes even when it
|
|
947
|
+
* Tries to vote on slashing actions and governance and to prune when we cannot build and are past the
|
|
948
|
+
* block-building window. This allows the sequencer to participate in governance/slashing votes even when it
|
|
949
|
+
* cannot build blocks, and to prune the pending chain so it can recover from bad data that is blocking sync.
|
|
949
950
|
*/
|
|
950
|
-
@trackSpan('Sequencer.
|
|
951
|
-
protected async
|
|
951
|
+
@trackSpan('Sequencer.tryVoteAndPruneWhenCannotBuild', ({ slot }) => ({ [Attributes.SLOT_NUMBER]: slot }))
|
|
952
|
+
protected async tryVoteAndPruneWhenCannotBuild(args: { slot: SlotNumber; targetSlot: SlotNumber }): Promise<void> {
|
|
952
953
|
const { slot, targetSlot } = args;
|
|
953
954
|
|
|
954
955
|
// Prevent duplicate attempts in the same slot
|
|
955
|
-
if (this.
|
|
956
|
-
this.log.trace(`Already attempted
|
|
956
|
+
if (this.lastSlotForFallbackAction === slot) {
|
|
957
|
+
this.log.trace(`Already attempted fallback actions in slot ${slot} (skipping)`);
|
|
957
958
|
return;
|
|
958
959
|
}
|
|
959
960
|
|
|
@@ -976,7 +977,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
976
977
|
}
|
|
977
978
|
|
|
978
979
|
// Mark this slot as attempted
|
|
979
|
-
this.
|
|
980
|
+
this.lastSlotForFallbackAction = slot;
|
|
980
981
|
|
|
981
982
|
// Get a publisher for voting
|
|
982
983
|
const { attestorAddress, publisher } = await this.publisherFactory.create(proposer);
|
|
@@ -1001,21 +1002,42 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
1001
1002
|
const votesPromises = voter.enqueueVotes();
|
|
1002
1003
|
const votes = await Promise.all(votesPromises);
|
|
1003
1004
|
|
|
1004
|
-
if (
|
|
1005
|
-
|
|
1005
|
+
// Even if we cannot build, try to prune so a stuck pending chain (e.g. bad data blocking sync) can
|
|
1006
|
+
// recover. prune() is permissionless, so it rides the same fallback multicall as the votes.
|
|
1007
|
+
const pruneEnqueued = await this.tryEnqueuePruneIfPrunable(targetSlot, publisher);
|
|
1008
|
+
|
|
1009
|
+
// Bail if nothing to do
|
|
1010
|
+
if (votes.every(p => !p) && !pruneEnqueued) {
|
|
1011
|
+
this.log.debug(`Nothing to enqueue for slot ${slot} (no votes, not prunable)`);
|
|
1006
1012
|
return;
|
|
1007
1013
|
}
|
|
1008
1014
|
|
|
1009
|
-
|
|
1015
|
+
const [governanceVoteEnqueued, slashingVoteEnqueued] = votes;
|
|
1016
|
+
this.log.info(`Submitting fallback requests in slot ${slot} despite sync failure`, {
|
|
1017
|
+
slot,
|
|
1018
|
+
pruneEnqueued,
|
|
1019
|
+
governanceVoteEnqueued: !!governanceVoteEnqueued,
|
|
1020
|
+
slashingVoteEnqueued: !!slashingVoteEnqueued,
|
|
1021
|
+
});
|
|
1022
|
+
|
|
1010
1023
|
// Votes are EIP-712-signed for `targetSlot` (the pipelined slot in which the multicall is
|
|
1011
1024
|
// expected to mine). Delay submission to the start of `targetSlot` so the tx mines in the
|
|
1012
1025
|
// slot the votes were signed for. We fire-and-forget so we don't block the sequencer's
|
|
1013
1026
|
// work loop while waiting for the target slot to start.
|
|
1014
1027
|
void publisher.sendRequestsAt(targetSlot).catch(err => {
|
|
1015
|
-
this.log.error(`Failed to publish
|
|
1028
|
+
this.log.error(`Failed to publish fallback requests despite sync failure for slot ${slot}`, err, { slot });
|
|
1016
1029
|
});
|
|
1017
1030
|
}
|
|
1018
1031
|
|
|
1032
|
+
private async tryEnqueuePruneIfPrunable(targetSlot: SlotNumber, publisher: SequencerPublisher): Promise<boolean> {
|
|
1033
|
+
try {
|
|
1034
|
+
return await publisher.enqueuePruneIfPrunable(targetSlot);
|
|
1035
|
+
} catch (err) {
|
|
1036
|
+
this.log.error(`Failed to enqueue rollup prune for slot ${targetSlot}`, err, { targetSlot });
|
|
1037
|
+
return false;
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1019
1041
|
/**
|
|
1020
1042
|
* Tries to vote on slashing actions and governance proposals when escape hatch is open.
|
|
1021
1043
|
* This allows the sequencer to participate in voting without performing checkpoint proposal work.
|
|
@@ -1029,13 +1051,13 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
1029
1051
|
const { slot, targetSlot, proposer } = args;
|
|
1030
1052
|
|
|
1031
1053
|
// Prevent duplicate attempts in the same slot
|
|
1032
|
-
if (this.
|
|
1054
|
+
if (this.lastSlotForFallbackAction === slot) {
|
|
1033
1055
|
this.log.trace(`Already attempted to vote in slot ${slot} (escape hatch open, skipping)`);
|
|
1034
1056
|
return;
|
|
1035
1057
|
}
|
|
1036
1058
|
|
|
1037
1059
|
// Mark this slot as attempted
|
|
1038
|
-
this.
|
|
1060
|
+
this.lastSlotForFallbackAction = slot;
|
|
1039
1061
|
|
|
1040
1062
|
const { attestorAddress, publisher } = await this.publisherFactory.create(proposer);
|
|
1041
1063
|
|
|
@@ -1074,7 +1096,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
1074
1096
|
// the multicall mines in the slot the votes were signed for; otherwise the L1 contract reads
|
|
1075
1097
|
// `signaler = getCurrentProposer()` against the wrong slot and signature verification fails
|
|
1076
1098
|
// silently inside Multicall3. Fire-and-forget so we don't block the sequencer's work loop while
|
|
1077
|
-
// waiting for the target slot to start, mirroring
|
|
1099
|
+
// waiting for the target slot to start, mirroring tryVoteAndPruneWhenCannotBuild.
|
|
1078
1100
|
void publisher.sendRequestsAt(targetSlot).catch(err => {
|
|
1079
1101
|
this.log.error(`Failed to publish escape-hatch votes for slot ${slot}`, err, { slot, targetSlot });
|
|
1080
1102
|
});
|