@aztec/sequencer-client 5.0.0-rc.2 → 5.0.1
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 +16 -3
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +17 -3
- package/dest/config.d.ts +2 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +7 -2
- package/dest/global_variable_builder/fee_predictor.d.ts +1 -1
- package/dest/global_variable_builder/fee_predictor.d.ts.map +1 -1
- package/dest/global_variable_builder/fee_predictor.js +11 -1
- package/dest/global_variable_builder/fee_provider.d.ts +1 -1
- package/dest/global_variable_builder/fee_provider.d.ts.map +1 -1
- package/dest/global_variable_builder/fee_provider.js +15 -2
- package/dest/publisher/l1_to_l2_messaging.d.ts +21 -0
- package/dest/publisher/l1_to_l2_messaging.d.ts.map +1 -0
- package/dest/publisher/l1_to_l2_messaging.js +70 -0
- package/dest/publisher/sequencer-publisher.d.ts +1 -1
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +6 -2
- package/dest/publisher/write_json.d.ts +11 -0
- package/dest/publisher/write_json.d.ts.map +1 -0
- package/dest/publisher/write_json.js +57 -0
- package/dest/sequencer/automine/automine_sequencer.d.ts +1 -1
- package/dest/sequencer/automine/automine_sequencer.d.ts.map +1 -1
- package/dest/sequencer/automine/automine_sequencer.js +11 -10
- package/dest/sequencer/checkpoint_proposal_job.d.ts +4 -6
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +27 -24
- package/dest/sequencer/events.d.ts +1 -2
- package/dest/sequencer/events.d.ts.map +1 -1
- package/dest/sequencer/requests_tracker.d.ts +22 -0
- package/dest/sequencer/requests_tracker.d.ts.map +1 -0
- package/dest/sequencer/requests_tracker.js +33 -0
- package/dest/sequencer/sequencer.d.ts +39 -4
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +81 -21
- package/dest/test/utils.d.ts +1 -1
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +1 -0
- package/package.json +27 -27
- package/src/client/sequencer-client.ts +19 -3
- package/src/config.ts +7 -2
- package/src/global_variable_builder/fee_predictor.ts +11 -1
- package/src/global_variable_builder/fee_provider.ts +19 -2
- package/src/publisher/l1_to_l2_messaging.ts +85 -0
- package/src/publisher/sequencer-publisher.ts +8 -2
- package/src/publisher/write_json.ts +78 -0
- package/src/sequencer/automine/automine_sequencer.ts +11 -10
- package/src/sequencer/checkpoint_proposal_job.ts +40 -29
- package/src/sequencer/events.ts +1 -1
- package/src/sequencer/requests_tracker.ts +43 -0
- package/src/sequencer/sequencer.ts +83 -15
- package/src/test/utils.ts +1 -0
|
@@ -308,8 +308,7 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
308
308
|
return;
|
|
309
309
|
}
|
|
310
310
|
try {
|
|
311
|
-
|
|
312
|
-
if (pending > 0) {
|
|
311
|
+
if (await this.deps.p2pClient.hasEligiblePendingTxs(1)) {
|
|
313
312
|
// Fire-and-forget; the build result is delivered via `buildIfPending()` callers,
|
|
314
313
|
// not via the poller.
|
|
315
314
|
void this.buildIfPending().catch((err)=>{
|
|
@@ -340,13 +339,13 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
340
339
|
return undefined;
|
|
341
340
|
}
|
|
342
341
|
await this.reconcileDateProvider();
|
|
343
|
-
|
|
344
|
-
// For mempool-driven builds, wait for at least `minTxsPerBlock` pending txs (or 1 if not set)
|
|
342
|
+
// For mempool-driven builds, wait for at least `minTxsPerBlock` age-eligible txs (or 1 if not set)
|
|
345
343
|
// before building. This mirrors the production sequencer's `waitForMinTxs` behavior, and is
|
|
346
344
|
// required for tests that bundle multiple txs into one block via `setConfig({ minTxsPerBlock })`.
|
|
347
|
-
// Explicit empty-block / warp paths pass `allowEmpty: true
|
|
345
|
+
// Explicit empty-block / warp paths pass `allowEmpty: true`, giving minRequired 0, which
|
|
346
|
+
// hasEligiblePendingTxs treats as always satisfied so the gate is bypassed.
|
|
348
347
|
const minRequired = allowEmpty ? 0 : Math.max(this.deps.config.minTxsPerBlock ?? 1, 1);
|
|
349
|
-
if (
|
|
348
|
+
if (!await this.deps.p2pClient.hasEligiblePendingTxs(minRequired)) {
|
|
350
349
|
return undefined;
|
|
351
350
|
}
|
|
352
351
|
// Decide target slot from the pending block's timestamp — picks up any prior
|
|
@@ -384,7 +383,6 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
384
383
|
blockNumber: nextBlockNumber,
|
|
385
384
|
slot: targetSlot,
|
|
386
385
|
slotTimestamp: slotBoundaryTs,
|
|
387
|
-
txCount,
|
|
388
386
|
allowEmpty
|
|
389
387
|
});
|
|
390
388
|
const checkpointGlobals = await this.deps.globalsBuilder.buildCheckpointGlobalVariables(this.deps.coinbase, this.deps.feeRecipient, SlotNumber(targetSlot));
|
|
@@ -620,9 +618,12 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
620
618
|
await rollupCheatCodes.markAsProven(target);
|
|
621
619
|
// Settlement is a direct L1 storage write that mines no block, unlike a real epoch proof landing
|
|
622
620
|
// on L1. The archiver's L1 sync short-circuits while the L1 block hash is unchanged, so it would
|
|
623
|
-
// never re-read the proven tip until the next build/warp mines a block. Mine one
|
|
624
|
-
//
|
|
625
|
-
|
|
621
|
+
// never re-read the proven tip until the next build/warp mines a block. Mine one L1 block so the
|
|
622
|
+
// block hash advances, then force an immediate sync that observes the new proven checkpoint. Use
|
|
623
|
+
// evmMine (not mineEmptyBlock): mineEmptyBlock drops+re-adds the mempool non-atomically, which can
|
|
624
|
+
// silently lose a test's concurrently-submitted direct L1 tx. evm_mine just includes whatever is
|
|
625
|
+
// pending, which is fine here — we only need the block hash to advance.
|
|
626
|
+
await this.deps.ethCheatCodes.evmMine();
|
|
626
627
|
await this.deps.archiver.syncImmediate();
|
|
627
628
|
this.log.verbose(`Proved up to checkpoint ${target}`, {
|
|
628
629
|
target,
|
|
@@ -20,6 +20,7 @@ import type { InvalidateCheckpointRequest, SequencerPublisher } from '../publish
|
|
|
20
20
|
import type { CheckpointProposalJobMetricsRecorder } from './checkpoint_proposal_job_metrics.js';
|
|
21
21
|
import type { SequencerEvents } from './events.js';
|
|
22
22
|
import type { SequencerMetrics } from './metrics.js';
|
|
23
|
+
import type { RequestsTracker } from './requests_tracker.js';
|
|
23
24
|
import type { SequencerRollupConstants } from './types.js';
|
|
24
25
|
import { SequencerState } from './utils.js';
|
|
25
26
|
/**
|
|
@@ -56,13 +57,12 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
56
57
|
private readonly metrics;
|
|
57
58
|
private readonly checkpointMetrics;
|
|
58
59
|
protected readonly eventEmitter: TypedEventEmitter<SequencerEvents>;
|
|
60
|
+
protected readonly pendingRequests: RequestsTracker;
|
|
59
61
|
private readonly setStateFn;
|
|
60
62
|
readonly tracer: Tracer;
|
|
61
63
|
private readonly proposedCheckpointData?;
|
|
62
64
|
protected readonly log: Logger;
|
|
63
65
|
private readonly checkpointEventLog;
|
|
64
|
-
/** Tracks the fire-and-forget L1 submission promise so it can be awaited during shutdown. */
|
|
65
|
-
private pendingL1Submission;
|
|
66
66
|
private readonly interruptibleSleep;
|
|
67
67
|
private interrupted;
|
|
68
68
|
/**
|
|
@@ -73,7 +73,7 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
73
73
|
*/
|
|
74
74
|
private checkpointSimulationOverridesPlan?;
|
|
75
75
|
private getSignatureContext;
|
|
76
|
-
constructor(targetSlot: SlotNumber, targetEpoch: EpochNumber, checkpointNumber: CheckpointNumber, syncedToBlockNumber: BlockNumber, checkpointedCheckpointNumber: CheckpointNumber, proposer: EthAddress | undefined, publisher: SequencerPublisher, attestorAddress: EthAddress, invalidateCheckpoint: InvalidateCheckpointRequest | undefined, validatorClient: ValidatorClient, globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer, l1ToL2MessageSource: L1ToL2MessageSource, l2BlockSource: L2BlockSource, checkpointsBuilder: FullNodeCheckpointsBuilder, blockSink: L2BlockSink & ProposedCheckpointSink, l1Constants: SequencerRollupConstants, signatureContext: CoordinationSignatureContext, config: ResolvedSequencerConfig, timetable: ProposerTimetable, slasherClient: SlasherClientInterface | undefined, epochCache: EpochCache, dateProvider: DateProvider, metrics: SequencerMetrics, checkpointMetrics: CheckpointProposalJobMetricsRecorder, eventEmitter: TypedEventEmitter<SequencerEvents>, setStateFn: (state: SequencerState, slot: SlotNumber) => void, tracer: Tracer, bindings?: LoggerBindings, proposedCheckpointData?: ProposedCheckpointData | undefined);
|
|
76
|
+
constructor(targetSlot: SlotNumber, targetEpoch: EpochNumber, checkpointNumber: CheckpointNumber, syncedToBlockNumber: BlockNumber, checkpointedCheckpointNumber: CheckpointNumber, proposer: EthAddress | undefined, publisher: SequencerPublisher, attestorAddress: EthAddress, invalidateCheckpoint: InvalidateCheckpointRequest | undefined, validatorClient: ValidatorClient, globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer, l1ToL2MessageSource: L1ToL2MessageSource, l2BlockSource: L2BlockSource, checkpointsBuilder: FullNodeCheckpointsBuilder, blockSink: L2BlockSink & ProposedCheckpointSink, l1Constants: SequencerRollupConstants, signatureContext: CoordinationSignatureContext, config: ResolvedSequencerConfig, timetable: ProposerTimetable, slasherClient: SlasherClientInterface | undefined, epochCache: EpochCache, dateProvider: DateProvider, metrics: SequencerMetrics, checkpointMetrics: CheckpointProposalJobMetricsRecorder, eventEmitter: TypedEventEmitter<SequencerEvents>, pendingRequests: RequestsTracker, setStateFn: (state: SequencerState, slot: SlotNumber) => void, tracer: Tracer, bindings?: LoggerBindings, proposedCheckpointData?: ProposedCheckpointData | undefined);
|
|
77
77
|
/**
|
|
78
78
|
* The wall-clock slot during which this job builds, i.e. the slot one before {@link targetSlot} under
|
|
79
79
|
* proposer pipelining. Also the slot of the parent checkpoint this job builds on top of.
|
|
@@ -85,8 +85,6 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
85
85
|
* its own target slot, so callers only pass the state.
|
|
86
86
|
*/
|
|
87
87
|
private setState;
|
|
88
|
-
/** Awaits the pending L1 submission if one is in progress. Call during shutdown. */
|
|
89
|
-
awaitPendingSubmission(): Promise<void>;
|
|
90
88
|
/** Interrupts job-owned waits, including the publisher's send-at-slot sleep, so shutdown can finish. */
|
|
91
89
|
interrupt(): void;
|
|
92
90
|
private awaitInterruptibleSleep;
|
|
@@ -157,4 +155,4 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
157
155
|
protected waitForTxsPollingInterval(): Promise<void>;
|
|
158
156
|
getPublisher(): SequencerPublisher;
|
|
159
157
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFtQyxNQUFNLG9CQUFvQixDQUFDO0FBRXRGLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsVUFBVSxFQUNYLE1BQU0saUNBQWlDLENBQUM7QUFTekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBMEIsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RixPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBR0wsT0FBTyxFQUNQLEtBQUssV0FBVyxFQUNoQixLQUFLLGFBQWEsRUFHbEIsS0FBSyxzQkFBc0IsRUFFNUIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsS0FBSyxVQUFVLEVBQ2YsS0FBSyxzQkFBc0IsRUFJNUIsTUFBTSwwQkFBMEIsQ0FBQztBQUdsQyxPQUFPLEVBR0wsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxzQkFBc0IsRUFDNUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRyxPQUFPLEtBQUssRUFNViw0QkFBNEIsRUFD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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":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAmC,MAAM,oBAAoB,CAAC;AAEtF,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,UAAU,EACX,MAAM,iCAAiC,CAAC;AASzC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,KAAK,iBAAiB,EAA0B,MAAM,yBAAyB,CAAC;AACzF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAGL,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}
|
|
@@ -446,7 +446,7 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
446
446
|
import { InterruptibleSleep } from '@aztec/foundation/sleep';
|
|
447
447
|
import { Timer } from '@aztec/foundation/timer';
|
|
448
448
|
import { isErrorClass, unfreeze } from '@aztec/foundation/types';
|
|
449
|
-
import { CommitteeAttestationsAndSigners, MaliciousCommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
449
|
+
import { CommitteeAttestationsAndSigners, MaliciousCommitteeAttestationsAndSigners, MaliciousYParityCommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
450
450
|
import { buildCheckpointSimulationOverridesPlan, getPreviousCheckpointOutHashes, validateCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
451
451
|
import { computeQuorum, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
452
452
|
import { Gas } from '@aztec/stdlib/gas';
|
|
@@ -501,6 +501,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
501
501
|
metrics;
|
|
502
502
|
checkpointMetrics;
|
|
503
503
|
eventEmitter;
|
|
504
|
+
pendingRequests;
|
|
504
505
|
setStateFn;
|
|
505
506
|
tracer;
|
|
506
507
|
proposedCheckpointData;
|
|
@@ -545,7 +546,6 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
545
546
|
}
|
|
546
547
|
log;
|
|
547
548
|
checkpointEventLog;
|
|
548
|
-
/** Tracks the fire-and-forget L1 submission promise so it can be awaited during shutdown. */ pendingL1Submission;
|
|
549
549
|
interruptibleSleep;
|
|
550
550
|
interrupted;
|
|
551
551
|
/**
|
|
@@ -558,7 +558,9 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
558
558
|
return this.signatureContext;
|
|
559
559
|
}
|
|
560
560
|
constructor(targetSlot, targetEpoch, checkpointNumber, syncedToBlockNumber, checkpointedCheckpointNumber, // TODO(palla/mbps): Can we remove the proposer in favor of attestorAddress? Need to check fisherman-node flows.
|
|
561
|
-
proposer, publisher, attestorAddress, invalidateCheckpoint, validatorClient, globalsBuilder, p2pClient, worldState, l1ToL2MessageSource, l2BlockSource, checkpointsBuilder, blockSink, l1Constants, signatureContext, config, timetable, slasherClient, epochCache, dateProvider, metrics, checkpointMetrics, eventEmitter,
|
|
561
|
+
proposer, publisher, attestorAddress, invalidateCheckpoint, validatorClient, globalsBuilder, p2pClient, worldState, l1ToL2MessageSource, l2BlockSource, checkpointsBuilder, blockSink, l1Constants, signatureContext, config, timetable, slasherClient, epochCache, dateProvider, metrics, checkpointMetrics, eventEmitter, // Shared with the owning sequencer, which drains it during shutdown; the fire-and-forget L1
|
|
562
|
+
// submission this job backgrounds is tracked here rather than in a job-local tracker.
|
|
563
|
+
pendingRequests, setStateFn, tracer, bindings, proposedCheckpointData){
|
|
562
564
|
this.targetSlot = targetSlot;
|
|
563
565
|
this.targetEpoch = targetEpoch;
|
|
564
566
|
this.checkpointNumber = checkpointNumber;
|
|
@@ -586,6 +588,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
586
588
|
this.metrics = metrics;
|
|
587
589
|
this.checkpointMetrics = checkpointMetrics;
|
|
588
590
|
this.eventEmitter = eventEmitter;
|
|
591
|
+
this.pendingRequests = pendingRequests;
|
|
589
592
|
this.setStateFn = setStateFn;
|
|
590
593
|
this.tracer = tracer;
|
|
591
594
|
this.proposedCheckpointData = proposedCheckpointData;
|
|
@@ -613,10 +616,6 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
613
616
|
*/ setState(state) {
|
|
614
617
|
this.setStateFn(state, this.targetSlot);
|
|
615
618
|
}
|
|
616
|
-
/** Awaits the pending L1 submission if one is in progress. Call during shutdown. */ async awaitPendingSubmission() {
|
|
617
|
-
this.log.info('Awaiting pending L1 payload submission');
|
|
618
|
-
await this.pendingL1Submission;
|
|
619
|
-
}
|
|
620
619
|
/** Interrupts job-owned waits, including the publisher's send-at-slot sleep, so shutdown can finish. */ interrupt() {
|
|
621
620
|
this.interrupted = true;
|
|
622
621
|
this.interruptibleSleep.interrupt(true);
|
|
@@ -667,7 +666,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
667
666
|
// signature verification to fail silently inside Multicall3. Delay submission to the
|
|
668
667
|
// start of `targetSlot` so the tx mines in the slot the vote was signed for.
|
|
669
668
|
if (!this.config.fishermanMode) {
|
|
670
|
-
this.
|
|
669
|
+
this.pendingRequests.trackRequest(this.publisher.sendRequestsAt(this.targetSlot), ()=>this.interrupt());
|
|
671
670
|
}
|
|
672
671
|
return undefined;
|
|
673
672
|
}
|
|
@@ -679,13 +678,13 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
679
678
|
return checkpoint;
|
|
680
679
|
}
|
|
681
680
|
// Background the attestation → signing → L1 pipeline so the work loop is unblocked
|
|
682
|
-
this.
|
|
681
|
+
this.pendingRequests.trackRequest(this.waitForAttestationsAndEnqueueSubmissionAsync(broadcast, votesPromises), ()=>this.interrupt());
|
|
683
682
|
// Return the built checkpoint immediately — the work loop is now unblocked
|
|
684
683
|
return checkpoint;
|
|
685
684
|
}
|
|
686
685
|
/**
|
|
687
686
|
* Background pipeline: collects attestations, signs them, enqueues the checkpoint, and submits to L1.
|
|
688
|
-
* Runs as a fire-and-forget task
|
|
687
|
+
* Runs as a fire-and-forget task tracked in the sequencer's shared tracker so the work loop is unblocked.
|
|
689
688
|
*/ async waitForAttestationsAndEnqueueSubmissionAsync(broadcast, votesPromises) {
|
|
690
689
|
const { checkpoint } = broadcast;
|
|
691
690
|
try {
|
|
@@ -1314,7 +1313,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1314
1313
|
});
|
|
1315
1314
|
try {
|
|
1316
1315
|
// Wait until we have enough txs to build the block
|
|
1317
|
-
const {
|
|
1316
|
+
const { canStartBuilding, minTxs } = await this.waitForMinTxs(opts);
|
|
1318
1317
|
if (!canStartBuilding) {
|
|
1319
1318
|
this.logCheckpointEvent('block-build-failed', `Block build failed for slot ${this.targetSlot}`, {
|
|
1320
1319
|
reason: 'insufficient_txs',
|
|
@@ -1322,21 +1321,18 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1322
1321
|
slot: this.targetSlot,
|
|
1323
1322
|
checkpointNumber: this.checkpointNumber,
|
|
1324
1323
|
indexWithinCheckpoint,
|
|
1325
|
-
availableTxs,
|
|
1326
1324
|
minTxs
|
|
1327
1325
|
});
|
|
1328
|
-
this.log.verbose(`Not enough txs to build block ${blockNumber} at index ${indexWithinCheckpoint} in slot ${this.targetSlot} (
|
|
1326
|
+
this.log.verbose(`Not enough age-eligible txs to build block ${blockNumber} at index ${indexWithinCheckpoint} in slot ${this.targetSlot} (needs ${minTxs} eligible)`, {
|
|
1329
1327
|
reason: 'insufficient_txs',
|
|
1330
1328
|
blockNumber,
|
|
1331
1329
|
slot: this.targetSlot,
|
|
1332
1330
|
checkpointNumber: this.checkpointNumber,
|
|
1333
1331
|
indexWithinCheckpoint,
|
|
1334
|
-
availableTxs,
|
|
1335
1332
|
minTxs
|
|
1336
1333
|
});
|
|
1337
1334
|
this.eventEmitter.emit('block-tx-count-check-failed', {
|
|
1338
1335
|
minTxs,
|
|
1339
|
-
availableTxs,
|
|
1340
1336
|
slot: this.targetSlot
|
|
1341
1337
|
});
|
|
1342
1338
|
this.metrics.recordBlockProposalFailed('insufficient_txs');
|
|
@@ -1351,7 +1347,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1351
1347
|
const pendingTxs = filter(this.p2pClient.iterateEligiblePendingTxs({
|
|
1352
1348
|
includeProof: !!this.config.publishTxsWithProposals
|
|
1353
1349
|
}), (tx)=>!txHashesAlreadyIncluded.has(tx.txHash.toString()));
|
|
1354
|
-
this.log.debug(`Building block ${blockNumber} at index ${indexWithinCheckpoint} for slot ${this.targetSlot}
|
|
1350
|
+
this.log.debug(`Building block ${blockNumber} at index ${indexWithinCheckpoint} for slot ${this.targetSlot}`, {
|
|
1355
1351
|
slot: this.targetSlot,
|
|
1356
1352
|
blockNumber,
|
|
1357
1353
|
indexWithinCheckpoint
|
|
@@ -1488,30 +1484,29 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1488
1484
|
const minTxs = indexWithinCheckpoint > 0 && this.config.minTxsPerBlock === 0 ? 1 : this.config.minTxsPerBlock;
|
|
1489
1485
|
// Latest time to keep waiting for txs: wait_for_txs_deadline = block_build_deadline(k) - min_block_duration.
|
|
1490
1486
|
const startBuildingDeadline = buildDeadline ? new Date(buildDeadline.getTime() - this.timetable.minBlockDuration * 1000) : undefined;
|
|
1491
|
-
|
|
1492
|
-
|
|
1487
|
+
// Gate on age-eligible txs so we don't start building on txs the builder would then filter out for being
|
|
1488
|
+
// too fresh. hasEligiblePendingTxs early-exits once minTxs are eligible instead of counting the whole pool.
|
|
1489
|
+
while(!forceCreate && !await this.p2pClient.hasEligiblePendingTxs(minTxs)){
|
|
1493
1490
|
// If we're past deadline, or we have no deadline, give up
|
|
1494
1491
|
const now = this.dateProvider.nowAsDate();
|
|
1495
1492
|
if (startBuildingDeadline === undefined || now >= startBuildingDeadline) {
|
|
1496
1493
|
return {
|
|
1497
1494
|
canStartBuilding: false,
|
|
1498
|
-
availableTxs,
|
|
1499
1495
|
minTxs
|
|
1500
1496
|
};
|
|
1501
1497
|
}
|
|
1502
1498
|
// Wait a bit before checking again
|
|
1503
1499
|
this.setState(SequencerState.WAITING_FOR_TXS);
|
|
1504
|
-
this.log.verbose(`Waiting for
|
|
1500
|
+
this.log.verbose(`Waiting for ${minTxs} age-eligible txs to build block ${blockNumber} at index ${indexWithinCheckpoint} in slot ${this.targetSlot}`, {
|
|
1505
1501
|
blockNumber,
|
|
1506
1502
|
slot: this.targetSlot,
|
|
1507
|
-
indexWithinCheckpoint
|
|
1503
|
+
indexWithinCheckpoint,
|
|
1504
|
+
minTxs
|
|
1508
1505
|
});
|
|
1509
1506
|
await this.waitForTxsPollingInterval();
|
|
1510
|
-
availableTxs = await this.p2pClient.getPendingTxCount();
|
|
1511
1507
|
}
|
|
1512
1508
|
return {
|
|
1513
1509
|
canStartBuilding: true,
|
|
1514
|
-
availableTxs,
|
|
1515
1510
|
minTxs
|
|
1516
1511
|
};
|
|
1517
1512
|
}
|
|
@@ -1589,7 +1584,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1589
1584
|
submittedCount: trimmed.length
|
|
1590
1585
|
});
|
|
1591
1586
|
// Manipulate the attestations if we've been configured to do so
|
|
1592
|
-
if (this.config.injectFakeAttestation || this.config.injectHighSValueAttestation || this.config.injectUnrecoverableSignatureAttestation || this.config.shuffleAttestationOrdering) {
|
|
1587
|
+
if (this.config.injectFakeAttestation || this.config.injectHighSValueAttestation || this.config.injectUnrecoverableSignatureAttestation || this.config.injectYParityAttestation || this.config.shuffleAttestationOrdering) {
|
|
1593
1588
|
return this.manipulateAttestations(proposal.slotNumber, epoch, seed, committee, sorted);
|
|
1594
1589
|
}
|
|
1595
1590
|
return new CommitteeAttestationsAndSigners(sorted, this.getSignatureContext());
|
|
@@ -1661,6 +1656,14 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
|
|
|
1661
1656
|
}
|
|
1662
1657
|
return new CommitteeAttestationsAndSigners(attestations, this.getSignatureContext());
|
|
1663
1658
|
}
|
|
1659
|
+
if (this.config.injectYParityAttestation) {
|
|
1660
|
+
// Force every non-proposer signed slot's recovery byte to yParity (v ∈ {0, 1}) form in the packed L1
|
|
1661
|
+
// tuple, after packAttestations has canonicalized it. The proposer's own slot is left canonical so
|
|
1662
|
+
// propose() still passes verifyProposer. Models a malicious proposer landing a checkpoint L1 accepts
|
|
1663
|
+
// but that can never be proven (ECDSA.recover rejects v ∉ {27, 28}).
|
|
1664
|
+
this.log.warn(`Injecting yParity attestations in checkpoint for slot ${slotNumber} (proposer #${proposerIndex})`);
|
|
1665
|
+
return new MaliciousYParityCommitteeAttestationsAndSigners(attestations, proposerIndex, this.getSignatureContext());
|
|
1666
|
+
}
|
|
1664
1667
|
if (this.config.shuffleAttestationOrdering) {
|
|
1665
1668
|
this.log.warn(`Shuffling attestation ordering in checkpoint for slot ${slotNumber} (proposer #${proposerIndex})`);
|
|
1666
1669
|
const shuffled = [
|
|
@@ -52,7 +52,6 @@ export type SequencerEvents = {
|
|
|
52
52
|
}) => void;
|
|
53
53
|
['block-tx-count-check-failed']: (args: {
|
|
54
54
|
minTxs: number;
|
|
55
|
-
availableTxs: number;
|
|
56
55
|
slot: SlotNumber;
|
|
57
56
|
}) => void;
|
|
58
57
|
['block-build-failed']: (args: {
|
|
@@ -101,4 +100,4 @@ export type SequencerEvents = {
|
|
|
101
100
|
reason: string;
|
|
102
101
|
}) => void;
|
|
103
102
|
};
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELE1BQU0sTUFBTSxlQUFlLEdBQUc7SUFDNUI7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRTtRQUN4QixRQUFRLEVBQUUsY0FBYyxDQUFDO1FBQ3pCLFFBQVEsRUFBRSxjQUFjLENBQUM7UUFDekIscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDL0IsVUFBVSxDQUFDLEVBQUUsVUFBVSxDQUFDO0tBQ3pCLEtBQUssSUFBSSxDQUFDO0lBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFDL0IsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUN2QixnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztRQUNuQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7UUFDM0IsY0FBYyxFQUFFLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUM3QyxnQkFBZ0IsRUFBRSxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7S0FDaEQsS0FBSyxJQUFJLENBQUM7SUFDWCxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQTtLQUFFLEtBQUssSUFBSSxDQUFDO0lBQ3ZGLENBQUMsNkJBQTZCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRTtRQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFBQyxJQUFJLEVBQUUsVUFBVSxDQUFBO0tBQUUsS0FBSyxJQUFJLENBQUM7SUFDdEYsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFO1FBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUFDLElBQUksRUFBRSxVQUFVLENBQUE7S0FBRSxLQUFLLElBQUksQ0FBQztJQUM3RSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFDekIsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUN6QixTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQ3JCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO1FBQ25DLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDO1FBQzdDLElBQUksRUFBRSxVQUFVLENBQUM7UUFDakIsU0FBUyxFQUFFLFVBQVUsQ0FBQztLQUN2QixLQUFLLElBQUksQ0FBQztJQUNYLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRTtRQUFFLElBQUksRUFBRSxVQUFVLENBQUE7S0FBRSxLQUFLLElBQUksQ0FBQztJQUMzRDs7Ozs7T0FLRztJQUNILENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRTtRQUNuQyxJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQ2pCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO1FBQ25DLE1BQU0sRUFBRSxNQUFNLENBQUM7S0FDaEIsS0FBSyxJQUFJLENBQUM7SUFDWCxDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFDcEMsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUNqQixpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzdCLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0tBQzNCLEtBQUssSUFBSSxDQUFDO0lBQ1gsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFO1FBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDO1FBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQTtLQUFFLEtBQUssSUFBSSxDQUFDO0lBQzdGLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRTtRQUFFLEtBQUssRUFBRSxLQUFLLENBQUE7S0FBRSxLQUFLLElBQUksQ0FBQztJQUN2RCxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFDekMsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUNqQixnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztRQUNuQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0tBQ2hCLEtBQUssSUFBSSxDQUFDO0NBQ1osQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/sequencer/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;;;;;;;OAYG;IACH,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QACxB,QAAQ,EAAE,cAAc,CAAC;QACzB,QAAQ,EAAE,cAAc,CAAC;QACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,KAAK,IAAI,CAAC;IACX;;;;;;;;;;;;;;;;OAgBG;IACH,CAAC,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC/B,UAAU,EAAE,UAAU,CAAC;QACvB,gBAAgB,EAAE,gBAAgB,CAAC;QACnC,iBAAiB,EAAE,OAAO,CAAC;QAC3B,cAAc,EAAE,gBAAgB,GAAG,SAAS,CAAC;QAC7C,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;KAChD,KAAK,IAAI,CAAC;IACX,CAAC,8BAA8B,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;IACvF,CAAC,6BAA6B,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/sequencer/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks fire-and-forget requests so a shutdown path can interrupt any in-flight work and await it to
|
|
3
|
+
* settle. Each tracked request is a promise plus an optional interrupt callback; the entry removes itself
|
|
4
|
+
* from the bag once its promise settles, so the tracker only ever holds requests that are still in flight.
|
|
5
|
+
*/
|
|
6
|
+
export declare class RequestsTracker {
|
|
7
|
+
private readonly requests;
|
|
8
|
+
private nextId;
|
|
9
|
+
/** Number of in-flight requests currently tracked. */
|
|
10
|
+
get size(): number;
|
|
11
|
+
/**
|
|
12
|
+
* Tracks a fire-and-forget request. `interrupt`, when provided, is invoked by {@link interruptRequests}
|
|
13
|
+
* to cancel the in-flight work so its promise settles promptly. The entry auto-removes once `promise`
|
|
14
|
+
* settles, whether it resolves or rejects.
|
|
15
|
+
*/
|
|
16
|
+
trackRequest(promise: Promise<unknown>, interrupt?: () => void): void;
|
|
17
|
+
/** Interrupts every in-flight request that was tracked with an interrupt callback. */
|
|
18
|
+
interruptRequests(): void;
|
|
19
|
+
/** Awaits every currently in-flight request to settle. */
|
|
20
|
+
awaitRequests(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdHNfdHJhY2tlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9yZXF1ZXN0c190cmFja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOzs7O0dBSUc7QUFDSCxxQkFBYSxlQUFlO0lBQzFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFxQztJQUM5RCxPQUFPLENBQUMsTUFBTSxDQUFLO0lBRW5CLHNEQUFzRDtJQUN0RCxJQUFXLElBQUksSUFBSSxNQUFNLENBRXhCO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FPM0U7SUFFRCxzRkFBc0Y7SUFDL0UsaUJBQWlCLElBQUksSUFBSSxDQUkvQjtJQUVELDBEQUEwRDtJQUM3QyxhQUFhLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUUxQztDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests_tracker.d.ts","sourceRoot":"","sources":["../../src/sequencer/requests_tracker.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,MAAM,CAAK;IAEnB,sDAAsD;IACtD,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAO3E;IAED,sFAAsF;IAC/E,iBAAiB,IAAI,IAAI,CAI/B;IAED,0DAA0D;IAC7C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** A tracked request: the awaitable to wait on, plus an optional interrupt to cancel it early. */ /**
|
|
2
|
+
* Tracks fire-and-forget requests so a shutdown path can interrupt any in-flight work and await it to
|
|
3
|
+
* settle. Each tracked request is a promise plus an optional interrupt callback; the entry removes itself
|
|
4
|
+
* from the bag once its promise settles, so the tracker only ever holds requests that are still in flight.
|
|
5
|
+
*/ export class RequestsTracker {
|
|
6
|
+
requests = new Map();
|
|
7
|
+
nextId = 0;
|
|
8
|
+
/** Number of in-flight requests currently tracked. */ get size() {
|
|
9
|
+
return this.requests.size;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Tracks a fire-and-forget request. `interrupt`, when provided, is invoked by {@link interruptRequests}
|
|
13
|
+
* to cancel the in-flight work so its promise settles promptly. The entry auto-removes once `promise`
|
|
14
|
+
* settles, whether it resolves or rejects.
|
|
15
|
+
*/ trackRequest(promise, interrupt) {
|
|
16
|
+
const id = this.nextId++;
|
|
17
|
+
const settled = promise.then(()=>this.requests.delete(id), ()=>this.requests.delete(id));
|
|
18
|
+
this.requests.set(id, {
|
|
19
|
+
promise: settled,
|
|
20
|
+
interrupt
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/** Interrupts every in-flight request that was tracked with an interrupt callback. */ interruptRequests() {
|
|
24
|
+
for (const { interrupt } of this.requests.values()){
|
|
25
|
+
interrupt?.();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Awaits every currently in-flight request to settle. */ async awaitRequests() {
|
|
29
|
+
await Promise.all([
|
|
30
|
+
...this.requests.values()
|
|
31
|
+
].map((request)=>request.promise));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -4,6 +4,7 @@ import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/f
|
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
6
|
import { type Logger } from '@aztec/foundation/log';
|
|
7
|
+
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
7
8
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
8
9
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
9
10
|
import type { P2P } from '@aztec/p2p';
|
|
@@ -21,6 +22,7 @@ import type { SequencerPublisherFactory } from '../publisher/sequencer-publisher
|
|
|
21
22
|
import type { InvalidateCheckpointRequest, SequencerPublisher } from '../publisher/sequencer-publisher.js';
|
|
22
23
|
import { CheckpointProposalJob } from './checkpoint_proposal_job.js';
|
|
23
24
|
import type { SequencerEvents } from './events.js';
|
|
25
|
+
import { RequestsTracker } from './requests_tracker.js';
|
|
24
26
|
import type { SequencerRollupConstants } from './types.js';
|
|
25
27
|
import { SequencerState } from './utils.js';
|
|
26
28
|
export { SequencerState };
|
|
@@ -58,7 +60,7 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
58
60
|
protected rollupContract: RollupContract;
|
|
59
61
|
protected telemetry: TelemetryClient;
|
|
60
62
|
protected log: Logger;
|
|
61
|
-
|
|
63
|
+
protected runningPromise?: RunningPromise;
|
|
62
64
|
private state;
|
|
63
65
|
private stateSlotNumber;
|
|
64
66
|
/** Wall-clock time (ms, via the date provider) at which the current state was entered. */
|
|
@@ -81,6 +83,16 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
81
83
|
private lastEpochForStrategyComparison;
|
|
82
84
|
/** The last checkpoint proposal job, tracked so we can await its pending L1 submission during shutdown. */
|
|
83
85
|
protected lastCheckpointProposalJob: CheckpointProposalJob | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* In-flight fire-and-forget requests that {@link stop} interrupts and drains, and {@link pause} awaits
|
|
88
|
+
* untouched: the checkpoint proposal jobs' backgrounded L1 submissions (each job is handed this shared
|
|
89
|
+
* tracker) plus the sequencer's own fallback submissions (votes/prune when we cannot build, or
|
|
90
|
+
* escape-hatch votes). Each fallback send is gated by its wrapper publisher's interruptible target-slot
|
|
91
|
+
* sleep; the tracked interrupt wakes that sleep so the send short-circuits without publishing. A wrapper
|
|
92
|
+
* is created for a single send and is never restarted, so once interrupted its sleeper can never publish
|
|
93
|
+
* a stale-slot tx, even after the pooled publishers are restarted by a later {@link start}.
|
|
94
|
+
*/
|
|
95
|
+
protected readonly pendingRequests: RequestsTracker;
|
|
84
96
|
/** Proposer schedule and block sub-slot timetable for the sequencer, rebuilt on every config update. */
|
|
85
97
|
protected timetable: ProposerTimetable;
|
|
86
98
|
/** Config for the sequencer */
|
|
@@ -126,12 +138,34 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
126
138
|
private assertConfigMeetsNetworkTxLimits;
|
|
127
139
|
/** Initializes the sequencer (precomputes tables). Takes about 3s. */
|
|
128
140
|
init(): void;
|
|
129
|
-
/**
|
|
141
|
+
/**
|
|
142
|
+
* Starts (or restarts) the sequencer and moves it to the IDLE state. Idempotent: a start while already
|
|
143
|
+
* running is a no-op, so it never orphans the previous poll loop. A start while STOPPING throws, since the
|
|
144
|
+
* in-flight stop would mark the fresh loop's state STOPPED and orphan it — silently doing nothing would
|
|
145
|
+
* leave the caller believing the sequencer is running when it is on its way to STOPPED. Safe to call after
|
|
146
|
+
* a previous {@link stop} has resolved; the caller must also restart the publishers (see
|
|
147
|
+
* {@link SequencerClient.start}) so L1 publishing is re-enabled.
|
|
148
|
+
*/
|
|
130
149
|
start(): void;
|
|
131
150
|
/** Triggers an immediate run of the sequencer, bypassing the polling interval. */
|
|
132
151
|
trigger(): Promise<void> | undefined;
|
|
133
|
-
/**
|
|
152
|
+
/**
|
|
153
|
+
* Stops the sequencer from building blocks and moves it to STOPPED state, interrupting the in-flight
|
|
154
|
+
* work() iteration and its pending L1 submissions for a fast shutdown, then draining before returning.
|
|
155
|
+
* Idempotent: a second call while already stopped or stopping is a no-op. Lifecycle calls are expected
|
|
156
|
+
* to be serialized by the caller. For a restartable pause that lets in-flight work finish untouched
|
|
157
|
+
* (e.g. around a test clock warp), use {@link pause} instead.
|
|
158
|
+
*/
|
|
134
159
|
stop(): Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Gracefully pauses block production so the sequencer can later be resumed with {@link start}: halts the
|
|
162
|
+
* poll loop and waits for the in-flight work() iteration and every pending L1 submission / fallback send
|
|
163
|
+
* to finish, without interrupting them. No interrupt lands mid-build, so no spurious checkpoint-error is
|
|
164
|
+
* emitted and no enqueued checkpoint is dropped. Deliberately does not stop inner services (validator/HA
|
|
165
|
+
* signer, publishers), so the slashing-protection store stays open and the sequencer stays restartable.
|
|
166
|
+
* Used by tests that pause sequencers around an L1 clock warp. Idempotent.
|
|
167
|
+
*/
|
|
168
|
+
pause(): Promise<void>;
|
|
135
169
|
/** Main sequencer loop with a try/catch */
|
|
136
170
|
protected safeWork(): Promise<void>;
|
|
137
171
|
/** Returns the current state of the sequencer. */
|
|
@@ -261,6 +295,7 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
261
295
|
injectFakeAttestation: boolean;
|
|
262
296
|
injectHighSValueAttestation: boolean;
|
|
263
297
|
injectUnrecoverableSignatureAttestation: boolean;
|
|
298
|
+
injectYParityAttestation: boolean;
|
|
264
299
|
fishermanMode: boolean;
|
|
265
300
|
shuffleAttestationOrdering: boolean;
|
|
266
301
|
blockDurationMs: number;
|
|
@@ -286,4 +321,4 @@ type SequencerSyncCheckResult = {
|
|
|
286
321
|
syncedL2Slot: SlotNumber;
|
|
287
322
|
pendingChainValidationStatus: ValidateCheckpointResult;
|
|
288
323
|
};
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQW1DLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFvQixLQUFLLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsYUFBYSxFQUNiLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDekIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsS0FBSyxVQUFVLEVBQ2YsS0FBSyxzQkFBc0IsRUFFNUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU94RCxPQUFPLEVBQ0wsS0FBSyx1QkFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAmC,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEzG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|