@aztec/sequencer-client 0.0.1-commit.4d79d1f2d → 0.0.1-commit.5358163d3

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 (68) hide show
  1. package/dest/client/sequencer-client.d.ts +12 -7
  2. package/dest/client/sequencer-client.d.ts.map +1 -1
  3. package/dest/client/sequencer-client.js +15 -4
  4. package/dest/config.d.ts +3 -3
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +26 -12
  7. package/dest/global_variable_builder/global_builder.d.ts +2 -4
  8. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  9. package/dest/publisher/config.d.ts +35 -17
  10. package/dest/publisher/config.d.ts.map +1 -1
  11. package/dest/publisher/config.js +106 -42
  12. package/dest/publisher/index.d.ts +2 -1
  13. package/dest/publisher/index.d.ts.map +1 -1
  14. package/dest/publisher/l1_tx_failed_store/factory.d.ts +11 -0
  15. package/dest/publisher/l1_tx_failed_store/factory.d.ts.map +1 -0
  16. package/dest/publisher/l1_tx_failed_store/factory.js +22 -0
  17. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +59 -0
  18. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -0
  19. package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +1 -0
  20. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +15 -0
  21. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +1 -0
  22. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +34 -0
  23. package/dest/publisher/l1_tx_failed_store/index.d.ts +4 -0
  24. package/dest/publisher/l1_tx_failed_store/index.d.ts.map +1 -0
  25. package/dest/publisher/l1_tx_failed_store/index.js +2 -0
  26. package/dest/publisher/sequencer-publisher-factory.d.ts +11 -3
  27. package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
  28. package/dest/publisher/sequencer-publisher-factory.js +27 -2
  29. package/dest/publisher/sequencer-publisher.d.ts +26 -7
  30. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  31. package/dest/publisher/sequencer-publisher.js +299 -30
  32. package/dest/sequencer/checkpoint_proposal_job.d.ts +1 -1
  33. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
  34. package/dest/sequencer/checkpoint_proposal_job.js +71 -24
  35. package/dest/sequencer/metrics.d.ts +17 -5
  36. package/dest/sequencer/metrics.d.ts.map +1 -1
  37. package/dest/sequencer/metrics.js +86 -15
  38. package/dest/sequencer/sequencer.d.ts +18 -8
  39. package/dest/sequencer/sequencer.d.ts.map +1 -1
  40. package/dest/sequencer/sequencer.js +24 -26
  41. package/dest/sequencer/timetable.js +1 -1
  42. package/dest/test/index.d.ts +3 -5
  43. package/dest/test/index.d.ts.map +1 -1
  44. package/dest/test/mock_checkpoint_builder.d.ts +5 -3
  45. package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
  46. package/dest/test/mock_checkpoint_builder.js +6 -4
  47. package/dest/test/utils.d.ts +3 -3
  48. package/dest/test/utils.d.ts.map +1 -1
  49. package/dest/test/utils.js +5 -4
  50. package/package.json +28 -28
  51. package/src/client/sequencer-client.ts +25 -7
  52. package/src/config.ts +31 -16
  53. package/src/global_variable_builder/global_builder.ts +1 -1
  54. package/src/publisher/config.ts +121 -43
  55. package/src/publisher/index.ts +3 -0
  56. package/src/publisher/l1_tx_failed_store/factory.ts +32 -0
  57. package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +55 -0
  58. package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +46 -0
  59. package/src/publisher/l1_tx_failed_store/index.ts +3 -0
  60. package/src/publisher/sequencer-publisher-factory.ts +38 -6
  61. package/src/publisher/sequencer-publisher.ts +300 -43
  62. package/src/sequencer/checkpoint_proposal_job.ts +103 -19
  63. package/src/sequencer/metrics.ts +92 -18
  64. package/src/sequencer/sequencer.ts +32 -31
  65. package/src/sequencer/timetable.ts +1 -1
  66. package/src/test/index.ts +2 -4
  67. package/src/test/mock_checkpoint_builder.ts +12 -1
  68. package/src/test/utils.ts +5 -2
@@ -372,7 +372,7 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
372
372
  }
373
373
  var _dec, _dec1, _dec2, _initProto;
374
374
  import { Blob, getBlobsPerL1Block, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
375
- import { MULTI_CALL_3_ADDRESS, Multicall3, RollupContract } from '@aztec/ethereum/contracts';
375
+ import { FeeAssetPriceOracle, MULTI_CALL_3_ADDRESS, Multicall3, RollupContract } from '@aztec/ethereum/contracts';
376
376
  import { L1FeeAnalyzer } from '@aztec/ethereum/l1-fee-analysis';
377
377
  import { MAX_L1_TX_LIMIT, WEI_CONST } from '@aztec/ethereum/l1-tx-utils';
378
378
  import { FormattedViemError, formatViemError, mergeAbis, tryExtractEvent } from '@aztec/ethereum/utils';
@@ -380,16 +380,19 @@ 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
382
  import { pick } from '@aztec/foundation/collection';
383
+ import { TimeoutError } from '@aztec/foundation/error';
383
384
  import { EthAddress } from '@aztec/foundation/eth-address';
384
385
  import { Signature } from '@aztec/foundation/eth-signature';
385
386
  import { createLogger } from '@aztec/foundation/log';
387
+ import { makeBackoff, retry } from '@aztec/foundation/retry';
386
388
  import { bufferToHex } from '@aztec/foundation/string';
387
389
  import { Timer } from '@aztec/foundation/timer';
388
390
  import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
389
391
  import { encodeSlashConsensusVotes } from '@aztec/slasher';
390
392
  import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
391
393
  import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
392
- import { encodeFunctionData, toHex } from 'viem';
394
+ import { encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
395
+ import { createL1TxFailedStore } from './l1_tx_failed_store/index.js';
393
396
  import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
394
397
  export const Actions = [
395
398
  'invalidate-by-invalid-attestation',
@@ -429,15 +432,19 @@ export class SequencerPublisher {
429
432
  interrupted;
430
433
  metrics;
431
434
  epochCache;
435
+ failedTxStore;
432
436
  governanceLog;
433
437
  slashingLog;
434
438
  lastActions;
435
439
  isPayloadEmptyCache;
440
+ payloadProposedCache;
436
441
  log;
437
442
  ethereumSlotDuration;
438
443
  blobClient;
439
444
  /** Address to use for simulations in fisherman mode (actual proposer's address) */ proposerAddressForSimulation;
445
+ /** Optional callback to obtain a replacement publisher when the current one fails to send. */ getNextPublisher;
440
446
  /** L1 fee analyzer for fisherman mode */ l1FeeAnalyzer;
447
+ /** Fee asset price oracle for computing price modifiers from Uniswap V4 */ feeAssetPriceOracle;
441
448
  // A CALL to a cold address is 2700 gas
442
449
  static MULTICALL_OVERHEAD_GAS_GUESS = 5000n;
443
450
  // Gas report for VotingWithSigTest shows a max gas of 100k, but we've seen it cost 700k+ in testnet
@@ -456,6 +463,7 @@ export class SequencerPublisher {
456
463
  this.slashingLog = createLogger('sequencer:publisher:slashing');
457
464
  this.lastActions = {};
458
465
  this.isPayloadEmptyCache = new Map();
466
+ this.payloadProposedCache = new Set();
459
467
  this.requests = [];
460
468
  this.log = deps.log ?? createLogger('sequencer:publisher');
461
469
  this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
@@ -466,6 +474,7 @@ export class SequencerPublisher {
466
474
  this.metrics = deps.metrics ?? new SequencerPublisherMetrics(telemetry, 'SequencerPublisher');
467
475
  this.tracer = telemetry.getTracer('SequencerPublisher');
468
476
  this.l1TxUtils = deps.l1TxUtils;
477
+ this.getNextPublisher = deps.getNextPublisher;
469
478
  this.rollupContract = deps.rollupContract;
470
479
  this.govProposerContract = deps.governanceProposerContract;
471
480
  this.slashingProposerContract = deps.slashingProposerContract;
@@ -479,10 +488,36 @@ export class SequencerPublisher {
479
488
  if (config.fishermanMode) {
480
489
  this.l1FeeAnalyzer = new L1FeeAnalyzer(this.l1TxUtils.client, deps.dateProvider, createLogger('sequencer:publisher:fee-analyzer'));
481
490
  }
491
+ // Initialize fee asset price oracle
492
+ this.feeAssetPriceOracle = new FeeAssetPriceOracle(this.l1TxUtils.client, this.rollupContract, createLogger('sequencer:publisher:price-oracle'));
493
+ // Initialize failed L1 tx store (optional, for test networks)
494
+ this.failedTxStore = createL1TxFailedStore(config.l1TxFailedStore, this.log);
495
+ }
496
+ /**
497
+ * Backs up a failed L1 transaction to the configured store for debugging.
498
+ * Does nothing if no store is configured.
499
+ */ backupFailedTx(failedTx) {
500
+ if (!this.failedTxStore) {
501
+ return;
502
+ }
503
+ const tx = {
504
+ ...failedTx,
505
+ timestamp: Date.now()
506
+ };
507
+ // Fire and forget - don't block on backup
508
+ void this.failedTxStore.then((store)=>store?.saveFailedTx(tx)).catch((err)=>{
509
+ this.log.warn(`Failed to backup failed L1 tx to store`, err);
510
+ });
482
511
  }
483
512
  getRollupContract() {
484
513
  return this.rollupContract;
485
514
  }
515
+ /**
516
+ * Gets the fee asset price modifier from the oracle.
517
+ * Returns 0n if the oracle query fails.
518
+ */ getFeeAssetPriceModifier() {
519
+ return this.feeAssetPriceOracle.computePriceModifier();
520
+ }
486
521
  getSenderAddress() {
487
522
  return this.l1TxUtils.getSenderAddress();
488
523
  }
@@ -618,12 +653,34 @@ export class SequencerPublisher {
618
653
  // This ensures the committee gets precomputed correctly
619
654
  validRequests.sort((a, b)=>compareActions(a.action, b.action));
620
655
  try {
656
+ // Capture context for failed tx backup before sending
657
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
658
+ const multicallData = encodeFunctionData({
659
+ abi: multicall3Abi,
660
+ functionName: 'aggregate3',
661
+ args: [
662
+ validRequests.map((r)=>({
663
+ target: r.request.to,
664
+ callData: r.request.data,
665
+ allowFailure: true
666
+ }))
667
+ ]
668
+ });
669
+ const blobDataHex = blobConfig?.blobs?.map((b)=>toHex(b));
670
+ const txContext = {
671
+ multicallData,
672
+ blobData: blobDataHex,
673
+ l1BlockNumber
674
+ };
621
675
  this.log.debug('Forwarding transactions', {
622
676
  validRequests: validRequests.map((request)=>request.action),
623
677
  txConfig
624
678
  });
625
- const result = await Multicall3.forward(validRequests.map((request)=>request.request), this.l1TxUtils, txConfig, blobConfig, this.rollupContract.address, this.log);
626
- const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result);
679
+ const result = await this.forwardWithPublisherRotation(validRequests, txConfig, blobConfig);
680
+ if (result === undefined) {
681
+ return undefined;
682
+ }
683
+ const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result, txContext);
627
684
  return {
628
685
  result,
629
686
  expiredActions,
@@ -643,10 +700,67 @@ export class SequencerPublisher {
643
700
  }
644
701
  }
645
702
  }
646
- callbackBundledTransactions(requests, result) {
703
+ /**
704
+ * Forwards transactions via Multicall3, rotating to the next available publisher if a send
705
+ * failure occurs (i.e. the tx never reached the chain).
706
+ * On-chain reverts and simulation errors are returned as-is without rotation.
707
+ */ async forwardWithPublisherRotation(validRequests, txConfig, blobConfig) {
708
+ const triedAddresses = [];
709
+ let currentPublisher = this.l1TxUtils;
710
+ while(true){
711
+ triedAddresses.push(currentPublisher.getSenderAddress());
712
+ try {
713
+ const result = await Multicall3.forward(validRequests.map((r)=>r.request), currentPublisher, txConfig, blobConfig, this.rollupContract.address, this.log);
714
+ this.l1TxUtils = currentPublisher;
715
+ return result;
716
+ } catch (err) {
717
+ if (err instanceof TimeoutError) {
718
+ throw err;
719
+ }
720
+ const viemError = formatViemError(err);
721
+ if (!this.getNextPublisher) {
722
+ this.log.error('Failed to publish bundled transactions', viemError);
723
+ return undefined;
724
+ }
725
+ this.log.warn(`Publisher ${currentPublisher.getSenderAddress()} failed to send, rotating to next publisher`, viemError);
726
+ const nextPublisher = await this.getNextPublisher([
727
+ ...triedAddresses
728
+ ]);
729
+ if (!nextPublisher) {
730
+ this.log.error('All available publishers exhausted, failed to publish bundled transactions');
731
+ return undefined;
732
+ }
733
+ currentPublisher = nextPublisher;
734
+ }
735
+ }
736
+ }
737
+ callbackBundledTransactions(requests, result, txContext) {
647
738
  const actionsListStr = requests.map((r)=>r.action).join(', ');
648
739
  if (result instanceof FormattedViemError) {
649
740
  this.log.error(`Failed to publish bundled transactions (${actionsListStr})`, result);
741
+ this.backupFailedTx({
742
+ id: keccak256(txContext.multicallData),
743
+ failureType: 'send-error',
744
+ request: {
745
+ to: MULTI_CALL_3_ADDRESS,
746
+ data: txContext.multicallData
747
+ },
748
+ blobData: txContext.blobData,
749
+ l1BlockNumber: txContext.l1BlockNumber.toString(),
750
+ error: {
751
+ message: result.message,
752
+ name: result.name
753
+ },
754
+ context: {
755
+ actions: requests.map((r)=>r.action),
756
+ requests: requests.map((r)=>({
757
+ action: r.action,
758
+ to: r.request.to,
759
+ data: r.request.data
760
+ })),
761
+ sender: this.getSenderAddress().toString()
762
+ }
763
+ });
650
764
  return {
651
765
  failedActions: requests.map((r)=>r.action)
652
766
  };
@@ -664,6 +778,37 @@ export class SequencerPublisher {
664
778
  failedActions.push(request.action);
665
779
  }
666
780
  }
781
+ // Single backup for the whole reverted tx
782
+ if (failedActions.length > 0 && result?.receipt?.status === 'reverted') {
783
+ this.backupFailedTx({
784
+ id: result.receipt.transactionHash,
785
+ failureType: 'revert',
786
+ request: {
787
+ to: MULTI_CALL_3_ADDRESS,
788
+ data: txContext.multicallData
789
+ },
790
+ blobData: txContext.blobData,
791
+ l1BlockNumber: result.receipt.blockNumber.toString(),
792
+ receipt: {
793
+ transactionHash: result.receipt.transactionHash,
794
+ blockNumber: result.receipt.blockNumber.toString(),
795
+ gasUsed: (result.receipt.gasUsed ?? 0n).toString(),
796
+ status: 'reverted'
797
+ },
798
+ error: {
799
+ message: result.errorMsg ?? 'Transaction reverted'
800
+ },
801
+ context: {
802
+ actions: failedActions,
803
+ requests: requests.filter((r)=>failedActions.includes(r.action)).map((r)=>({
804
+ action: r.action,
805
+ to: r.request.to,
806
+ data: r.request.data
807
+ })),
808
+ sender: this.getSenderAddress().toString()
809
+ }
810
+ });
811
+ }
667
812
  return {
668
813
  successfulActions,
669
814
  failedActions
@@ -766,6 +911,7 @@ export class SequencerPublisher {
766
911
  ...logData,
767
912
  request
768
913
  });
914
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
769
915
  try {
770
916
  const { gasUsed } = await this.l1TxUtils.simulate(request, undefined, undefined, mergeAbis([
771
917
  request.abi ?? [],
@@ -808,6 +954,27 @@ export class SequencerPublisher {
808
954
  }
809
955
  // Otherwise, throw. We cannot build the next checkpoint if we cannot invalidate the previous one.
810
956
  this.log.error(`Simulation for invalidate checkpoint ${checkpointNumber} failed`, viemError, logData);
957
+ this.backupFailedTx({
958
+ id: keccak256(request.data),
959
+ failureType: 'simulation',
960
+ request: {
961
+ to: request.to,
962
+ data: request.data,
963
+ value: request.value?.toString()
964
+ },
965
+ l1BlockNumber: l1BlockNumber.toString(),
966
+ error: {
967
+ message: viemError.message,
968
+ name: viemError.name
969
+ },
970
+ context: {
971
+ actions: [
972
+ `invalidate-${reason}`
973
+ ],
974
+ checkpointNumber,
975
+ sender: this.getSenderAddress().toString()
976
+ }
977
+ });
811
978
  throw new Error(`Failed to simulate invalidate checkpoint ${checkpointNumber}`, {
812
979
  cause: viemError
813
980
  });
@@ -835,29 +1002,15 @@ export class SequencerPublisher {
835
1002
  }
836
1003
  /** Simulates `propose` to make sure that the checkpoint is valid for submission */ async validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, options) {
837
1004
  const ts = BigInt((await this.l1TxUtils.getBlock()).timestamp + this.ethereumSlotDuration);
838
- // TODO(palla/mbps): This should not be needed, there's no flow where we propose with zero attestations. Or is there?
839
- // If we have no attestations, we still need to provide the empty attestations
840
- // so that the committee is recalculated correctly
841
- // const ignoreSignatures = attestationsAndSigners.attestations.length === 0;
842
- // if (ignoreSignatures) {
843
- // const { committee } = await this.epochCache.getCommittee(block.header.globalVariables.slotNumber);
844
- // if (!committee) {
845
- // this.log.warn(`No committee found for slot ${block.header.globalVariables.slotNumber}`);
846
- // throw new Error(`No committee found for slot ${block.header.globalVariables.slotNumber}`);
847
- // }
848
- // attestationsAndSigners.attestations = committee.map(committeeMember =>
849
- // CommitteeAttestation.fromAddress(committeeMember),
850
- // );
851
- // }
852
1005
  const blobFields = checkpoint.toBlobFields();
853
- const blobs = getBlobsPerL1Block(blobFields);
1006
+ const blobs = await getBlobsPerL1Block(blobFields);
854
1007
  const blobInput = getPrefixedEthBlobCommitments(blobs);
855
1008
  const args = [
856
1009
  {
857
1010
  header: checkpoint.header.toViem(),
858
1011
  archive: toHex(checkpoint.archive.root.toBuffer()),
859
1012
  oracleInput: {
860
- feeAssetPriceModifier: 0n
1013
+ feeAssetPriceModifier: checkpoint.feeAssetPriceModifier
861
1014
  }
862
1015
  },
863
1016
  attestationsAndSigners.getPackedAttestations(),
@@ -892,6 +1045,28 @@ export class SequencerPublisher {
892
1045
  this.log.warn(`Skipping vote cast for payload with empty code`);
893
1046
  return false;
894
1047
  }
1048
+ // Check if payload was already submitted to governance
1049
+ const cacheKey = payload.toString();
1050
+ if (!this.payloadProposedCache.has(cacheKey)) {
1051
+ try {
1052
+ const l1StartBlock = await this.rollupContract.getL1StartBlock();
1053
+ const proposed = await retry(()=>base.hasPayloadBeenProposed(payload.toString(), l1StartBlock), 'Check if payload was proposed', makeBackoff([
1054
+ 0,
1055
+ 1,
1056
+ 2
1057
+ ]), this.log, true);
1058
+ if (proposed) {
1059
+ this.payloadProposedCache.add(cacheKey);
1060
+ }
1061
+ } catch (err) {
1062
+ this.log.warn(`Failed to check if payload ${payload} was proposed after retries, skipping signal`, err);
1063
+ return false;
1064
+ }
1065
+ }
1066
+ if (this.payloadProposedCache.has(cacheKey)) {
1067
+ this.log.info(`Payload ${payload} was already proposed to governance, stopping signals`);
1068
+ return false;
1069
+ }
895
1070
  const cachedLastVote = this.lastActions[signalType];
896
1071
  this.lastActions[signalType] = slotNumber;
897
1072
  const action = signalType;
@@ -902,6 +1077,7 @@ export class SequencerPublisher {
902
1077
  signer: this.l1TxUtils.client.account?.address,
903
1078
  lastValidL2Slot: slotNumber
904
1079
  });
1080
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
905
1081
  try {
906
1082
  await this.l1TxUtils.simulate(request, {
907
1083
  time: timestamp
@@ -913,7 +1089,29 @@ export class SequencerPublisher {
913
1089
  request
914
1090
  });
915
1091
  } catch (err) {
916
- this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, err);
1092
+ const viemError = formatViemError(err);
1093
+ this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError);
1094
+ this.backupFailedTx({
1095
+ id: keccak256(request.data),
1096
+ failureType: 'simulation',
1097
+ request: {
1098
+ to: request.to,
1099
+ data: request.data,
1100
+ value: request.value?.toString()
1101
+ },
1102
+ l1BlockNumber: l1BlockNumber.toString(),
1103
+ error: {
1104
+ message: viemError.message,
1105
+ name: viemError.name
1106
+ },
1107
+ context: {
1108
+ actions: [
1109
+ action
1110
+ ],
1111
+ slot: slotNumber,
1112
+ sender: this.getSenderAddress().toString()
1113
+ }
1114
+ });
917
1115
  // Yes, we enqueue the request anyway, in case there was a bug with the simulation itself
918
1116
  }
919
1117
  // TODO(palla/slash): All votes (governance and slashing) should txTimeoutAt at the end of the slot.
@@ -1052,13 +1250,14 @@ export class SequencerPublisher {
1052
1250
  /** Simulates and enqueues a proposal for a checkpoint on L1 */ async enqueueProposeCheckpoint(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, opts = {}) {
1053
1251
  const checkpointHeader = checkpoint.header;
1054
1252
  const blobFields = checkpoint.toBlobFields();
1055
- const blobs = getBlobsPerL1Block(blobFields);
1253
+ const blobs = await getBlobsPerL1Block(blobFields);
1056
1254
  const proposeTxArgs = {
1057
1255
  header: checkpointHeader,
1058
1256
  archive: checkpoint.archive.root.toBuffer(),
1059
1257
  blobs,
1060
1258
  attestationsAndSigners,
1061
- attestationsAndSignersSignature
1259
+ attestationsAndSignersSignature,
1260
+ feeAssetPriceModifier: checkpoint.feeAssetPriceModifier
1062
1261
  };
1063
1262
  let ts;
1064
1263
  try {
@@ -1134,6 +1333,7 @@ export class SequencerPublisher {
1134
1333
  const cachedLastActionSlot = this.lastActions[action];
1135
1334
  this.lastActions[action] = slotNumber;
1136
1335
  this.log.debug(`Simulating ${action} for slot ${slotNumber}`, logData);
1336
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1137
1337
  let gasUsed;
1138
1338
  const simulateAbi = mergeAbis([
1139
1339
  request.abi ?? [],
@@ -1151,6 +1351,27 @@ export class SequencerPublisher {
1151
1351
  } catch (err) {
1152
1352
  const viemError = formatViemError(err, simulateAbi);
1153
1353
  this.log.error(`Simulation for ${action} at ${slotNumber} failed`, viemError, logData);
1354
+ this.backupFailedTx({
1355
+ id: keccak256(request.data),
1356
+ failureType: 'simulation',
1357
+ request: {
1358
+ to: request.to,
1359
+ data: request.data,
1360
+ value: request.value?.toString()
1361
+ },
1362
+ l1BlockNumber: l1BlockNumber.toString(),
1363
+ error: {
1364
+ message: viemError.message,
1365
+ name: viemError.name
1366
+ },
1367
+ context: {
1368
+ actions: [
1369
+ action
1370
+ ],
1371
+ slot: slotNumber,
1372
+ sender: this.getSenderAddress().toString()
1373
+ }
1374
+ });
1154
1375
  return false;
1155
1376
  }
1156
1377
  // We issued the simulation against the rollup contract, so we need to account for the overhead of the multicall3
@@ -1229,10 +1450,38 @@ export class SequencerPublisher {
1229
1450
  }, {}, {
1230
1451
  blobs: encodedData.blobs.map((b)=>b.data),
1231
1452
  kzg
1232
- }).catch((err)=>{
1233
- const { message, metaMessages } = formatViemError(err);
1234
- this.log.error(`Failed to validate blobs`, message, {
1235
- metaMessages
1453
+ }).catch(async (err)=>{
1454
+ const viemError = formatViemError(err);
1455
+ this.log.error(`Failed to validate blobs`, viemError.message, {
1456
+ metaMessages: viemError.metaMessages
1457
+ });
1458
+ const validateBlobsData = encodeFunctionData({
1459
+ abi: RollupAbi,
1460
+ functionName: 'validateBlobs',
1461
+ args: [
1462
+ blobInput
1463
+ ]
1464
+ });
1465
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1466
+ this.backupFailedTx({
1467
+ id: keccak256(validateBlobsData),
1468
+ failureType: 'simulation',
1469
+ request: {
1470
+ to: this.rollupContract.address,
1471
+ data: validateBlobsData
1472
+ },
1473
+ blobData: encodedData.blobs.map((b)=>toHex(b.data)),
1474
+ l1BlockNumber: l1BlockNumber.toString(),
1475
+ error: {
1476
+ message: viemError.message,
1477
+ name: viemError.name
1478
+ },
1479
+ context: {
1480
+ actions: [
1481
+ 'validate-blobs'
1482
+ ],
1483
+ sender: this.getSenderAddress().toString()
1484
+ }
1236
1485
  });
1237
1486
  throw new Error('Failed to validate blobs');
1238
1487
  });
@@ -1243,8 +1492,7 @@ export class SequencerPublisher {
1243
1492
  header: encodedData.header.toViem(),
1244
1493
  archive: toHex(encodedData.archive),
1245
1494
  oracleInput: {
1246
- // We are currently not modifying these. See #9963
1247
- feeAssetPriceModifier: 0n
1495
+ feeAssetPriceModifier: encodedData.feeAssetPriceModifier
1248
1496
  }
1249
1497
  },
1250
1498
  encodedData.attestationsAndSigners.getPackedAttestations(),
@@ -1293,6 +1541,7 @@ export class SequencerPublisher {
1293
1541
  balance: 10n * WEI_CONST * WEI_CONST
1294
1542
  });
1295
1543
  }
1544
+ const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1296
1545
  const simulationResult = await this.l1TxUtils.simulate({
1297
1546
  to: this.rollupContract.address,
1298
1547
  data: rollupData,
@@ -1320,6 +1569,26 @@ export class SequencerPublisher {
1320
1569
  };
1321
1570
  }
1322
1571
  this.log.error(`Failed to simulate propose tx`, viemError);
1572
+ this.backupFailedTx({
1573
+ id: keccak256(rollupData),
1574
+ failureType: 'simulation',
1575
+ request: {
1576
+ to: this.rollupContract.address,
1577
+ data: rollupData
1578
+ },
1579
+ l1BlockNumber: l1BlockNumber.toString(),
1580
+ error: {
1581
+ message: viemError.message,
1582
+ name: viemError.name
1583
+ },
1584
+ context: {
1585
+ actions: [
1586
+ 'propose'
1587
+ ],
1588
+ slot: Number(args[0].header.slotNumber),
1589
+ sender: this.getSenderAddress().toString()
1590
+ }
1591
+ });
1323
1592
  throw err;
1324
1593
  });
1325
1594
  return {
@@ -99,4 +99,4 @@ export declare class CheckpointProposalJob implements Traceable {
99
99
  private getSecondsIntoSlot;
100
100
  getPublisher(): SequencerPublisher;
101
101
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQUd6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFHTCxPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNELE9BQU8sRUFHTCxLQUFLLHVCQUF1QixFQUM1QixLQUFLLHNCQUFzQixFQUM1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUFtQyxNQUFNLHlCQUF5QixDQUFDO0FBSXBHLE9BQU8sRUFBaUIsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxFQUFjLEtBQUssU0FB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
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQVF6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFHTCxPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNELE9BQU8sRUFHTCxLQUFLLHVCQUF1QixFQUM1QixLQUFLLHNCQUFzQixFQUM1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUFtQyxNQUFNLHlCQUF5QixDQUFDO0FBSXBHLE9BQU8sRUFBaUIsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxFQUFjLEtBQUssU0FB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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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"}