@aztec/sequencer-client 0.0.1-commit.f504929 → 0.0.1-commit.f5d02921e

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 (58) hide show
  1. package/dest/client/sequencer-client.d.ts +4 -1
  2. package/dest/client/sequencer-client.d.ts.map +1 -1
  3. package/dest/client/sequencer-client.js +46 -23
  4. package/dest/config.d.ts +25 -5
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +21 -12
  7. package/dest/global_variable_builder/global_builder.d.ts +15 -9
  8. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  9. package/dest/global_variable_builder/global_builder.js +29 -25
  10. package/dest/global_variable_builder/index.d.ts +2 -2
  11. package/dest/global_variable_builder/index.d.ts.map +1 -1
  12. package/dest/publisher/config.d.ts +13 -1
  13. package/dest/publisher/config.d.ts.map +1 -1
  14. package/dest/publisher/config.js +17 -2
  15. package/dest/publisher/sequencer-publisher-factory.d.ts +3 -3
  16. package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
  17. package/dest/publisher/sequencer-publisher-factory.js +2 -2
  18. package/dest/publisher/sequencer-publisher.d.ts +52 -25
  19. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  20. package/dest/publisher/sequencer-publisher.js +98 -42
  21. package/dest/sequencer/checkpoint_proposal_job.d.ts +33 -8
  22. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
  23. package/dest/sequencer/checkpoint_proposal_job.js +284 -158
  24. package/dest/sequencer/checkpoint_voter.d.ts +1 -2
  25. package/dest/sequencer/checkpoint_voter.d.ts.map +1 -1
  26. package/dest/sequencer/checkpoint_voter.js +2 -5
  27. package/dest/sequencer/events.d.ts +2 -1
  28. package/dest/sequencer/events.d.ts.map +1 -1
  29. package/dest/sequencer/metrics.d.ts +5 -1
  30. package/dest/sequencer/metrics.d.ts.map +1 -1
  31. package/dest/sequencer/metrics.js +11 -0
  32. package/dest/sequencer/sequencer.d.ts +23 -10
  33. package/dest/sequencer/sequencer.d.ts.map +1 -1
  34. package/dest/sequencer/sequencer.js +123 -68
  35. package/dest/sequencer/timetable.d.ts +4 -3
  36. package/dest/sequencer/timetable.d.ts.map +1 -1
  37. package/dest/sequencer/timetable.js +6 -7
  38. package/dest/sequencer/types.d.ts +2 -2
  39. package/dest/sequencer/types.d.ts.map +1 -1
  40. package/dest/test/mock_checkpoint_builder.d.ts +7 -9
  41. package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
  42. package/dest/test/mock_checkpoint_builder.js +39 -30
  43. package/package.json +27 -28
  44. package/src/client/sequencer-client.ts +56 -21
  45. package/src/config.ts +28 -14
  46. package/src/global_variable_builder/global_builder.ts +37 -26
  47. package/src/global_variable_builder/index.ts +1 -1
  48. package/src/publisher/config.ts +32 -0
  49. package/src/publisher/sequencer-publisher-factory.ts +3 -3
  50. package/src/publisher/sequencer-publisher.ts +144 -54
  51. package/src/sequencer/checkpoint_proposal_job.ts +367 -175
  52. package/src/sequencer/checkpoint_voter.ts +1 -12
  53. package/src/sequencer/events.ts +1 -1
  54. package/src/sequencer/metrics.ts +14 -0
  55. package/src/sequencer/sequencer.ts +178 -79
  56. package/src/sequencer/timetable.ts +7 -7
  57. package/src/sequencer/types.ts +1 -1
  58. package/src/test/mock_checkpoint_builder.ts +51 -48
@@ -379,17 +379,20 @@ import { FormattedViemError, formatViemError, mergeAbis, tryExtractEvent } from
379
379
  import { sumBigint } from '@aztec/foundation/bigint';
380
380
  import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
381
381
  import { CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
382
+ import { trimmedBytesLength } from '@aztec/foundation/buffer';
382
383
  import { pick } from '@aztec/foundation/collection';
383
384
  import { TimeoutError } from '@aztec/foundation/error';
384
385
  import { EthAddress } from '@aztec/foundation/eth-address';
385
386
  import { Signature } from '@aztec/foundation/eth-signature';
386
387
  import { createLogger } from '@aztec/foundation/log';
387
388
  import { makeBackoff, retry } from '@aztec/foundation/retry';
389
+ import { InterruptibleSleep } from '@aztec/foundation/sleep';
388
390
  import { bufferToHex } from '@aztec/foundation/string';
389
391
  import { Timer } from '@aztec/foundation/timer';
390
392
  import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
391
393
  import { encodeSlashConsensusVotes } from '@aztec/slasher';
392
394
  import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
395
+ import { getLastL1SlotTimestampForL2Slot, getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
393
396
  import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
394
397
  import { encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
395
398
  import { createL1TxFailedStore } from './l1_tx_failed_store/index.js';
@@ -440,11 +443,14 @@ export class SequencerPublisher {
440
443
  payloadProposedCache;
441
444
  log;
442
445
  ethereumSlotDuration;
446
+ aztecSlotDuration;
447
+ /** Date provider for wall-clock time. */ dateProvider;
443
448
  blobClient;
444
449
  /** Address to use for simulations in fisherman mode (actual proposer's address) */ proposerAddressForSimulation;
445
450
  /** Optional callback to obtain a replacement publisher when the current one fails to send. */ getNextPublisher;
446
451
  /** L1 fee analyzer for fisherman mode */ l1FeeAnalyzer;
447
452
  /** Fee asset price oracle for computing price modifiers from Uniswap V4 */ feeAssetPriceOracle;
453
+ /** Interruptible sleep used by sendRequestsAt to wait until a target timestamp. */ interruptibleSleep;
448
454
  // A CALL to a cold address is 2700 gas
449
455
  static MULTICALL_OVERHEAD_GAS_GUESS = 5000n;
450
456
  // Gas report for VotingWithSigTest shows a max gas of 100k, but we've seen it cost 700k+ in testnet
@@ -464,12 +470,16 @@ export class SequencerPublisher {
464
470
  this.lastActions = {};
465
471
  this.isPayloadEmptyCache = new Map();
466
472
  this.payloadProposedCache = new Set();
473
+ this.interruptibleSleep = new InterruptibleSleep();
467
474
  this.requests = [];
468
475
  this.log = deps.log ?? createLogger('sequencer:publisher');
469
476
  this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
477
+ this.aztecSlotDuration = BigInt(config.aztecSlotDuration);
478
+ this.dateProvider = deps.dateProvider;
470
479
  this.epochCache = deps.epochCache;
471
480
  this.lastActions = deps.lastActions;
472
481
  this.blobClient = deps.blobClient;
482
+ this.dateProvider = deps.dateProvider;
473
483
  const telemetry = deps.telemetry ?? getTelemetryClient();
474
484
  this.metrics = deps.metrics ?? new SequencerPublisherMetrics(telemetry, 'SequencerPublisher');
475
485
  this.tracer = telemetry.getTracer('SequencerPublisher');
@@ -536,7 +546,7 @@ export class SequencerPublisher {
536
546
  this.requests.push(request);
537
547
  }
538
548
  getCurrentL2Slot() {
539
- return this.epochCache.getEpochAndSlotNow().slot;
549
+ return this.epochCache.getSlotNow();
540
550
  }
541
551
  /**
542
552
  * Clears all pending requests without sending them.
@@ -625,8 +635,8 @@ export class SequencerPublisher {
625
635
  // @note - we can only have one blob config per bundle
626
636
  // find requests with gas and blob configs
627
637
  // See https://github.com/AztecProtocol/aztec-packages/issues/11513
628
- const gasConfigs = requestsToProcess.filter((request)=>request.gasConfig).map((request)=>request.gasConfig);
629
- const blobConfigs = requestsToProcess.filter((request)=>request.blobConfig).map((request)=>request.blobConfig);
638
+ const gasConfigs = validRequests.filter((request)=>request.gasConfig).map((request)=>request.gasConfig);
639
+ const blobConfigs = validRequests.filter((request)=>request.blobConfig).map((request)=>request.blobConfig);
630
640
  if (blobConfigs.length > 1) {
631
641
  throw new Error('Multiple blob configs found');
632
642
  }
@@ -734,6 +744,23 @@ export class SequencerPublisher {
734
744
  }
735
745
  }
736
746
  }
747
+ /*
748
+ * Schedules sending all enqueued requests at (or after) the given timestamp.
749
+ * Uses InterruptibleSleep so it can be cancelled via interrupt().
750
+ * Returns the promise for the L1 response (caller should NOT await this in the work loop).
751
+ */ async sendRequestsAt(submitAfter) {
752
+ const ms = submitAfter.getTime() - this.dateProvider.now();
753
+ if (ms > 0) {
754
+ this.log.debug(`Sleeping ${ms}ms before sending requests`, {
755
+ submitAfter
756
+ });
757
+ await this.interruptibleSleep.sleep(ms);
758
+ }
759
+ if (this.interrupted) {
760
+ return undefined;
761
+ }
762
+ return this.sendRequests();
763
+ }
737
764
  callbackBundledTransactions(requests, result, txContext) {
738
765
  const actionsListStr = requests.map((r)=>r.action).join(', ');
739
766
  if (result instanceof FormattedViemError) {
@@ -767,7 +794,16 @@ export class SequencerPublisher {
767
794
  } else {
768
795
  this.log.verbose(`Published bundled transactions (${actionsListStr})`, {
769
796
  result,
770
- requests
797
+ requests: requests.map((r)=>({
798
+ ...r,
799
+ // Avoid logging large blob data
800
+ blobConfig: r.blobConfig ? {
801
+ ...r.blobConfig,
802
+ blobs: r.blobConfig.blobs.map((b)=>({
803
+ size: trimmedBytesLength(b)
804
+ }))
805
+ } : undefined
806
+ }))
771
807
  });
772
808
  const successfulActions = [];
773
809
  const failedActions = [];
@@ -816,18 +852,22 @@ export class SequencerPublisher {
816
852
  }
817
853
  }
818
854
  /**
819
- * @notice Will call `canProposeAtNextEthBlock` to make sure that it is possible to propose
855
+ * @notice Will call `canProposeAt` to make sure that it is possible to propose
820
856
  * @param tipArchive - The archive to check
821
857
  * @returns The slot and block number if it is possible to propose, undefined otherwise
822
- */ canProposeAtNextEthBlock(tipArchive, msgSender, opts = {}) {
858
+ */ canProposeAt(tipArchive, msgSender, opts = {}) {
823
859
  // TODO: #14291 - should loop through multiple keys to check if any of them can propose
824
860
  const ignoredErrors = [
825
861
  'SlotAlreadyInChain',
826
862
  'InvalidProposer',
827
863
  'InvalidArchive'
828
864
  ];
829
- return this.rollupContract.canProposeAtNextEthBlock(tipArchive.toBuffer(), msgSender.toString(), Number(this.ethereumSlotDuration), {
830
- forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber
865
+ const pipelined = opts.pipelined ?? this.epochCache.isProposerPipeliningEnabled();
866
+ const slotOffset = pipelined ? this.aztecSlotDuration : 0n;
867
+ const nextL1SlotTs = this.getNextL1SlotTimestamp() + slotOffset;
868
+ return this.rollupContract.canProposeAt(tipArchive.toBuffer(), msgSender.toString(), nextL1SlotTs, {
869
+ forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber,
870
+ forceArchive: opts.forceArchive
831
871
  }).catch((err)=>{
832
872
  if (err instanceof FormattedViemError && ignoredErrors.find((e)=>err.message.includes(e))) {
833
873
  this.log.warn(`Failed canProposeAtTime check with ${ignoredErrors.find((e)=>err.message.includes(e))}`, {
@@ -858,7 +898,7 @@ export class SequencerPublisher {
858
898
  header.blobsHash.toString(),
859
899
  flags
860
900
  ];
861
- const ts = BigInt((await this.l1TxUtils.getBlock()).timestamp + this.ethereumSlotDuration);
901
+ const ts = this.getSimulationTimestamp(header.slotNumber);
862
902
  const stateOverrides = await this.rollupContract.makePendingCheckpointNumberOverride(opts?.forcePendingCheckpointNumber);
863
903
  let balance = 0n;
864
904
  if (this.config.fishermanMode) {
@@ -881,7 +921,7 @@ export class SequencerPublisher {
881
921
  }),
882
922
  from: MULTI_CALL_3_ADDRESS
883
923
  }, {
884
- time: ts + 1n
924
+ time: ts
885
925
  }, stateOverrides);
886
926
  this.log.debug(`Simulated validateHeader`);
887
927
  }
@@ -927,6 +967,7 @@ export class SequencerPublisher {
927
967
  gasUsed,
928
968
  checkpointNumber,
929
969
  forcePendingCheckpointNumber: CheckpointNumber(checkpointNumber - 1),
970
+ lastArchive: validationResult.checkpoint.lastArchive,
930
971
  reason
931
972
  };
932
973
  } catch (err) {
@@ -939,8 +980,8 @@ export class SequencerPublisher {
939
980
  request,
940
981
  error: viemError.message
941
982
  });
942
- const latestPendingCheckpointNumber = await this.rollupContract.getCheckpointNumber();
943
- if (latestPendingCheckpointNumber < checkpointNumber) {
983
+ const latestProposedCheckpointNumber = await this.rollupContract.getCheckpointNumber();
984
+ if (latestProposedCheckpointNumber < checkpointNumber) {
944
985
  this.log.verbose(`Checkpoint ${checkpointNumber} has already been invalidated`, {
945
986
  ...logData
946
987
  });
@@ -1001,7 +1042,6 @@ export class SequencerPublisher {
1001
1042
  }
1002
1043
  }
1003
1044
  /** Simulates `propose` to make sure that the checkpoint is valid for submission */ async validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, options) {
1004
- const ts = BigInt((await this.l1TxUtils.getBlock()).timestamp + this.ethereumSlotDuration);
1005
1045
  const blobFields = checkpoint.toBlobFields();
1006
1046
  const blobs = await getBlobsPerL1Block(blobFields);
1007
1047
  const blobInput = getPrefixedEthBlobCommitments(blobs);
@@ -1018,10 +1058,9 @@ export class SequencerPublisher {
1018
1058
  attestationsAndSignersSignature.toViemSignature(),
1019
1059
  blobInput
1020
1060
  ];
1021
- await this.simulateProposeTx(args, ts, options);
1022
- return ts;
1061
+ await this.simulateProposeTx(args, options);
1023
1062
  }
1024
- async enqueueCastSignalHelper(slotNumber, timestamp, signalType, payload, base, signerAddress, signer) {
1063
+ async enqueueCastSignalHelper(slotNumber, signalType, payload, base, signerAddress, signer) {
1025
1064
  if (this.lastActions[signalType] && this.lastActions[signalType] === slotNumber) {
1026
1065
  this.log.debug(`Skipping duplicate vote cast signal ${signalType} for slot ${slotNumber}`);
1027
1066
  return false;
@@ -1078,6 +1117,7 @@ export class SequencerPublisher {
1078
1117
  lastValidL2Slot: slotNumber
1079
1118
  });
1080
1119
  const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1120
+ const timestamp = this.getSimulationTimestamp(slotNumber);
1081
1121
  try {
1082
1122
  await this.l1TxUtils.simulate(request, {
1083
1123
  time: timestamp
@@ -1090,7 +1130,10 @@ export class SequencerPublisher {
1090
1130
  });
1091
1131
  } catch (err) {
1092
1132
  const viemError = formatViemError(err);
1093
- this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError);
1133
+ this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError, {
1134
+ simulationTimestamp: timestamp,
1135
+ l1BlockNumber
1136
+ });
1094
1137
  this.backupFailedTx({
1095
1138
  id: keccak256(request.data),
1096
1139
  failureType: 'simulation',
@@ -1155,12 +1198,11 @@ export class SequencerPublisher {
1155
1198
  /**
1156
1199
  * Enqueues a governance castSignal transaction to cast a signal for a given slot number.
1157
1200
  * @param slotNumber - The slot number to cast a signal for.
1158
- * @param timestamp - The timestamp of the slot to cast a signal for.
1159
1201
  * @returns True if the signal was successfully enqueued, false otherwise.
1160
- */ enqueueGovernanceCastSignal(governancePayload, slotNumber, timestamp, signerAddress, signer) {
1161
- return this.enqueueCastSignalHelper(slotNumber, timestamp, 'governance-signal', governancePayload, this.govProposerContract, signerAddress, signer);
1202
+ */ enqueueGovernanceCastSignal(governancePayload, slotNumber, signerAddress, signer) {
1203
+ return this.enqueueCastSignalHelper(slotNumber, 'governance-signal', governancePayload, this.govProposerContract, signerAddress, signer);
1162
1204
  }
1163
- /** Enqueues all slashing actions as returned by the slasher client. */ async enqueueSlashingActions(actions, slotNumber, timestamp, signerAddress, signer) {
1205
+ /** Enqueues all slashing actions as returned by the slasher client. */ async enqueueSlashingActions(actions, slotNumber, signerAddress, signer) {
1164
1206
  if (actions.length === 0) {
1165
1207
  this.log.debug(`No slashing actions to enqueue for slot ${slotNumber}`);
1166
1208
  return false;
@@ -1176,7 +1218,7 @@ export class SequencerPublisher {
1176
1218
  this.log.debug(`Enqueuing slashing vote for payload ${action.payload} at slot ${slotNumber}`, {
1177
1219
  signerAddress
1178
1220
  });
1179
- await this.enqueueCastSignalHelper(slotNumber, timestamp, 'empire-slashing-signal', action.payload, this.slashingProposerContract, signerAddress, signer);
1221
+ await this.enqueueCastSignalHelper(slotNumber, 'empire-slashing-signal', action.payload, this.slashingProposerContract, signerAddress, signer);
1180
1222
  break;
1181
1223
  }
1182
1224
  case 'create-empire-payload':
@@ -1186,7 +1228,7 @@ export class SequencerPublisher {
1186
1228
  signerAddress
1187
1229
  });
1188
1230
  const request = this.slashFactoryContract.buildCreatePayloadRequest(action.data);
1189
- await this.simulateAndEnqueueRequest('create-empire-payload', request, (receipt)=>!!this.slashFactoryContract.tryExtractSlashPayloadCreatedEvent(receipt.logs), slotNumber, timestamp);
1231
+ await this.simulateAndEnqueueRequest('create-empire-payload', request, (receipt)=>!!this.slashFactoryContract.tryExtractSlashPayloadCreatedEvent(receipt.logs), slotNumber);
1190
1232
  break;
1191
1233
  }
1192
1234
  case 'execute-empire-payload':
@@ -1201,7 +1243,7 @@ export class SequencerPublisher {
1201
1243
  }
1202
1244
  const empireSlashingProposer = this.slashingProposerContract;
1203
1245
  const request = empireSlashingProposer.buildExecuteRoundRequest(action.round);
1204
- await this.simulateAndEnqueueRequest('execute-empire-payload', request, (receipt)=>!!empireSlashingProposer.tryExtractPayloadSubmittedEvent(receipt.logs), slotNumber, timestamp);
1246
+ await this.simulateAndEnqueueRequest('execute-empire-payload', request, (receipt)=>!!empireSlashingProposer.tryExtractPayloadSubmittedEvent(receipt.logs), slotNumber);
1205
1247
  break;
1206
1248
  }
1207
1249
  case 'vote-offenses':
@@ -1219,7 +1261,7 @@ export class SequencerPublisher {
1219
1261
  const tallySlashingProposer = this.slashingProposerContract;
1220
1262
  const votes = bufferToHex(encodeSlashConsensusVotes(action.votes));
1221
1263
  const request = await tallySlashingProposer.buildVoteRequestFromSigner(votes, slotNumber, signer);
1222
- await this.simulateAndEnqueueRequest('vote-offenses', request, (receipt)=>!!tallySlashingProposer.tryExtractVoteCastEvent(receipt.logs), slotNumber, timestamp);
1264
+ await this.simulateAndEnqueueRequest('vote-offenses', request, (receipt)=>!!tallySlashingProposer.tryExtractVoteCastEvent(receipt.logs), slotNumber);
1223
1265
  break;
1224
1266
  }
1225
1267
  case 'execute-slash':
@@ -1235,7 +1277,7 @@ export class SequencerPublisher {
1235
1277
  }
1236
1278
  const tallySlashingProposer = this.slashingProposerContract;
1237
1279
  const request = tallySlashingProposer.buildExecuteRoundRequest(action.round, action.committees);
1238
- await this.simulateAndEnqueueRequest('execute-slash', request, (receipt)=>!!tallySlashingProposer.tryExtractRoundExecutedEvent(receipt.logs), slotNumber, timestamp);
1280
+ await this.simulateAndEnqueueRequest('execute-slash', request, (receipt)=>!!tallySlashingProposer.tryExtractRoundExecutedEvent(receipt.logs), slotNumber);
1239
1281
  break;
1240
1282
  }
1241
1283
  default:
@@ -1259,14 +1301,13 @@ export class SequencerPublisher {
1259
1301
  attestationsAndSignersSignature,
1260
1302
  feeAssetPriceModifier: checkpoint.feeAssetPriceModifier
1261
1303
  };
1262
- let ts;
1263
1304
  try {
1264
1305
  // @note This will make sure that we are passing the checks for our header ASSUMING that the data is also made available
1265
1306
  // This means that we can avoid the simulation issues in later checks.
1266
1307
  // By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which
1267
1308
  // make time consistency checks break.
1268
1309
  // TODO(palla): Check whether we're validating twice, once here and once within addProposeTx, since we call simulateProposeTx in both places.
1269
- ts = await this.validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, opts);
1310
+ await this.validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, opts);
1270
1311
  } catch (err) {
1271
1312
  this.log.error(`Checkpoint validation failed. ${err instanceof Error ? err.message : 'No error message'}`, err, {
1272
1313
  ...checkpoint.getStats(),
@@ -1279,7 +1320,7 @@ export class SequencerPublisher {
1279
1320
  ...checkpoint.toCheckpointInfo(),
1280
1321
  ...opts
1281
1322
  });
1282
- await this.addProposeTx(checkpoint, proposeTxArgs, opts, ts);
1323
+ await this.addProposeTx(checkpoint, proposeTxArgs, opts);
1283
1324
  }
1284
1325
  enqueueInvalidateCheckpoint(request, opts = {}) {
1285
1326
  if (!request) {
@@ -1320,7 +1361,8 @@ export class SequencerPublisher {
1320
1361
  }
1321
1362
  });
1322
1363
  }
1323
- async simulateAndEnqueueRequest(action, request, checkSuccess, slotNumber, timestamp) {
1364
+ async simulateAndEnqueueRequest(action, request, checkSuccess, slotNumber) {
1365
+ const timestamp = this.getSimulationTimestamp(slotNumber);
1324
1366
  const logData = {
1325
1367
  slotNumber,
1326
1368
  timestamp,
@@ -1342,7 +1384,7 @@ export class SequencerPublisher {
1342
1384
  try {
1343
1385
  ({ gasUsed } = await this.l1TxUtils.simulate(request, {
1344
1386
  time: timestamp
1345
- }, [], simulateAbi)); // TODO(palla/slash): Check the timestamp logic
1387
+ }, [], simulateAbi));
1346
1388
  this.log.verbose(`Simulation for ${action} succeeded`, {
1347
1389
  ...logData,
1348
1390
  request,
@@ -1417,13 +1459,14 @@ export class SequencerPublisher {
1417
1459
  * A call to `restart` is required before you can continue publishing.
1418
1460
  */ interrupt() {
1419
1461
  this.interrupted = true;
1462
+ this.interruptibleSleep.interrupt();
1420
1463
  this.l1TxUtils.interrupt();
1421
1464
  }
1422
1465
  /** Restarts the publisher after calling `interrupt`. */ restart() {
1423
1466
  this.interrupted = false;
1424
1467
  this.l1TxUtils.restart();
1425
1468
  }
1426
- async prepareProposeTx(encodedData, timestamp, options) {
1469
+ async prepareProposeTx(encodedData, options) {
1427
1470
  const kzg = Blob.getViemKzgInstance();
1428
1471
  const blobInput = getPrefixedEthBlobCommitments(encodedData.blobs);
1429
1472
  this.log.debug('Validating blob input', {
@@ -1500,7 +1543,7 @@ export class SequencerPublisher {
1500
1543
  encodedData.attestationsAndSignersSignature.toViemSignature(),
1501
1544
  blobInput
1502
1545
  ];
1503
- const { rollupData, simulationResult } = await this.simulateProposeTx(args, timestamp, options);
1546
+ const { rollupData, simulationResult } = await this.simulateProposeTx(args, options);
1504
1547
  return {
1505
1548
  args,
1506
1549
  blobEvaluationGas,
@@ -1511,16 +1554,17 @@ export class SequencerPublisher {
1511
1554
  /**
1512
1555
  * Simulates the propose tx with eth_simulateV1
1513
1556
  * @param args - The propose tx args
1514
- * @param timestamp - The timestamp to simulate proposal at
1515
1557
  * @returns The simulation result
1516
- */ async simulateProposeTx(args, timestamp, options) {
1558
+ */ async simulateProposeTx(args, options) {
1517
1559
  const rollupData = encodeFunctionData({
1518
1560
  abi: RollupAbi,
1519
1561
  functionName: 'propose',
1520
1562
  args
1521
1563
  });
1522
- // override the pending checkpoint number if requested
1564
+ // override the proposed checkpoint number if requested
1523
1565
  const forcePendingCheckpointNumberStateDiff = (options.forcePendingCheckpointNumber !== undefined ? await this.rollupContract.makePendingCheckpointNumberOverride(options.forcePendingCheckpointNumber) : []).flatMap((override)=>override.stateDiff ?? []);
1566
+ // override the fee header for a specific checkpoint number if requested (used when pipelining)
1567
+ const forceProposedFeeHeaderStateDiff = (options.forceProposedFeeHeader !== undefined ? await this.rollupContract.makeFeeHeaderOverride(options.forceProposedFeeHeader.checkpointNumber, options.forceProposedFeeHeader.feeHeader) : []).flatMap((override)=>override.stateDiff ?? []);
1524
1568
  const stateOverrides = [
1525
1569
  {
1526
1570
  address: this.rollupContract.address,
@@ -1530,7 +1574,8 @@ export class SequencerPublisher {
1530
1574
  slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
1531
1575
  value: toPaddedHex(0n, true)
1532
1576
  },
1533
- ...forcePendingCheckpointNumberStateDiff
1577
+ ...forcePendingCheckpointNumberStateDiff,
1578
+ ...forceProposedFeeHeaderStateDiff
1534
1579
  ]
1535
1580
  }
1536
1581
  ];
@@ -1542,6 +1587,7 @@ export class SequencerPublisher {
1542
1587
  });
1543
1588
  }
1544
1589
  const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1590
+ const simTs = this.getSimulationTimestamp(SlotNumber.fromBigInt(args[0].header.slotNumber));
1545
1591
  const simulationResult = await this.l1TxUtils.simulate({
1546
1592
  to: this.rollupContract.address,
1547
1593
  data: rollupData,
@@ -1550,8 +1596,7 @@ export class SequencerPublisher {
1550
1596
  from: this.proposerAddressForSimulation.toString()
1551
1597
  }
1552
1598
  }, {
1553
- // @note we add 1n to the timestamp because geth implementation doesn't like simulation timestamp to be equal to the current block timestamp
1554
- time: timestamp + 1n,
1599
+ time: simTs,
1555
1600
  // @note reth should have a 30m gas limit per block but throws errors that this tx is beyond limit so we increase here
1556
1601
  gasLimit: MAX_L1_TX_LIMIT * 2n
1557
1602
  }, stateOverrides, RollupAbi, {
@@ -1568,7 +1613,9 @@ export class SequencerPublisher {
1568
1613
  logs: []
1569
1614
  };
1570
1615
  }
1571
- this.log.error(`Failed to simulate propose tx`, viemError);
1616
+ this.log.error(`Failed to simulate propose tx`, viemError, {
1617
+ simulationTimestamp: simTs
1618
+ });
1572
1619
  this.backupFailedTx({
1573
1620
  id: keccak256(rollupData),
1574
1621
  failureType: 'simulation',
@@ -1596,11 +1643,11 @@ export class SequencerPublisher {
1596
1643
  simulationResult
1597
1644
  };
1598
1645
  }
1599
- async addProposeTx(checkpoint, encodedData, opts = {}, timestamp) {
1646
+ async addProposeTx(checkpoint, encodedData, opts = {}) {
1600
1647
  const slot = checkpoint.header.slotNumber;
1601
1648
  const timer = new Timer();
1602
1649
  const kzg = Blob.getViemKzgInstance();
1603
- const { rollupData, simulationResult, blobEvaluationGas } = await this.prepareProposeTx(encodedData, timestamp, opts);
1650
+ const { rollupData, simulationResult, blobEvaluationGas } = await this.prepareProposeTx(encodedData, opts);
1604
1651
  const startBlock = await this.l1TxUtils.getBlockNumber();
1605
1652
  const gasLimit = this.l1TxUtils.bumpGasLimit(BigInt(Math.ceil(Number(simulationResult.gasUsed) * 64 / 63)) + blobEvaluationGas + SequencerPublisher.MULTICALL_OVERHEAD_GAS_GUESS);
1606
1653
  // Send the blobs to the blob client preemptively. This helps in tests where the sequencer mistakingly thinks that the propose
@@ -1665,4 +1712,13 @@ export class SequencerPublisher {
1665
1712
  }
1666
1713
  });
1667
1714
  }
1715
+ /** Returns the timestamp of the last L1 slot within a given L2 slot. Used as the simulation timestamp
1716
+ * for eth_simulateV1 calls, since it's guaranteed to be greater than any L1 block produced during the slot. */ getSimulationTimestamp(slot) {
1717
+ const l1Constants = this.epochCache.getL1Constants();
1718
+ return getLastL1SlotTimestampForL2Slot(slot, l1Constants);
1719
+ }
1720
+ /** Returns the timestamp of the next L1 slot boundary after now. */ getNextL1SlotTimestamp() {
1721
+ const l1Constants = this.epochCache.getL1Constants();
1722
+ return getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), l1Constants);
1723
+ }
1668
1724
  }
@@ -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';
@@ -27,8 +28,9 @@ import { SequencerState } from './utils.js';
27
28
  * the Sequencer once the check for being the proposer for the slot has succeeded.
28
29
  */
29
30
  export declare class CheckpointProposalJob implements Traceable {
30
- private readonly epoch;
31
- private readonly slot;
31
+ private readonly slotNow;
32
+ private readonly targetSlot;
33
+ private readonly targetEpoch;
32
34
  private readonly checkpointNumber;
33
35
  private readonly syncedToBlockNumber;
34
36
  private readonly proposer;
@@ -53,15 +55,27 @@ export declare class CheckpointProposalJob implements Traceable {
53
55
  private readonly eventEmitter;
54
56
  private readonly setStateFn;
55
57
  readonly tracer: Tracer;
58
+ private readonly proposedCheckpointData?;
56
59
  protected readonly log: Logger;
57
- constructor(epoch: EpochNumber, slot: SlotNumber, 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
+ /** 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>;
58
67
  /**
59
68
  * Executes the checkpoint proposal job.
60
- * 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.
61
72
  */
62
73
  execute(): Promise<Checkpoint | undefined>;
74
+ private enqueueCheckpointForSubmission;
63
75
  private proposeCheckpoint;
64
76
  private buildBlocksForCheckpoint;
77
+ /** Creates a block proposal for a given block via the validator client (unless in fisherman mode) */
78
+ private createBlockProposal;
65
79
  private waitUntilNextSubslot;
66
80
  /** Builds a single block. Called from the main block building loop. */
67
81
  protected buildSingleBlock(checkpointBuilder: CheckpointBuilder, opts: {
@@ -71,11 +85,9 @@ export declare class CheckpointProposalJob implements Traceable {
71
85
  indexWithinCheckpoint: IndexWithinCheckpoint;
72
86
  buildDeadline: Date | undefined;
73
87
  txHashesAlreadyIncluded: Set<string>;
74
- remainingBlobFields: number;
75
88
  }): Promise<{
76
89
  block: L2Block;
77
90
  usedTxs: Tx[];
78
- remainingBlobFields: number;
79
91
  } | {
80
92
  error: Error;
81
93
  } | undefined>;
@@ -91,6 +103,19 @@ export declare class CheckpointProposalJob implements Traceable {
91
103
  * Helper to handle HA double-signing errors. Returns true if the error was handled (caller should yield).
92
104
  */
93
105
  private handleHASigningError;
106
+ /**
107
+ * In times of congestion we need to simulate using the correct fee header override for the previous block
108
+ * We calculate the correct fee header values.
109
+ *
110
+ * If we are in block 1, or the checkpoint we are querying does not exist, we return undefined. However
111
+ * If we are pipelining - where this function is called, the grandparentCheckpointNumber should always exist
112
+ * @param parentCheckpointNumber
113
+ * @returns
114
+ */
115
+ protected computeForceProposedFeeHeader(parentCheckpointNumber: CheckpointNumber): Promise<{
116
+ checkpointNumber: CheckpointNumber;
117
+ feeHeader: FeeHeader;
118
+ } | undefined>;
94
119
  /** Waits until a specific time within the current slot */
95
120
  protected waitUntilTimeInSlot(targetSecondsIntoSlot: number): Promise<void>;
96
121
  /** Waits the polling interval for transactions. Extracted for test overriding. */
@@ -99,4 +124,4 @@ export declare class CheckpointProposalJob implements Traceable {
99
124
  private getSecondsIntoSlot;
100
125
  getPublisher(): SequencerPublisher;
101
126
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQVF6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFHTCxPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNELE9BQU8sRUFHTCxLQUFLLHVCQUF1QixFQUM1QixLQUFLLHNCQUFzQixFQUM1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUFtQyxNQUFNLHlCQUF5QixDQUFDO0FBSXBHLE9BQU8sRUFBaUIsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxFQUFjLEtBQUssU0FB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
127
+ //# 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":"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"}
1
+ {"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}