@aztec/sequencer-client 0.0.1-commit.993d240 → 0.0.1-commit.9a89641
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/README.md +40 -41
- 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 +18 -14
- package/dest/config.d.ts +9 -4
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +29 -15
- 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 +27 -5
- package/dest/global_variable_builder/global_builder.d.ts +3 -16
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +2 -25
- 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 +5 -1
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +11 -1
- 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/l1_tx_failed_store/failed_tx_store.d.ts +48 -8
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -1
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +68 -1
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +2 -2
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +1 -1
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +4 -2
- package/dest/publisher/l1_tx_failed_store/index.d.ts +2 -2
- package/dest/publisher/l1_tx_failed_store/index.d.ts.map +1 -1
- package/dest/publisher/l1_tx_failed_store/index.js +1 -0
- package/dest/publisher/sequencer-publisher.d.ts +39 -10
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +403 -75
- 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_factory.d.ts +5 -3
- package/dest/sequencer/automine/automine_factory.d.ts.map +1 -1
- package/dest/sequencer/automine/automine_factory.js +2 -1
- package/dest/sequencer/automine/automine_sequencer.d.ts +43 -5
- package/dest/sequencer/automine/automine_sequencer.d.ts.map +1 -1
- package/dest/sequencer/automine/automine_sequencer.js +209 -19
- package/dest/sequencer/automine/index.d.ts +3 -0
- package/dest/sequencer/automine/index.d.ts.map +1 -0
- package/dest/sequencer/automine/index.js +2 -0
- package/dest/sequencer/checkpoint_proposal_job.d.ts +28 -15
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +158 -117
- package/dest/sequencer/events.d.ts +16 -4
- package/dest/sequencer/events.d.ts.map +1 -1
- package/dest/sequencer/index.d.ts +1 -3
- package/dest/sequencer/index.d.ts.map +1 -1
- package/dest/sequencer/index.js +0 -2
- package/dest/sequencer/missing_committee.d.ts +72 -0
- package/dest/sequencer/missing_committee.d.ts.map +1 -0
- package/dest/sequencer/missing_committee.js +139 -0
- 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 +113 -28
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +352 -162
- package/dest/test/index.d.ts +3 -3
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/utils.d.ts +15 -1
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +18 -1
- package/package.json +29 -28
- package/src/client/sequencer-client.ts +20 -14
- package/src/config.ts +32 -16
- package/src/global_variable_builder/fee_predictor.ts +11 -1
- package/src/global_variable_builder/fee_provider.ts +27 -5
- package/src/global_variable_builder/global_builder.ts +2 -34
- package/src/index.ts +1 -10
- package/src/publisher/config.ts +22 -1
- package/src/publisher/l1_to_l2_messaging.ts +85 -0
- package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +114 -7
- package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +4 -3
- package/src/publisher/l1_tx_failed_store/index.ts +1 -1
- package/src/publisher/sequencer-publisher.ts +430 -86
- package/src/publisher/write_json.ts +78 -0
- package/src/sequencer/README.md +16 -6
- package/src/sequencer/automine/README.md +18 -4
- package/src/sequencer/automine/automine_factory.ts +8 -1
- package/src/sequencer/automine/automine_sequencer.ts +229 -21
- package/src/sequencer/automine/index.ts +6 -0
- package/src/sequencer/checkpoint_proposal_job.ts +177 -132
- package/src/sequencer/events.ts +16 -3
- package/src/sequencer/index.ts +0 -2
- package/src/sequencer/missing_committee.ts +192 -0
- package/src/sequencer/requests_tracker.ts +43 -0
- package/src/sequencer/sequencer.ts +382 -176
- package/src/test/index.ts +2 -2
- package/src/test/utils.ts +33 -0
- package/dest/sequencer/chain_state_overrides.d.ts +0 -61
- package/dest/sequencer/chain_state_overrides.d.ts.map +0 -1
- package/dest/sequencer/chain_state_overrides.js +0 -98
- package/dest/sequencer/timetable.d.ts +0 -101
- package/dest/sequencer/timetable.d.ts.map +0 -1
- package/dest/sequencer/timetable.js +0 -231
- package/src/sequencer/chain_state_overrides.ts +0 -162
- package/src/sequencer/timetable.ts +0 -295
|
@@ -63,12 +63,14 @@ function _ts_dispose_resources(env) {
|
|
|
63
63
|
return next();
|
|
64
64
|
})(env);
|
|
65
65
|
}
|
|
66
|
-
import {
|
|
66
|
+
import { RollupCheatCodes } from '@aztec/ethereum/test';
|
|
67
|
+
import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
67
68
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
68
69
|
import { createLogger } from '@aztec/foundation/log';
|
|
69
70
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
70
71
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
71
72
|
import { isErrorClass } from '@aztec/foundation/types';
|
|
73
|
+
import { settleEpochOutbox } from '@aztec/prover-client/test';
|
|
72
74
|
import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
73
75
|
import { getPreviousCheckpointOutHashes } from '@aztec/stdlib/checkpoint';
|
|
74
76
|
import { getEpochAtSlot, getSlotAtTimestamp, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
@@ -99,16 +101,24 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
99
101
|
stopped = false;
|
|
100
102
|
paused = false;
|
|
101
103
|
mempoolPoller;
|
|
104
|
+
/** Loop that settles epochs and reconciles the clock while {@link AutomineSequencerDeps.autoSettle} is set. */ settler;
|
|
102
105
|
publisher;
|
|
103
106
|
attestorAddress;
|
|
104
107
|
/** Set while a mempool-driven build is queued but not yet run; used to coalesce. */ buildQueued = undefined;
|
|
105
108
|
/** Last L2 slot we published a checkpoint for (-1 means none yet). */ lastBuiltSlot = -1;
|
|
109
|
+
/** Lazily-built cheat codes for synthetic epoch settlement (outbox roots + proven tip). */ rollupCheatCodes;
|
|
106
110
|
constructor(deps){
|
|
107
111
|
this.deps = deps;
|
|
108
112
|
this.log = deps.log ?? createLogger('sequencer:automine');
|
|
109
113
|
this.queue = new SerialQueue();
|
|
110
114
|
this.pollIntervalMs = deps.pollIntervalMs ?? 50;
|
|
111
115
|
}
|
|
116
|
+
/** Cheat codes for the rollup, built from the same EthCheatCodes the sequencer uses for time control. */ getRollupCheatCodes() {
|
|
117
|
+
this.rollupCheatCodes ??= new RollupCheatCodes(this.deps.ethCheatCodes, {
|
|
118
|
+
rollupAddress: this.deps.config.rollupAddress
|
|
119
|
+
});
|
|
120
|
+
return this.rollupCheatCodes;
|
|
121
|
+
}
|
|
112
122
|
/**
|
|
113
123
|
* Starts the sequencer. Switches anvil into automine mode (no interval mining),
|
|
114
124
|
* acquires a publisher, and begins polling the mempool for pending txs.
|
|
@@ -135,6 +145,12 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
135
145
|
// notification. Tests can also call `buildIfPending()` directly to skip the poll wait.
|
|
136
146
|
this.mempoolPoller = new RunningPromise(()=>this.maybeEnqueueBuild(), this.log, this.pollIntervalMs);
|
|
137
147
|
this.mempoolPoller.start();
|
|
148
|
+
// Local-network only: settle epochs and reconcile the clock to L1 as checkpoints land. Both run
|
|
149
|
+
// through the same serial queue as builds/warps, so they never interleave with a checkpoint build.
|
|
150
|
+
if (this.deps.autoSettle) {
|
|
151
|
+
this.settler = new RunningPromise(()=>this.maybeSettle(), this.log, this.deps.settlePollIntervalMs ?? 200);
|
|
152
|
+
this.settler.start();
|
|
153
|
+
}
|
|
138
154
|
}
|
|
139
155
|
/**
|
|
140
156
|
* Stops the sequencer. Drains the queue, unsubscribes the mempool poller, and runs any
|
|
@@ -147,6 +163,7 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
147
163
|
this.stopped = true;
|
|
148
164
|
this.running = false;
|
|
149
165
|
await this.mempoolPoller?.stop();
|
|
166
|
+
await this.settler?.stop();
|
|
150
167
|
await this.queue.end();
|
|
151
168
|
await this.deps.stopExtras?.();
|
|
152
169
|
this.log.info('AutomineSequencer stopped');
|
|
@@ -216,11 +233,19 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
216
233
|
/**
|
|
217
234
|
* Warps L1 timestamp to `targetTimestampSec`. Rounded up to the next aztec-slot
|
|
218
235
|
* boundary so the next build lands on a fresh slot. Atomic with respect to builds —
|
|
219
|
-
* the queue ensures no build is in flight while the warp executes.
|
|
236
|
+
* the queue ensures no build is in flight while the warp executes. A no-op when the
|
|
237
|
+
* target is already at or behind the current L1 time (see {@link runWarp}).
|
|
220
238
|
*/ warpTo(targetTimestampSec) {
|
|
221
239
|
return this.queue.put(()=>this.runWarp(targetTimestampSec));
|
|
222
240
|
}
|
|
223
|
-
/**
|
|
241
|
+
/**
|
|
242
|
+
* Warps L1 timestamp forward by `deltaSec` seconds from the current L1 time, rounded up to the next
|
|
243
|
+
* aztec-slot boundary. Throws if `deltaSec` is not positive (warping "by" a non-positive amount is a
|
|
244
|
+
* caller bug — unlike {@link warpTo}, which no-ops on a past target).
|
|
245
|
+
*/ warpBy(deltaSec) {
|
|
246
|
+
if (deltaSec <= 0) {
|
|
247
|
+
throw new Error(`warpL2TimeAtLeastBy: duration must be positive, got ${deltaSec} seconds.`);
|
|
248
|
+
}
|
|
224
249
|
return this.queue.put(async ()=>{
|
|
225
250
|
const current = await this.deps.ethCheatCodes.lastBlockTimestamp();
|
|
226
251
|
await this.runWarp(current + deltaSec);
|
|
@@ -238,13 +263,52 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
238
263
|
/** Awaits the queue draining to a fully idle state. */ syncPoint() {
|
|
239
264
|
return this.queue.syncPoint();
|
|
240
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* Synthetically "proves" the L2 chain up to `upToCheckpoint` (default: the latest checkpointed
|
|
268
|
+
* checkpoint). For every epoch newly covered — including a partial final epoch — the epoch out hash
|
|
269
|
+
* is written into the L1 Outbox so the L2-to-L1 messages in those checkpoints become consumable,
|
|
270
|
+
* then the rollup's proven tip is advanced to the target. There is no real proof; this is the
|
|
271
|
+
* local-network equivalent of an epoch proof landing on L1.
|
|
272
|
+
*
|
|
273
|
+
* Clamps the target down to the latest checkpointed checkpoint and no-ops when it is already proven.
|
|
274
|
+
* Runs inside the serial queue so it never interleaves with a build or warp.
|
|
275
|
+
*
|
|
276
|
+
* @returns The proven checkpoint after the call (the target, or the existing proven tip on no-op).
|
|
277
|
+
*/ prove(upToCheckpoint) {
|
|
278
|
+
return this.queue.put(()=>this.runProve(upToCheckpoint));
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Auto-settle tick (local-network only). Proving up to the latest checkpointed checkpoint also
|
|
282
|
+
* reconciles the clock at the head of {@link runProve}, so this single tick keeps both the
|
|
283
|
+
* proven tip and the date provider current even when no build is happening.
|
|
284
|
+
*/ async maybeSettle() {
|
|
285
|
+
if (!this.running) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
try {
|
|
289
|
+
await this.prove();
|
|
290
|
+
} catch (err) {
|
|
291
|
+
this.log.warn('Automine auto-settle tick failed', {
|
|
292
|
+
err: err instanceof Error ? err.message : String(err)
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Advances the injected date provider to the latest *mined* L1 timestamp when it has fallen behind
|
|
298
|
+
* (e.g. an unrelated L1 tx mined a block between our builds). Never advances to the pending, un-mined
|
|
299
|
+
* timestamp. Keeps node-side consumers of `dateProvider.now()` aligned with L1 without our own builds.
|
|
300
|
+
*/ async reconcileDateProvider() {
|
|
301
|
+
const lastTsMs = await this.deps.ethCheatCodes.lastBlockTimestamp() * 1000;
|
|
302
|
+
if (lastTsMs > this.deps.dateProvider.now()) {
|
|
303
|
+
this.deps.dateProvider.setTime(lastTsMs);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
241
306
|
/** Called from the mempool poller. Enqueues a build if there are pending txs. */ async maybeEnqueueBuild() {
|
|
242
307
|
if (!this.running || this.paused || this.buildQueued) {
|
|
243
308
|
return;
|
|
244
309
|
}
|
|
245
310
|
try {
|
|
246
|
-
|
|
247
|
-
if (pending > 0) {
|
|
311
|
+
if (await this.deps.p2pClient.hasEligiblePendingTxs(1)) {
|
|
248
312
|
// Fire-and-forget; the build result is delivered via `buildIfPending()` callers,
|
|
249
313
|
// not via the poller.
|
|
250
314
|
void this.buildIfPending().catch((err)=>{
|
|
@@ -257,7 +321,14 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
257
321
|
});
|
|
258
322
|
}
|
|
259
323
|
}
|
|
260
|
-
/**
|
|
324
|
+
/**
|
|
325
|
+
* Builds and publishes one checkpoint, returning the built block — or `undefined` when there was
|
|
326
|
+
* nothing to build or the propose failed. A failed propose mines no checkpoint on L1 (it reverts
|
|
327
|
+
* inside the multicall or is never sent), so recovery is purely local: the optimistic archiver insert
|
|
328
|
+
* is rolled back, the block's txs return to the pending pool, and the L1 nonce is reset. No L1 reorg
|
|
329
|
+
* is performed, and the build is not retried inline — once the txs are back in the pending pool the
|
|
330
|
+
* mempool poller re-enqueues a build on its next tick (see {@link maybeEnqueueBuild}).
|
|
331
|
+
*/ async runBuild({ allowEmpty }) {
|
|
261
332
|
const env = {
|
|
262
333
|
stack: [],
|
|
263
334
|
error: void 0,
|
|
@@ -267,13 +338,14 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
267
338
|
if (!this.running || !this.publisher || !this.attestorAddress) {
|
|
268
339
|
return undefined;
|
|
269
340
|
}
|
|
270
|
-
|
|
271
|
-
// For mempool-driven builds, wait for at least `minTxsPerBlock`
|
|
341
|
+
await this.reconcileDateProvider();
|
|
342
|
+
// For mempool-driven builds, wait for at least `minTxsPerBlock` age-eligible txs (or 1 if not set)
|
|
272
343
|
// before building. This mirrors the production sequencer's `waitForMinTxs` behavior, and is
|
|
273
344
|
// required for tests that bundle multiple txs into one block via `setConfig({ minTxsPerBlock })`.
|
|
274
|
-
// 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.
|
|
275
347
|
const minRequired = allowEmpty ? 0 : Math.max(this.deps.config.minTxsPerBlock ?? 1, 1);
|
|
276
|
-
if (
|
|
348
|
+
if (!await this.deps.p2pClient.hasEligiblePendingTxs(minRequired)) {
|
|
277
349
|
return undefined;
|
|
278
350
|
}
|
|
279
351
|
// Decide target slot from the pending block's timestamp — picks up any prior
|
|
@@ -292,7 +364,10 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
292
364
|
if (slotBoundaryTs > pendingBlockTs) {
|
|
293
365
|
await this.deps.ethCheatCodes.setNextBlockTimestamp(slotBoundaryTs);
|
|
294
366
|
}
|
|
295
|
-
const tips = await
|
|
367
|
+
const [tips, proposedCheckpoint] = await Promise.all([
|
|
368
|
+
this.deps.l2BlockSource.getL2Tips(),
|
|
369
|
+
this.deps.l2BlockSource.getProposedCheckpointData()
|
|
370
|
+
]);
|
|
296
371
|
const syncedToBlockNumber = tips.proposed.number;
|
|
297
372
|
// Ensure world state has processed the archiver's tip before forking. Without this,
|
|
298
373
|
// world state may still be at the previous block (since it syncs asynchronously from
|
|
@@ -300,14 +375,14 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
300
375
|
// "Unable to initialize from future block".
|
|
301
376
|
await this.deps.worldState.syncImmediate(BlockNumber(syncedToBlockNumber));
|
|
302
377
|
const nextBlockNumber = BlockNumber(syncedToBlockNumber + 1);
|
|
303
|
-
const
|
|
378
|
+
const parentCheckpointNumber = proposedCheckpoint?.checkpointNumber ?? tips.checkpointed.checkpoint.number;
|
|
379
|
+
const checkpointNumber = CheckpointNumber(parentCheckpointNumber + 1);
|
|
304
380
|
const targetEpoch = getEpochAtSlot(SlotNumber(targetSlot), this.deps.l1Constants);
|
|
305
381
|
this.log.verbose(`Building automine checkpoint`, {
|
|
306
382
|
checkpointNumber,
|
|
307
383
|
blockNumber: nextBlockNumber,
|
|
308
384
|
slot: targetSlot,
|
|
309
385
|
slotTimestamp: slotBoundaryTs,
|
|
310
|
-
txCount,
|
|
311
386
|
allowEmpty
|
|
312
387
|
});
|
|
313
388
|
const checkpointGlobals = await this.deps.globalsBuilder.buildCheckpointGlobalVariables(this.deps.coinbase, this.deps.feeRecipient, SlotNumber(targetSlot));
|
|
@@ -325,7 +400,10 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
325
400
|
closeDelayMs: 0
|
|
326
401
|
}), true);
|
|
327
402
|
const checkpointBuilder = await this.deps.checkpointsBuilder.startCheckpoint(checkpointNumber, checkpointGlobals, feeAssetPriceModifier, l1ToL2Messages, previousCheckpointOutHashes, fork, this.log.getBindings());
|
|
328
|
-
|
|
403
|
+
// Block building only executes txs, and automine publishes straight to L1, so the proofs are never needed.
|
|
404
|
+
const pendingTxs = this.deps.p2pClient.iterateEligiblePendingTxs({
|
|
405
|
+
includeProof: false
|
|
406
|
+
});
|
|
329
407
|
const buildResult = await this.tryBuildBlock(checkpointBuilder, pendingTxs, nextBlockNumber, checkpointGlobals.timestamp, allowEmpty, checkpointNumber);
|
|
330
408
|
if (!buildResult) {
|
|
331
409
|
return undefined;
|
|
@@ -350,16 +428,20 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
350
428
|
feeAssetPriceModifier
|
|
351
429
|
});
|
|
352
430
|
await this.publisher.enqueueProposeCheckpoint(checkpoint, emptyAttestations, emptyAttestationsSignature);
|
|
431
|
+
// Automine publishes synchronously in the current slot via `sendRequests`. It must NOT use the
|
|
432
|
+
// production `sendRequestsAt` (or `canProposeAt`), which always apply the one-slot pipelining
|
|
433
|
+
// offset — automine is the deliberate non-pipelined exception and builds/publishes in place.
|
|
353
434
|
const result = await this.publisher.sendRequests(SlotNumber(targetSlot));
|
|
354
|
-
const
|
|
355
|
-
if (!
|
|
356
|
-
this.log.
|
|
435
|
+
const proposeSucceeded = !!result?.successfulActions?.some((action)=>action === 'propose');
|
|
436
|
+
if (!proposeSucceeded) {
|
|
437
|
+
this.log.warn('Automine propose did not succeed; rolled back optimistic insert, will rebuild from the poller', {
|
|
357
438
|
slot: targetSlot,
|
|
358
439
|
checkpointNumber,
|
|
359
440
|
successful: result?.successfulActions,
|
|
360
441
|
failed: result?.failedActions
|
|
361
442
|
});
|
|
362
|
-
|
|
443
|
+
await this.rollbackOptimisticInsert(syncedToBlockNumber);
|
|
444
|
+
return undefined;
|
|
363
445
|
}
|
|
364
446
|
// Force one full L1-sync cycle synchronously. The local addBlock/addProposedCheckpoint
|
|
365
447
|
// above advances the proposed tip, but tips.checkpointed and the L1->L2 inbox tree state
|
|
@@ -368,6 +450,16 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
368
450
|
// Sync the date provider to the L1 block timestamp we just mined.
|
|
369
451
|
const newL1Ts = await this.deps.ethCheatCodes.lastBlockTimestamp();
|
|
370
452
|
this.deps.dateProvider.setTime(newL1Ts * 1000);
|
|
453
|
+
// A successful propose is validated on-chain against the mined L1 block's slot, so the mined slot
|
|
454
|
+
// should equal our target; warn (without rolling back — the checkpoint is on L1) if it ever differs.
|
|
455
|
+
const minedSlot = Number(getSlotAtTimestamp(BigInt(newL1Ts), this.deps.l1Constants));
|
|
456
|
+
if (minedSlot !== targetSlot) {
|
|
457
|
+
this.log.warn(`Automine checkpoint mined in slot ${minedSlot} but targeted ${targetSlot}`, {
|
|
458
|
+
minedSlot,
|
|
459
|
+
targetSlot,
|
|
460
|
+
checkpointNumber
|
|
461
|
+
});
|
|
462
|
+
}
|
|
371
463
|
this.lastBuiltSlot = targetSlot;
|
|
372
464
|
this.log.verbose(`Automine checkpoint published`, {
|
|
373
465
|
checkpointNumber,
|
|
@@ -386,11 +478,27 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
386
478
|
}
|
|
387
479
|
}
|
|
388
480
|
/**
|
|
481
|
+
* Undoes an optimistic archiver insert (uncheckpointed block + proposed checkpoint) without reorging
|
|
482
|
+
* L1: removes the uncheckpointed block and evicts the proposed checkpoint that referenced it, so the
|
|
483
|
+
* proposed tip drops back to `toBlockNumber`. `p2pClient.sync()` then observes the lowered tip and
|
|
484
|
+
* restores the block's txs to the pending pool; `worldState.syncImmediate()` drops any applied effects;
|
|
485
|
+
* and the L1 nonce is reset (a reverted-but-mined propose consumes one) so the build can be retried.
|
|
486
|
+
*
|
|
487
|
+
* Note: `archiver.rollbackTo` is NOT usable here — it is checkpoint-granular and no-ops on a
|
|
488
|
+
* proposed-only tip (the inserted checkpoint is not yet in the checkpointed set).
|
|
489
|
+
*/ async rollbackOptimisticInsert(toBlockNumber) {
|
|
490
|
+
await this.deps.archiver.removeUncheckpointedBlocksAfter(toBlockNumber);
|
|
491
|
+
await this.deps.p2pClient.sync();
|
|
492
|
+
await this.deps.worldState.syncImmediate();
|
|
493
|
+
this.deps.l1TxUtils.forEach((utils)=>utils.resetNonce());
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
389
496
|
* Warps L1 timestamp to (or past) `targetTimestampSec`, rounded up to the next aztec-slot
|
|
390
497
|
* boundary, by queuing an empty-checkpoint build at that slot. Mines exactly one L1 block
|
|
391
498
|
* (the propose tx auto-mined under anvil's automine mode), with the timestamp pre-set so
|
|
392
499
|
* the mined block lands on the slot boundary.
|
|
393
500
|
*/ async runWarp(targetTimestampSec) {
|
|
501
|
+
await this.reconcileDateProvider();
|
|
394
502
|
const currentL1Ts = await this.deps.ethCheatCodes.lastBlockTimestamp();
|
|
395
503
|
if (targetTimestampSec <= currentL1Ts) {
|
|
396
504
|
this.log.debug(`Warp target ${targetTimestampSec} is not in the future of current L1 ts ${currentL1Ts}`);
|
|
@@ -460,6 +568,82 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
460
568
|
});
|
|
461
569
|
}
|
|
462
570
|
/**
|
|
571
|
+
* Writes outbox roots for every epoch newly covered up to `maybeCheckpoint` and advances the proven
|
|
572
|
+
* tip. Settles each fully-covered epoch in full and the final epoch only up to the target checkpoint
|
|
573
|
+
* (a partial epoch, which the AZIP-14 Outbox supports via per-`numCheckpointsInEpoch` roots).
|
|
574
|
+
*/ async runProve(upToCheckpoint) {
|
|
575
|
+
await this.reconcileDateProvider();
|
|
576
|
+
const rollupCheatCodes = this.getRollupCheatCodes();
|
|
577
|
+
const tips = await this.deps.l2BlockSource.getL2Tips();
|
|
578
|
+
const checkpointedTip = tips.checkpointed.checkpoint.number;
|
|
579
|
+
// Never prove beyond what the archiver has actually checkpointed; default to that tip.
|
|
580
|
+
const target = CheckpointNumber(Math.min(upToCheckpoint ?? checkpointedTip, checkpointedTip));
|
|
581
|
+
const { proven } = await rollupCheatCodes.getTips();
|
|
582
|
+
if (target <= proven) {
|
|
583
|
+
this.log.debug(`Checkpoint ${target} already proven`, {
|
|
584
|
+
target,
|
|
585
|
+
proven,
|
|
586
|
+
checkpointedTip
|
|
587
|
+
});
|
|
588
|
+
return proven;
|
|
589
|
+
}
|
|
590
|
+
const startEpoch = await this.getEpochOfCheckpoint(CheckpointNumber(proven + 1));
|
|
591
|
+
const endEpoch = await this.getEpochOfCheckpoint(target);
|
|
592
|
+
if (startEpoch === undefined || endEpoch === undefined) {
|
|
593
|
+
this.log.warn(`Cannot resolve epoch range to prove up to checkpoint ${target}`, {
|
|
594
|
+
target,
|
|
595
|
+
proven,
|
|
596
|
+
startEpoch,
|
|
597
|
+
endEpoch
|
|
598
|
+
});
|
|
599
|
+
return proven;
|
|
600
|
+
}
|
|
601
|
+
for(let epoch = startEpoch; epoch <= endEpoch; epoch++){
|
|
602
|
+
const lastCovered = await settleEpochOutbox({
|
|
603
|
+
rollupCheatCodes,
|
|
604
|
+
l2BlockSource: this.deps.l2BlockSource,
|
|
605
|
+
epoch: EpochNumber(epoch),
|
|
606
|
+
maxCheckpoint: epoch === endEpoch ? target : undefined,
|
|
607
|
+
log: this.log
|
|
608
|
+
});
|
|
609
|
+
if (lastCovered === undefined) {
|
|
610
|
+
// An epoch in (proven, target] with no checkpointed blocks — expected when warps skip a whole
|
|
611
|
+
// epoch. Logged so it's distinguishable from the archiver failing to serve the epoch's blocks.
|
|
612
|
+
this.log.debug(`No checkpointed blocks to settle for epoch ${epoch} while proving to ${target}`, {
|
|
613
|
+
epoch,
|
|
614
|
+
target
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
await rollupCheatCodes.markAsProven(target);
|
|
619
|
+
// Settlement is a direct L1 storage write that mines no block, unlike a real epoch proof landing
|
|
620
|
+
// on L1. The archiver's L1 sync short-circuits while the L1 block hash is unchanged, so it would
|
|
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();
|
|
627
|
+
await this.deps.archiver.syncImmediate();
|
|
628
|
+
this.log.verbose(`Proved up to checkpoint ${target}`, {
|
|
629
|
+
target,
|
|
630
|
+
proven,
|
|
631
|
+
startEpoch,
|
|
632
|
+
endEpoch
|
|
633
|
+
});
|
|
634
|
+
return target;
|
|
635
|
+
}
|
|
636
|
+
/** Resolves the epoch a checkpoint belongs to from its slot, or undefined if the archiver lacks it. */ async getEpochOfCheckpoint(checkpointNumber) {
|
|
637
|
+
const checkpointData = await this.deps.l2BlockSource.getCheckpointData({
|
|
638
|
+
number: checkpointNumber
|
|
639
|
+
});
|
|
640
|
+
if (!checkpointData) {
|
|
641
|
+
return undefined;
|
|
642
|
+
}
|
|
643
|
+
const slot = SlotNumber(Number(checkpointData.header.slotNumber));
|
|
644
|
+
return Number(getEpochAtSlot(slot, this.deps.l1Constants));
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
463
647
|
* Wraps `checkpointBuilder.buildBlock` with the failed-tx handling shared by both error
|
|
464
648
|
* and success paths: drops the failed txs from the P2P mempool, and returns `undefined`
|
|
465
649
|
* when `InsufficientValidTxsError` aborts the build (so the caller skips publishing).
|
|
@@ -500,7 +684,13 @@ import { InsufficientValidTxsError } from '@aztec/stdlib/interfaces/server';
|
|
|
500
684
|
return;
|
|
501
685
|
}
|
|
502
686
|
const failedTxHashes = failedTxs.map((fail)=>fail.tx.getTxHash());
|
|
503
|
-
|
|
687
|
+
const failures = failedTxs.map((fail)=>({
|
|
688
|
+
txHash: fail.tx.getTxHash().toString(),
|
|
689
|
+
reason: fail.error.message
|
|
690
|
+
}));
|
|
691
|
+
this.log.warn(`Dropping ${failedTxs.length} failed txs: ${failures.map((f)=>`${f.txHash} (${f.reason})`).join(', ')}`, {
|
|
692
|
+
failures
|
|
693
|
+
});
|
|
504
694
|
await this.deps.p2pClient.handleFailedExecution(failedTxHashes);
|
|
505
695
|
}
|
|
506
696
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { AutomineSequencer, type AutomineSequencerConstants, type AutomineSequencerDeps, } from './automine_sequencer.js';
|
|
2
|
+
export { createAutomineSequencer, type CreateAutomineSequencerArgs } from './automine_factory.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXF1ZW5jZXIvYXV0b21pbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixLQUFLLDBCQUEwQixFQUMvQixLQUFLLHFCQUFxQixHQUMzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxLQUFLLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sequencer/automine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type EpochCache } from '@aztec/epoch-cache';
|
|
2
2
|
import { BlockNumber, CheckpointNumber, EpochNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
|
|
@@ -11,6 +11,7 @@ import { type Checkpoint, type ProposedCheckpointData } from '@aztec/stdlib/chec
|
|
|
11
11
|
import { type ResolvedSequencerConfig, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
12
12
|
import { type L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
13
13
|
import type { CoordinationSignatureContext } from '@aztec/stdlib/p2p';
|
|
14
|
+
import type { ProposerTimetable } from '@aztec/stdlib/timetable';
|
|
14
15
|
import { Tx } from '@aztec/stdlib/tx';
|
|
15
16
|
import { type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
16
17
|
import { CheckpointBuilder, type FullNodeCheckpointsBuilder, type ValidatorClient } from '@aztec/validator-client';
|
|
@@ -19,7 +20,7 @@ import type { InvalidateCheckpointRequest, SequencerPublisher } from '../publish
|
|
|
19
20
|
import type { CheckpointProposalJobMetricsRecorder } from './checkpoint_proposal_job_metrics.js';
|
|
20
21
|
import type { SequencerEvents } from './events.js';
|
|
21
22
|
import type { SequencerMetrics } from './metrics.js';
|
|
22
|
-
import type {
|
|
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
|
/**
|
|
@@ -29,7 +30,6 @@ import { SequencerState } from './utils.js';
|
|
|
29
30
|
* the Sequencer once the check for being the proposer for the slot has succeeded.
|
|
30
31
|
*/
|
|
31
32
|
export declare class CheckpointProposalJob implements Traceable {
|
|
32
|
-
private readonly slotNow;
|
|
33
33
|
private readonly targetSlot;
|
|
34
34
|
private readonly targetEpoch;
|
|
35
35
|
private readonly checkpointNumber;
|
|
@@ -50,20 +50,21 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
50
50
|
private readonly l1Constants;
|
|
51
51
|
private readonly signatureContext;
|
|
52
52
|
protected config: ResolvedSequencerConfig;
|
|
53
|
-
protected timetable:
|
|
53
|
+
protected timetable: ProposerTimetable;
|
|
54
54
|
private readonly slasherClient;
|
|
55
55
|
private readonly epochCache;
|
|
56
56
|
private readonly dateProvider;
|
|
57
57
|
private readonly metrics;
|
|
58
58
|
private readonly checkpointMetrics;
|
|
59
59
|
protected readonly eventEmitter: TypedEventEmitter<SequencerEvents>;
|
|
60
|
+
protected readonly pendingRequests: RequestsTracker;
|
|
60
61
|
private readonly setStateFn;
|
|
61
62
|
readonly tracer: Tracer;
|
|
62
63
|
private readonly proposedCheckpointData?;
|
|
63
64
|
protected readonly log: Logger;
|
|
64
65
|
private readonly checkpointEventLog;
|
|
65
|
-
|
|
66
|
-
private
|
|
66
|
+
private readonly interruptibleSleep;
|
|
67
|
+
private interrupted;
|
|
67
68
|
/**
|
|
68
69
|
* Chain state overrides built once per slot in proposeCheckpoint after the checkpoint is
|
|
69
70
|
* complete. Carries the pending parent override (archive + slot + fee header) for pipelining,
|
|
@@ -72,9 +73,21 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
72
73
|
*/
|
|
73
74
|
private checkpointSimulationOverridesPlan?;
|
|
74
75
|
private getSignatureContext;
|
|
75
|
-
constructor(
|
|
76
|
-
/**
|
|
77
|
-
|
|
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
|
+
/**
|
|
78
|
+
* The wall-clock slot during which this job builds, i.e. the slot one before {@link targetSlot} under
|
|
79
|
+
* proposer pipelining. Also the slot of the parent checkpoint this job builds on top of.
|
|
80
|
+
*/
|
|
81
|
+
private getBuildSlot;
|
|
82
|
+
/**
|
|
83
|
+
* Sets the sequencer state for this job, reporting the target slot the checkpoint is being proposed for
|
|
84
|
+
* (not the wall-clock build slot). The slot is informational on the event payload/metrics; the job knows
|
|
85
|
+
* its own target slot, so callers only pass the state.
|
|
86
|
+
*/
|
|
87
|
+
private setState;
|
|
88
|
+
/** Interrupts job-owned waits, including the publisher's send-at-slot sleep, so shutdown can finish. */
|
|
89
|
+
interrupt(): void;
|
|
90
|
+
private awaitInterruptibleSleep;
|
|
78
91
|
private logCheckpointEvent;
|
|
79
92
|
/**
|
|
80
93
|
* Executes the checkpoint proposal job.
|
|
@@ -102,7 +115,11 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
102
115
|
private buildBlocksForCheckpoint;
|
|
103
116
|
/** Creates a block proposal for a given block via the validator client (unless in fisherman mode) */
|
|
104
117
|
private createBlockProposal;
|
|
105
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Sleeps until it is time to produce the next block in the slot.
|
|
120
|
+
* @param nextSubslotStart - Absolute wall-clock timestamp in seconds of the previous sub-slot deadline.
|
|
121
|
+
*/
|
|
122
|
+
protected waitUntilNextSubslot(nextSubslotStart: number): Promise<void>;
|
|
106
123
|
/** Builds a single block. Called from the main block building loop. */
|
|
107
124
|
protected buildSingleBlock(checkpointBuilder: CheckpointBuilder, opts: {
|
|
108
125
|
forceCreate?: boolean;
|
|
@@ -134,12 +151,8 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
134
151
|
* Helper to handle HA double-signing errors. Returns true if the error was handled (caller should yield).
|
|
135
152
|
*/
|
|
136
153
|
private handleHASigningError;
|
|
137
|
-
/** Waits until a specific time within the current slot */
|
|
138
|
-
protected waitUntilTimeInSlot(targetSecondsIntoSlot: number): Promise<void>;
|
|
139
154
|
/** Waits the polling interval for transactions. Extracted for test overriding. */
|
|
140
155
|
protected waitForTxsPollingInterval(): Promise<void>;
|
|
141
|
-
private getSlotStartBuildTimestamp;
|
|
142
|
-
private getSecondsIntoSlot;
|
|
143
156
|
getPublisher(): SequencerPublisher;
|
|
144
157
|
}
|
|
145
|
-
//# 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,KAAK,
|
|
1
|
+
{"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}
|