@aztec/sequencer-client 0.0.1-commit.e0f15ab9b → 0.0.1-commit.e304674f1

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.
Files changed (34) hide show
  1. package/dest/client/sequencer-client.d.ts +1 -1
  2. package/dest/client/sequencer-client.d.ts.map +1 -1
  3. package/dest/client/sequencer-client.js +0 -4
  4. package/dest/global_variable_builder/global_builder.d.ts +3 -3
  5. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  6. package/dest/global_variable_builder/global_builder.js +7 -4
  7. package/dest/publisher/sequencer-publisher-factory.d.ts +1 -3
  8. package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
  9. package/dest/publisher/sequencer-publisher-factory.js +0 -1
  10. package/dest/publisher/sequencer-publisher.d.ts +52 -31
  11. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  12. package/dest/publisher/sequencer-publisher.js +106 -87
  13. package/dest/sequencer/checkpoint_proposal_job.d.ts +31 -10
  14. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
  15. package/dest/sequencer/checkpoint_proposal_job.js +179 -108
  16. package/dest/sequencer/checkpoint_voter.d.ts +1 -2
  17. package/dest/sequencer/checkpoint_voter.d.ts.map +1 -1
  18. package/dest/sequencer/checkpoint_voter.js +2 -5
  19. package/dest/sequencer/sequencer.d.ts +14 -4
  20. package/dest/sequencer/sequencer.d.ts.map +1 -1
  21. package/dest/sequencer/sequencer.js +67 -18
  22. package/dest/sequencer/timetable.d.ts +4 -1
  23. package/dest/sequencer/timetable.d.ts.map +1 -1
  24. package/dest/sequencer/timetable.js +15 -5
  25. package/package.json +27 -27
  26. package/src/client/sequencer-client.ts +0 -7
  27. package/src/global_variable_builder/global_builder.ts +15 -3
  28. package/src/publisher/sequencer-publisher-factory.ts +0 -3
  29. package/src/publisher/sequencer-publisher.ts +174 -124
  30. package/src/sequencer/README.md +81 -12
  31. package/src/sequencer/checkpoint_proposal_job.ts +215 -117
  32. package/src/sequencer/checkpoint_voter.ts +1 -12
  33. package/src/sequencer/sequencer.ts +97 -20
  34. package/src/sequencer/timetable.ts +19 -8
@@ -386,12 +386,13 @@ import { EthAddress } from '@aztec/foundation/eth-address';
386
386
  import { Signature } from '@aztec/foundation/eth-signature';
387
387
  import { createLogger } from '@aztec/foundation/log';
388
388
  import { makeBackoff, retry } from '@aztec/foundation/retry';
389
+ import { InterruptibleSleep } from '@aztec/foundation/sleep';
389
390
  import { bufferToHex } from '@aztec/foundation/string';
390
391
  import { Timer } from '@aztec/foundation/timer';
391
392
  import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
392
393
  import { encodeSlashConsensusVotes } from '@aztec/slasher';
393
394
  import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
394
- import { getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
395
+ import { getLastL1SlotTimestampForL2Slot, getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
395
396
  import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
396
397
  import { encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
397
398
  import { createL1TxFailedStore } from './l1_tx_failed_store/index.js';
@@ -401,9 +402,6 @@ export const Actions = [
401
402
  'invalidate-by-insufficient-attestations',
402
403
  'propose',
403
404
  'governance-signal',
404
- 'empire-slashing-signal',
405
- 'create-empire-payload',
406
- 'execute-empire-payload',
407
405
  'vote-offenses',
408
406
  'execute-slash'
409
407
  ];
@@ -443,12 +441,13 @@ export class SequencerPublisher {
443
441
  log;
444
442
  ethereumSlotDuration;
445
443
  aztecSlotDuration;
446
- dateProvider;
444
+ /** Date provider for wall-clock time. */ dateProvider;
447
445
  blobClient;
448
446
  /** Address to use for simulations in fisherman mode (actual proposer's address) */ proposerAddressForSimulation;
449
447
  /** Optional callback to obtain a replacement publisher when the current one fails to send. */ getNextPublisher;
450
448
  /** L1 fee analyzer for fisherman mode */ l1FeeAnalyzer;
451
449
  /** Fee asset price oracle for computing price modifiers from Uniswap V4 */ feeAssetPriceOracle;
450
+ /** Interruptible sleep used by sendRequestsAt to wait until a target timestamp. */ interruptibleSleep;
452
451
  // A CALL to a cold address is 2700 gas
453
452
  static MULTICALL_OVERHEAD_GAS_GUESS = 5000n;
454
453
  // Gas report for VotingWithSigTest shows a max gas of 100k, but we've seen it cost 700k+ in testnet
@@ -457,7 +456,6 @@ export class SequencerPublisher {
457
456
  rollupContract;
458
457
  govProposerContract;
459
458
  slashingProposerContract;
460
- slashFactoryContract;
461
459
  tracer;
462
460
  requests;
463
461
  constructor(config, deps){
@@ -468,6 +466,7 @@ export class SequencerPublisher {
468
466
  this.lastActions = {};
469
467
  this.isPayloadEmptyCache = new Map();
470
468
  this.payloadProposedCache = new Set();
469
+ this.interruptibleSleep = new InterruptibleSleep();
471
470
  this.requests = [];
472
471
  this.log = deps.log ?? createLogger('sequencer:publisher');
473
472
  this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
@@ -476,6 +475,7 @@ export class SequencerPublisher {
476
475
  this.epochCache = deps.epochCache;
477
476
  this.lastActions = deps.lastActions;
478
477
  this.blobClient = deps.blobClient;
478
+ this.dateProvider = deps.dateProvider;
479
479
  const telemetry = deps.telemetry ?? getTelemetryClient();
480
480
  this.metrics = deps.metrics ?? new SequencerPublisherMetrics(telemetry, 'SequencerPublisher');
481
481
  this.tracer = telemetry.getTracer('SequencerPublisher');
@@ -489,7 +489,6 @@ export class SequencerPublisher {
489
489
  const newSlashingProposer = await this.rollupContract.getSlashingProposer();
490
490
  this.slashingProposerContract = newSlashingProposer;
491
491
  });
492
- this.slashFactoryContract = deps.slashFactoryContract;
493
492
  // Initialize L1 fee analyzer for fisherman mode
494
493
  if (config.fishermanMode) {
495
494
  this.l1FeeAnalyzer = new L1FeeAnalyzer(this.l1TxUtils.client, deps.dateProvider, createLogger('sequencer:publisher:fee-analyzer'));
@@ -740,6 +739,41 @@ export class SequencerPublisher {
740
739
  }
741
740
  }
742
741
  }
742
+ /*
743
+ * Schedules sending all enqueued requests at (or after) the given timestamp.
744
+ * Uses InterruptibleSleep so it can be cancelled via interrupt().
745
+ * Returns the promise for the L1 response (caller should NOT await this in the work loop).
746
+ */ async sendRequestsAt(submitAfter) {
747
+ const ms = submitAfter.getTime() - this.dateProvider.now();
748
+ if (ms > 0) {
749
+ this.log.debug(`Sleeping ${ms}ms before sending requests`, {
750
+ submitAfter
751
+ });
752
+ await this.interruptibleSleep.sleep(ms);
753
+ }
754
+ if (this.interrupted) {
755
+ return undefined;
756
+ }
757
+ // Re-validate enqueued requests after the sleep (state may have changed, e.g. prune or L1 reorg)
758
+ const validRequests = [];
759
+ for (const request of this.requests){
760
+ if (!request.preCheck) {
761
+ validRequests.push(request);
762
+ continue;
763
+ }
764
+ try {
765
+ await request.preCheck();
766
+ validRequests.push(request);
767
+ } catch (err) {
768
+ this.log.warn(`Pre-send validation failed for ${request.action}, discarding request`, err);
769
+ }
770
+ }
771
+ this.requests = validRequests;
772
+ if (this.requests.length === 0) {
773
+ return undefined;
774
+ }
775
+ return this.sendRequests();
776
+ }
743
777
  callbackBundledTransactions(requests, result, txContext) {
744
778
  const actionsListStr = requests.map((r)=>r.action).join(', ');
745
779
  if (result instanceof FormattedViemError) {
@@ -845,7 +879,8 @@ export class SequencerPublisher {
845
879
  const slotOffset = pipelined ? this.aztecSlotDuration : 0n;
846
880
  const nextL1SlotTs = this.getNextL1SlotTimestamp() + slotOffset;
847
881
  return this.rollupContract.canProposeAt(tipArchive.toBuffer(), msgSender.toString(), nextL1SlotTs, {
848
- forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber
882
+ forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber,
883
+ forceArchive: opts.forceArchive
849
884
  }).catch((err)=>{
850
885
  if (err instanceof FormattedViemError && ignoredErrors.find((e)=>err.message.includes(e))) {
851
886
  this.log.warn(`Failed canProposeAtTime check with ${ignoredErrors.find((e)=>err.message.includes(e))}`, {
@@ -876,7 +911,7 @@ export class SequencerPublisher {
876
911
  header.blobsHash.toString(),
877
912
  flags
878
913
  ];
879
- const ts = this.getNextL1SlotTimestamp();
914
+ const ts = this.getSimulationTimestamp(header.slotNumber);
880
915
  const stateOverrides = await this.rollupContract.makePendingCheckpointNumberOverride(opts?.forcePendingCheckpointNumber);
881
916
  let balance = 0n;
882
917
  if (this.config.fishermanMode) {
@@ -899,7 +934,7 @@ export class SequencerPublisher {
899
934
  }),
900
935
  from: MULTI_CALL_3_ADDRESS
901
936
  }, {
902
- time: ts + 1n
937
+ time: ts
903
938
  }, stateOverrides);
904
939
  this.log.debug(`Simulated validateHeader`);
905
940
  }
@@ -945,6 +980,7 @@ export class SequencerPublisher {
945
980
  gasUsed,
946
981
  checkpointNumber,
947
982
  forcePendingCheckpointNumber: CheckpointNumber(checkpointNumber - 1),
983
+ lastArchive: validationResult.checkpoint.lastArchive,
948
984
  reason
949
985
  };
950
986
  } catch (err) {
@@ -957,8 +993,8 @@ export class SequencerPublisher {
957
993
  request,
958
994
  error: viemError.message
959
995
  });
960
- const latestPendingCheckpointNumber = await this.rollupContract.getCheckpointNumber();
961
- if (latestPendingCheckpointNumber < checkpointNumber) {
996
+ const latestProposedCheckpointNumber = await this.rollupContract.getCheckpointNumber();
997
+ if (latestProposedCheckpointNumber < checkpointNumber) {
962
998
  this.log.verbose(`Checkpoint ${checkpointNumber} has already been invalidated`, {
963
999
  ...logData
964
1000
  });
@@ -1019,9 +1055,6 @@ export class SequencerPublisher {
1019
1055
  }
1020
1056
  }
1021
1057
  /** Simulates `propose` to make sure that the checkpoint is valid for submission */ async validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, options) {
1022
- // Anchor the simulation timestamp to the checkpoint's own slot start time
1023
- // rather than the current L1 block timestamp, which may overshoot into the next slot if the build ran late.
1024
- const ts = checkpoint.header.timestamp;
1025
1058
  const blobFields = checkpoint.toBlobFields();
1026
1059
  const blobs = await getBlobsPerL1Block(blobFields);
1027
1060
  const blobInput = getPrefixedEthBlobCommitments(blobs);
@@ -1038,10 +1071,9 @@ export class SequencerPublisher {
1038
1071
  attestationsAndSignersSignature.toViemSignature(),
1039
1072
  blobInput
1040
1073
  ];
1041
- await this.simulateProposeTx(args, ts, options);
1042
- return ts;
1074
+ await this.simulateProposeTx(args, options);
1043
1075
  }
1044
- async enqueueCastSignalHelper(slotNumber, timestamp, signalType, payload, base, signerAddress, signer) {
1076
+ async enqueueCastSignalHelper(slotNumber, signalType, payload, base, signerAddress, signer) {
1045
1077
  if (this.lastActions[signalType] && this.lastActions[signalType] === slotNumber) {
1046
1078
  this.log.debug(`Skipping duplicate vote cast signal ${signalType} for slot ${slotNumber}`);
1047
1079
  return false;
@@ -1098,6 +1130,7 @@ export class SequencerPublisher {
1098
1130
  lastValidL2Slot: slotNumber
1099
1131
  });
1100
1132
  const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1133
+ const timestamp = this.getSimulationTimestamp(slotNumber);
1101
1134
  try {
1102
1135
  await this.l1TxUtils.simulate(request, {
1103
1136
  time: timestamp
@@ -1110,7 +1143,10 @@ export class SequencerPublisher {
1110
1143
  });
1111
1144
  } catch (err) {
1112
1145
  const viemError = formatViemError(err);
1113
- this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError);
1146
+ this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError, {
1147
+ simulationTimestamp: timestamp,
1148
+ l1BlockNumber
1149
+ });
1114
1150
  this.backupFailedTx({
1115
1151
  id: keccak256(request.data),
1116
1152
  failureType: 'simulation',
@@ -1175,55 +1211,17 @@ export class SequencerPublisher {
1175
1211
  /**
1176
1212
  * Enqueues a governance castSignal transaction to cast a signal for a given slot number.
1177
1213
  * @param slotNumber - The slot number to cast a signal for.
1178
- * @param timestamp - The timestamp of the slot to cast a signal for.
1179
1214
  * @returns True if the signal was successfully enqueued, false otherwise.
1180
- */ enqueueGovernanceCastSignal(governancePayload, slotNumber, timestamp, signerAddress, signer) {
1181
- return this.enqueueCastSignalHelper(slotNumber, timestamp, 'governance-signal', governancePayload, this.govProposerContract, signerAddress, signer);
1215
+ */ enqueueGovernanceCastSignal(governancePayload, slotNumber, signerAddress, signer) {
1216
+ return this.enqueueCastSignalHelper(slotNumber, 'governance-signal', governancePayload, this.govProposerContract, signerAddress, signer);
1182
1217
  }
1183
- /** Enqueues all slashing actions as returned by the slasher client. */ async enqueueSlashingActions(actions, slotNumber, timestamp, signerAddress, signer) {
1218
+ /** Enqueues all slashing actions as returned by the slasher client. */ async enqueueSlashingActions(actions, slotNumber, signerAddress, signer) {
1184
1219
  if (actions.length === 0) {
1185
1220
  this.log.debug(`No slashing actions to enqueue for slot ${slotNumber}`);
1186
1221
  return false;
1187
1222
  }
1188
1223
  for (const action of actions){
1189
1224
  switch(action.type){
1190
- case 'vote-empire-payload':
1191
- {
1192
- if (this.slashingProposerContract?.type !== 'empire') {
1193
- this.log.error('Cannot vote for empire payload on non-empire slashing contract');
1194
- break;
1195
- }
1196
- this.log.debug(`Enqueuing slashing vote for payload ${action.payload} at slot ${slotNumber}`, {
1197
- signerAddress
1198
- });
1199
- await this.enqueueCastSignalHelper(slotNumber, timestamp, 'empire-slashing-signal', action.payload, this.slashingProposerContract, signerAddress, signer);
1200
- break;
1201
- }
1202
- case 'create-empire-payload':
1203
- {
1204
- this.log.debug(`Enqueuing slashing create payload at slot ${slotNumber}`, {
1205
- slotNumber,
1206
- signerAddress
1207
- });
1208
- const request = this.slashFactoryContract.buildCreatePayloadRequest(action.data);
1209
- await this.simulateAndEnqueueRequest('create-empire-payload', request, (receipt)=>!!this.slashFactoryContract.tryExtractSlashPayloadCreatedEvent(receipt.logs), slotNumber, timestamp);
1210
- break;
1211
- }
1212
- case 'execute-empire-payload':
1213
- {
1214
- this.log.debug(`Enqueuing slashing execute payload at slot ${slotNumber}`, {
1215
- slotNumber,
1216
- signerAddress
1217
- });
1218
- if (this.slashingProposerContract?.type !== 'empire') {
1219
- this.log.error('Cannot execute slashing payload on non-empire slashing contract');
1220
- return false;
1221
- }
1222
- const empireSlashingProposer = this.slashingProposerContract;
1223
- const request = empireSlashingProposer.buildExecuteRoundRequest(action.round);
1224
- await this.simulateAndEnqueueRequest('execute-empire-payload', request, (receipt)=>!!empireSlashingProposer.tryExtractPayloadSubmittedEvent(receipt.logs), slotNumber, timestamp);
1225
- break;
1226
- }
1227
1225
  case 'vote-offenses':
1228
1226
  {
1229
1227
  this.log.debug(`Enqueuing slashing vote for ${action.votes.length} votes at slot ${slotNumber}`, {
@@ -1232,14 +1230,13 @@ export class SequencerPublisher {
1232
1230
  votesCount: action.votes.length,
1233
1231
  signerAddress
1234
1232
  });
1235
- if (this.slashingProposerContract?.type !== 'tally') {
1236
- this.log.error('Cannot vote for slashing offenses on non-tally slashing contract');
1233
+ if (!this.slashingProposerContract) {
1234
+ this.log.error('No slashing proposer contract available');
1237
1235
  return false;
1238
1236
  }
1239
- const tallySlashingProposer = this.slashingProposerContract;
1240
1237
  const votes = bufferToHex(encodeSlashConsensusVotes(action.votes));
1241
- const request = await tallySlashingProposer.buildVoteRequestFromSigner(votes, slotNumber, signer);
1242
- await this.simulateAndEnqueueRequest('vote-offenses', request, (receipt)=>!!tallySlashingProposer.tryExtractVoteCastEvent(receipt.logs), slotNumber, timestamp);
1238
+ const request = await this.slashingProposerContract.buildVoteRequestFromSigner(votes, slotNumber, signer);
1239
+ await this.simulateAndEnqueueRequest('vote-offenses', request, (receipt)=>!!this.slashingProposerContract.tryExtractVoteCastEvent(receipt.logs), slotNumber);
1243
1240
  break;
1244
1241
  }
1245
1242
  case 'execute-slash':
@@ -1249,13 +1246,12 @@ export class SequencerPublisher {
1249
1246
  round: action.round,
1250
1247
  signerAddress
1251
1248
  });
1252
- if (this.slashingProposerContract?.type !== 'tally') {
1253
- this.log.error('Cannot execute slashing offenses on non-tally slashing contract');
1249
+ if (!this.slashingProposerContract) {
1250
+ this.log.error('No slashing proposer contract available');
1254
1251
  return false;
1255
1252
  }
1256
- const tallySlashingProposer = this.slashingProposerContract;
1257
- const request = tallySlashingProposer.buildExecuteRoundRequest(action.round, action.committees);
1258
- await this.simulateAndEnqueueRequest('execute-slash', request, (receipt)=>!!tallySlashingProposer.tryExtractRoundExecutedEvent(receipt.logs), slotNumber, timestamp);
1253
+ const executeRequest = this.slashingProposerContract.buildExecuteRoundRequest(action.round, action.committees);
1254
+ await this.simulateAndEnqueueRequest('execute-slash', executeRequest, (receipt)=>!!this.slashingProposerContract.tryExtractRoundExecutedEvent(receipt.logs), slotNumber);
1259
1255
  break;
1260
1256
  }
1261
1257
  default:
@@ -1279,14 +1275,13 @@ export class SequencerPublisher {
1279
1275
  attestationsAndSignersSignature,
1280
1276
  feeAssetPriceModifier: checkpoint.feeAssetPriceModifier
1281
1277
  };
1282
- let ts;
1283
1278
  try {
1284
1279
  // @note This will make sure that we are passing the checks for our header ASSUMING that the data is also made available
1285
1280
  // This means that we can avoid the simulation issues in later checks.
1286
1281
  // By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which
1287
1282
  // make time consistency checks break.
1288
1283
  // TODO(palla): Check whether we're validating twice, once here and once within addProposeTx, since we call simulateProposeTx in both places.
1289
- ts = await this.validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, opts);
1284
+ await this.validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, opts);
1290
1285
  } catch (err) {
1291
1286
  this.log.error(`Checkpoint validation failed. ${err instanceof Error ? err.message : 'No error message'}`, err, {
1292
1287
  ...checkpoint.getStats(),
@@ -1295,11 +1290,23 @@ export class SequencerPublisher {
1295
1290
  });
1296
1291
  throw err;
1297
1292
  }
1293
+ // Build a pre-check callback that re-validates the checkpoint before L1 submission.
1294
+ // During pipelining this catches stale proposals due to prunes or L1 reorgs that occur during the pipeline sleep.
1295
+ let preCheck = undefined;
1296
+ if (this.epochCache.isProposerPipeliningEnabled()) {
1297
+ preCheck = async ()=>{
1298
+ this.log.debug(`Re-validating checkpoint ${checkpoint.number} before L1 submission`);
1299
+ await this.validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, {
1300
+ // Forcing pending checkpoint number is included its required if an invalidation request is included
1301
+ forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber
1302
+ });
1303
+ };
1304
+ }
1298
1305
  this.log.verbose(`Enqueuing checkpoint propose transaction`, {
1299
1306
  ...checkpoint.toCheckpointInfo(),
1300
1307
  ...opts
1301
1308
  });
1302
- await this.addProposeTx(checkpoint, proposeTxArgs, opts, ts);
1309
+ await this.addProposeTx(checkpoint, proposeTxArgs, opts, preCheck);
1303
1310
  }
1304
1311
  enqueueInvalidateCheckpoint(request, opts = {}) {
1305
1312
  if (!request) {
@@ -1340,7 +1347,8 @@ export class SequencerPublisher {
1340
1347
  }
1341
1348
  });
1342
1349
  }
1343
- async simulateAndEnqueueRequest(action, request, checkSuccess, slotNumber, timestamp) {
1350
+ async simulateAndEnqueueRequest(action, request, checkSuccess, slotNumber) {
1351
+ const timestamp = this.getSimulationTimestamp(slotNumber);
1344
1352
  const logData = {
1345
1353
  slotNumber,
1346
1354
  timestamp,
@@ -1362,7 +1370,7 @@ export class SequencerPublisher {
1362
1370
  try {
1363
1371
  ({ gasUsed } = await this.l1TxUtils.simulate(request, {
1364
1372
  time: timestamp
1365
- }, [], simulateAbi)); // TODO(palla/slash): Check the timestamp logic
1373
+ }, [], simulateAbi));
1366
1374
  this.log.verbose(`Simulation for ${action} succeeded`, {
1367
1375
  ...logData,
1368
1376
  request,
@@ -1437,13 +1445,14 @@ export class SequencerPublisher {
1437
1445
  * A call to `restart` is required before you can continue publishing.
1438
1446
  */ interrupt() {
1439
1447
  this.interrupted = true;
1448
+ this.interruptibleSleep.interrupt();
1440
1449
  this.l1TxUtils.interrupt();
1441
1450
  }
1442
1451
  /** Restarts the publisher after calling `interrupt`. */ restart() {
1443
1452
  this.interrupted = false;
1444
1453
  this.l1TxUtils.restart();
1445
1454
  }
1446
- async prepareProposeTx(encodedData, timestamp, options) {
1455
+ async prepareProposeTx(encodedData, options) {
1447
1456
  const kzg = Blob.getViemKzgInstance();
1448
1457
  const blobInput = getPrefixedEthBlobCommitments(encodedData.blobs);
1449
1458
  this.log.debug('Validating blob input', {
@@ -1520,7 +1529,7 @@ export class SequencerPublisher {
1520
1529
  encodedData.attestationsAndSignersSignature.toViemSignature(),
1521
1530
  blobInput
1522
1531
  ];
1523
- const { rollupData, simulationResult } = await this.simulateProposeTx(args, timestamp, options);
1532
+ const { rollupData, simulationResult } = await this.simulateProposeTx(args, options);
1524
1533
  return {
1525
1534
  args,
1526
1535
  blobEvaluationGas,
@@ -1531,16 +1540,17 @@ export class SequencerPublisher {
1531
1540
  /**
1532
1541
  * Simulates the propose tx with eth_simulateV1
1533
1542
  * @param args - The propose tx args
1534
- * @param timestamp - The timestamp to simulate proposal at
1535
1543
  * @returns The simulation result
1536
- */ async simulateProposeTx(args, timestamp, options) {
1544
+ */ async simulateProposeTx(args, options) {
1537
1545
  const rollupData = encodeFunctionData({
1538
1546
  abi: RollupAbi,
1539
1547
  functionName: 'propose',
1540
1548
  args
1541
1549
  });
1542
- // override the pending checkpoint number if requested
1550
+ // override the proposed checkpoint number if requested
1543
1551
  const forcePendingCheckpointNumberStateDiff = (options.forcePendingCheckpointNumber !== undefined ? await this.rollupContract.makePendingCheckpointNumberOverride(options.forcePendingCheckpointNumber) : []).flatMap((override)=>override.stateDiff ?? []);
1552
+ // override the fee header for a specific checkpoint number if requested (used when pipelining)
1553
+ const forceProposedFeeHeaderStateDiff = (options.forceProposedFeeHeader !== undefined ? await this.rollupContract.makeFeeHeaderOverride(options.forceProposedFeeHeader.checkpointNumber, options.forceProposedFeeHeader.feeHeader) : []).flatMap((override)=>override.stateDiff ?? []);
1544
1554
  const stateOverrides = [
1545
1555
  {
1546
1556
  address: this.rollupContract.address,
@@ -1550,7 +1560,8 @@ export class SequencerPublisher {
1550
1560
  slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
1551
1561
  value: toPaddedHex(0n, true)
1552
1562
  },
1553
- ...forcePendingCheckpointNumberStateDiff
1563
+ ...forcePendingCheckpointNumberStateDiff,
1564
+ ...forceProposedFeeHeaderStateDiff
1554
1565
  ]
1555
1566
  }
1556
1567
  ];
@@ -1562,6 +1573,7 @@ export class SequencerPublisher {
1562
1573
  });
1563
1574
  }
1564
1575
  const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1576
+ const simTs = this.getSimulationTimestamp(SlotNumber.fromBigInt(args[0].header.slotNumber));
1565
1577
  const simulationResult = await this.l1TxUtils.simulate({
1566
1578
  to: this.rollupContract.address,
1567
1579
  data: rollupData,
@@ -1570,8 +1582,7 @@ export class SequencerPublisher {
1570
1582
  from: this.proposerAddressForSimulation.toString()
1571
1583
  }
1572
1584
  }, {
1573
- // @note we add 1n to the timestamp because geth implementation doesn't like simulation timestamp to be equal to the current block timestamp
1574
- time: timestamp + 1n,
1585
+ time: simTs,
1575
1586
  // @note reth should have a 30m gas limit per block but throws errors that this tx is beyond limit so we increase here
1576
1587
  gasLimit: MAX_L1_TX_LIMIT * 2n
1577
1588
  }, stateOverrides, RollupAbi, {
@@ -1588,7 +1599,9 @@ export class SequencerPublisher {
1588
1599
  logs: []
1589
1600
  };
1590
1601
  }
1591
- this.log.error(`Failed to simulate propose tx`, viemError);
1602
+ this.log.error(`Failed to simulate propose tx`, viemError, {
1603
+ simulationTimestamp: simTs
1604
+ });
1592
1605
  this.backupFailedTx({
1593
1606
  id: keccak256(rollupData),
1594
1607
  failureType: 'simulation',
@@ -1616,11 +1629,11 @@ export class SequencerPublisher {
1616
1629
  simulationResult
1617
1630
  };
1618
1631
  }
1619
- async addProposeTx(checkpoint, encodedData, opts = {}, timestamp) {
1632
+ async addProposeTx(checkpoint, encodedData, opts = {}, preCheck) {
1620
1633
  const slot = checkpoint.header.slotNumber;
1621
1634
  const timer = new Timer();
1622
1635
  const kzg = Blob.getViemKzgInstance();
1623
- const { rollupData, simulationResult, blobEvaluationGas } = await this.prepareProposeTx(encodedData, timestamp, opts);
1636
+ const { rollupData, simulationResult, blobEvaluationGas } = await this.prepareProposeTx(encodedData, opts);
1624
1637
  const startBlock = await this.l1TxUtils.getBlockNumber();
1625
1638
  const gasLimit = this.l1TxUtils.bumpGasLimit(BigInt(Math.ceil(Number(simulationResult.gasUsed) * 64 / 63)) + blobEvaluationGas + SequencerPublisher.MULTICALL_OVERHEAD_GAS_GUESS);
1626
1639
  // Send the blobs to the blob client preemptively. This helps in tests where the sequencer mistakingly thinks that the propose
@@ -1639,6 +1652,7 @@ export class SequencerPublisher {
1639
1652
  ...opts,
1640
1653
  gasLimit
1641
1654
  },
1655
+ preCheck,
1642
1656
  blobConfig: {
1643
1657
  blobs: encodedData.blobs.map((b)=>b.data),
1644
1658
  kzg
@@ -1685,7 +1699,12 @@ export class SequencerPublisher {
1685
1699
  }
1686
1700
  });
1687
1701
  }
1688
- /** Returns the timestamp to use when simulating L1 proposal calls */ getNextL1SlotTimestamp() {
1702
+ /** Returns the timestamp of the last L1 slot within a given L2 slot. Used as the simulation timestamp
1703
+ * for eth_simulateV1 calls, since it's guaranteed to be greater than any L1 block produced during the slot. */ getSimulationTimestamp(slot) {
1704
+ const l1Constants = this.epochCache.getL1Constants();
1705
+ return getLastL1SlotTimestampForL2Slot(slot, l1Constants);
1706
+ }
1707
+ /** Returns the timestamp of the next L1 slot boundary after now. */ getNextL1SlotTimestamp() {
1689
1708
  const l1Constants = this.epochCache.getL1Constants();
1690
1709
  return getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), l1Constants);
1691
1710
  }
@@ -1,4 +1,5 @@
1
1
  import type { EpochCache } from '@aztec/epoch-cache';
2
+ import { type FeeHeader } from '@aztec/ethereum/contracts';
2
3
  import { BlockNumber, CheckpointNumber, EpochNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
3
4
  import { EthAddress } from '@aztec/foundation/eth-address';
4
5
  import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
@@ -7,7 +8,7 @@ import { type TypedEventEmitter } from '@aztec/foundation/types';
7
8
  import type { P2P } from '@aztec/p2p';
8
9
  import type { SlasherClientInterface } from '@aztec/slasher';
9
10
  import { L2Block, type L2BlockSink, type L2BlockSource } from '@aztec/stdlib/block';
10
- import { type Checkpoint } from '@aztec/stdlib/checkpoint';
11
+ import { type Checkpoint, type ProposedCheckpointData } from '@aztec/stdlib/checkpoint';
11
12
  import { type ResolvedSequencerConfig, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
12
13
  import { type L1ToL2MessageSource } from '@aztec/stdlib/messaging';
13
14
  import { Tx } from '@aztec/stdlib/tx';
@@ -29,7 +30,6 @@ import { SequencerState } from './utils.js';
29
30
  export declare class CheckpointProposalJob implements Traceable {
30
31
  private readonly slotNow;
31
32
  private readonly targetSlot;
32
- private readonly epochNow;
33
33
  private readonly targetEpoch;
34
34
  private readonly checkpointNumber;
35
35
  private readonly syncedToBlockNumber;
@@ -55,17 +55,23 @@ export declare class CheckpointProposalJob implements Traceable {
55
55
  private readonly eventEmitter;
56
56
  private readonly setStateFn;
57
57
  readonly tracer: Tracer;
58
+ private readonly proposedCheckpointData?;
58
59
  protected readonly log: Logger;
59
- constructor(slotNow: SlotNumber, targetSlot: SlotNumber, epochNow: EpochNumber, targetEpoch: EpochNumber, checkpointNumber: CheckpointNumber, syncedToBlockNumber: BlockNumber, 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, l1Constants: SequencerRollupConstants, config: ResolvedSequencerConfig, timetable: SequencerTimetable, slasherClient: SlasherClientInterface | undefined, epochCache: EpochCache, dateProvider: DateProvider, metrics: SequencerMetrics, eventEmitter: TypedEventEmitter<SequencerEvents>, setStateFn: (state: SequencerState, slot?: SlotNumber) => void, tracer: Tracer, bindings?: LoggerBindings);
60
- /** The wall-clock slot during which the proposer builds. */
61
- private get slot();
62
- /** The wall-clock epoch. */
63
- private get epoch();
60
+ /** Tracks the fire-and-forget L1 submission promise so it can be awaited during shutdown. */
61
+ private pendingL1Submission;
62
+ /** Fee header override computed during proposeCheckpoint, reused in enqueueCheckpointForSubmission. */
63
+ private computedForceProposedFeeHeader?;
64
+ constructor(slotNow: SlotNumber, targetSlot: SlotNumber, targetEpoch: EpochNumber, checkpointNumber: CheckpointNumber, syncedToBlockNumber: BlockNumber, 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, l1Constants: SequencerRollupConstants, config: ResolvedSequencerConfig, timetable: SequencerTimetable, slasherClient: SlasherClientInterface | undefined, epochCache: EpochCache, dateProvider: DateProvider, metrics: SequencerMetrics, eventEmitter: TypedEventEmitter<SequencerEvents>, setStateFn: (state: SequencerState, slot?: SlotNumber) => void, tracer: Tracer, bindings?: LoggerBindings, proposedCheckpointData?: ProposedCheckpointData | undefined);
65
+ /** Awaits the pending L1 submission if one is in progress. Call during shutdown. */
66
+ awaitPendingSubmission(): Promise<void>;
64
67
  /**
65
68
  * Executes the checkpoint proposal job.
66
- * Returns the published checkpoint if successful, undefined otherwise.
69
+ * Builds blocks, collects attestations, enqueues requests, and schedules L1 submission as a
70
+ * background task so the work loop can return to IDLE immediately.
71
+ * Returns the built checkpoint if successful, undefined otherwise.
67
72
  */
68
73
  execute(): Promise<Checkpoint | undefined>;
74
+ private enqueueCheckpointForSubmission;
69
75
  private proposeCheckpoint;
70
76
  private buildBlocksForCheckpoint;
71
77
  /** Creates a block proposal for a given block via the validator client (unless in fisherman mode) */
@@ -82,9 +88,11 @@ export declare class CheckpointProposalJob implements Traceable {
82
88
  }): Promise<{
83
89
  block: L2Block;
84
90
  usedTxs: Tx[];
91
+ } | {
92
+ failure: 'insufficient-txs' | 'insufficient-valid-txs';
85
93
  } | {
86
94
  error: Error;
87
- } | undefined>;
95
+ }>;
88
96
  private buildSingleBlockWithCheckpointBuilder;
89
97
  private waitForMinTxs;
90
98
  private waitForAttestations;
@@ -97,6 +105,19 @@ export declare class CheckpointProposalJob implements Traceable {
97
105
  * Helper to handle HA double-signing errors. Returns true if the error was handled (caller should yield).
98
106
  */
99
107
  private handleHASigningError;
108
+ /**
109
+ * In times of congestion we need to simulate using the correct fee header override for the previous block
110
+ * We calculate the correct fee header values.
111
+ *
112
+ * If we are in block 1, or the checkpoint we are querying does not exist, we return undefined. However
113
+ * If we are pipelining - where this function is called, the grandparentCheckpointNumber should always exist
114
+ * @param parentCheckpointNumber
115
+ * @returns
116
+ */
117
+ protected computeForceProposedFeeHeader(parentCheckpointNumber: CheckpointNumber): Promise<{
118
+ checkpointNumber: CheckpointNumber;
119
+ feeHeader: FeeHeader;
120
+ } | undefined>;
100
121
  /** Waits until a specific time within the current slot */
101
122
  protected waitUntilTimeInSlot(targetSecondsIntoSlot: number): Promise<void>;
102
123
  /** Waits the polling interval for transactions. Extracted for test overriding. */
@@ -105,4 +126,4 @@ export declare class CheckpointProposalJob implements Traceable {
105
126
  private getSecondsIntoSlot;
106
127
  getPublisher(): SequencerPublisher;
107
128
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQVF6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFHTCxPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUcvRSxPQUFPLEVBR0wsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxzQkFBc0IsRUFDNUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztBQVNwRyxPQUFPLEVBQWlCLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE9BQU8sRUFBYyxLQUFLLFNB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
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFrQixNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsVUFBVSxFQUNYLE1BQU0saUNBQWlDLENBQUM7QUFRekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBMEIsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RixPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBR0wsT0FBTyxFQUNQLEtBQUssV0FBVyxFQUNoQixLQUFLLGFBQWEsRUFFbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUUsS0FBSyxzQkFBc0IsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RyxPQUFPLEVBR0wsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxzQkFBc0IsRUFDNUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztB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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,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,UAAU,EACX,MAAM,iCAAiC,CAAC;AAQzC,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,EAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,0BAA0B,CAAC;AAG/E,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,mBAAmB,EAAmC,MAAM,yBAAyB,CAAC;AASpG,OAAO,EAAiB,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,KAAK,0BAA0B,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGnH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,KAAK,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAK5C;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IAInD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,SAAS,CAAC,MAAM,EAAE,uBAAuB;IACzC,SAAS,CAAC,SAAS,EAAE,kBAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;aACX,MAAM,EAAE,MAAM;IA/BhC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAE/B,YACmB,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,mBAAmB,EAAE,WAAW,EAEhC,QAAQ,EAAE,UAAU,GAAG,SAAS,EAChC,SAAS,EAAE,kBAAkB,EAC7B,eAAe,EAAE,UAAU,EAC3B,oBAAoB,EAAE,2BAA2B,GAAG,SAAS,EAC7D,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,qBAAqB,EACrC,SAAS,EAAE,GAAG,EACd,UAAU,EAAE,sBAAsB,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,0BAA0B,EAC9C,SAAS,EAAE,WAAW,EACtB,WAAW,EAAE,wBAAwB,EAC5C,MAAM,EAAE,uBAAuB,EAC/B,SAAS,EAAE,kBAAkB,EACtB,aAAa,EAAE,sBAAsB,GAAG,SAAS,EACjD,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,iBAAiB,CAAC,eAAe,CAAC,EAChD,UAAU,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,UAAU,KAAK,IAAI,EAC/D,MAAM,EAAE,MAAM,EAC9B,QAAQ,CAAC,EAAE,cAAc,EAM1B;IAED,4DAA4D;IAC5D,OAAO,KAAK,IAAI,GAEf;IAED,4BAA4B;IAC5B,OAAO,KAAK,KAAK,GAEhB;IAED;;;OAGG;IAEU,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAmEtD;YASa,iBAAiB;YA4OjB,wBAAwB;IAiHtC,qGAAqG;IACrG,OAAO,CAAC,mBAAmB;YAuBb,oBAAoB;IAQlC,uEAAuE;IACvE,UACgB,gBAAgB,CAC9B,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE;QACJ,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,WAAW,CAAC;QACzB,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,aAAa,EAAE,IAAI,GAAG,SAAS,CAAC;QAChC,uBAAuB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;KACtC,GACA,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,EAAE,EAAE,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,SAAS,CAAC,CA0H3E;YAGa,qCAAqC;YA0BrC,aAAa;YA2Cb,mBAAmB;IAgFjC,wEAAwE;IACxE,OAAO,CAAC,sBAAsB;YAuEhB,oBAAoB;YAepB,2BAA2B;YAgB3B,8BAA8B;IAwB5C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B,0DAA0D;IAC1D,UACgB,mBAAmB,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhF;IAED,kFAAkF;IAClF,UAAgB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzD;IAED,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,kBAAkB;IAKnB,YAAY,uBAElB;CACF"}
1
+ {"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}