@aztec/sequencer-client 0.0.1-commit.381b1a9 → 0.0.1-commit.3a4ae741b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/client/sequencer-client.d.ts +4 -12
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +27 -76
- package/dest/config.d.ts +4 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +8 -1
- package/dest/global_variable_builder/global_builder.d.ts +13 -7
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +22 -21
- package/dest/global_variable_builder/index.d.ts +2 -2
- package/dest/global_variable_builder/index.d.ts.map +1 -1
- package/dest/publisher/config.d.ts +17 -1
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +23 -3
- package/dest/publisher/index.d.ts +2 -1
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/l1_tx_failed_store/factory.d.ts +11 -0
- package/dest/publisher/l1_tx_failed_store/factory.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/factory.js +22 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +59 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +1 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +15 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +34 -0
- package/dest/publisher/l1_tx_failed_store/index.d.ts +4 -0
- package/dest/publisher/l1_tx_failed_store/index.d.ts.map +1 -0
- package/dest/publisher/l1_tx_failed_store/index.js +2 -0
- package/dest/publisher/sequencer-publisher-factory.d.ts +3 -3
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.js +16 -2
- package/dest/publisher/sequencer-publisher.d.ts +19 -4
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +291 -18
- package/dest/sequencer/checkpoint_proposal_job.d.ts +12 -4
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +141 -87
- package/dest/sequencer/events.d.ts +2 -1
- package/dest/sequencer/events.d.ts.map +1 -1
- package/dest/sequencer/metrics.d.ts +5 -1
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +11 -0
- package/dest/sequencer/sequencer.d.ts +6 -4
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +60 -48
- package/dest/test/mock_checkpoint_builder.d.ts +4 -8
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.js +0 -2
- package/package.json +27 -28
- package/src/client/sequencer-client.ts +37 -101
- package/src/config.ts +11 -0
- package/src/global_variable_builder/global_builder.ts +22 -23
- package/src/global_variable_builder/index.ts +1 -1
- package/src/publisher/config.ts +41 -0
- package/src/publisher/index.ts +3 -0
- package/src/publisher/l1_tx_failed_store/factory.ts +32 -0
- package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +55 -0
- package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +46 -0
- package/src/publisher/l1_tx_failed_store/index.ts +3 -0
- package/src/publisher/sequencer-publisher-factory.ts +18 -3
- package/src/publisher/sequencer-publisher.ts +276 -26
- package/src/sequencer/checkpoint_proposal_job.ts +178 -90
- package/src/sequencer/events.ts +1 -1
- package/src/sequencer/metrics.ts +14 -0
- package/src/sequencer/sequencer.ts +85 -54
- package/src/test/mock_checkpoint_builder.ts +3 -5
|
@@ -379,7 +379,9 @@ 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';
|
|
384
|
+
import { TimeoutError } from '@aztec/foundation/error';
|
|
383
385
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
384
386
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
385
387
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -389,8 +391,10 @@ import { Timer } from '@aztec/foundation/timer';
|
|
|
389
391
|
import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
390
392
|
import { encodeSlashConsensusVotes } from '@aztec/slasher';
|
|
391
393
|
import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
394
|
+
import { getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
392
395
|
import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
393
|
-
import { encodeFunctionData, toHex } from 'viem';
|
|
396
|
+
import { encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
|
|
397
|
+
import { createL1TxFailedStore } from './l1_tx_failed_store/index.js';
|
|
394
398
|
import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
395
399
|
export const Actions = [
|
|
396
400
|
'invalidate-by-invalid-attestation',
|
|
@@ -430,6 +434,7 @@ export class SequencerPublisher {
|
|
|
430
434
|
interrupted;
|
|
431
435
|
metrics;
|
|
432
436
|
epochCache;
|
|
437
|
+
failedTxStore;
|
|
433
438
|
governanceLog;
|
|
434
439
|
slashingLog;
|
|
435
440
|
lastActions;
|
|
@@ -437,8 +442,11 @@ export class SequencerPublisher {
|
|
|
437
442
|
payloadProposedCache;
|
|
438
443
|
log;
|
|
439
444
|
ethereumSlotDuration;
|
|
445
|
+
aztecSlotDuration;
|
|
446
|
+
dateProvider;
|
|
440
447
|
blobClient;
|
|
441
448
|
/** Address to use for simulations in fisherman mode (actual proposer's address) */ proposerAddressForSimulation;
|
|
449
|
+
/** Optional callback to obtain a replacement publisher when the current one fails to send. */ getNextPublisher;
|
|
442
450
|
/** L1 fee analyzer for fisherman mode */ l1FeeAnalyzer;
|
|
443
451
|
/** Fee asset price oracle for computing price modifiers from Uniswap V4 */ feeAssetPriceOracle;
|
|
444
452
|
// A CALL to a cold address is 2700 gas
|
|
@@ -463,6 +471,8 @@ export class SequencerPublisher {
|
|
|
463
471
|
this.requests = [];
|
|
464
472
|
this.log = deps.log ?? createLogger('sequencer:publisher');
|
|
465
473
|
this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
|
|
474
|
+
this.aztecSlotDuration = BigInt(config.aztecSlotDuration);
|
|
475
|
+
this.dateProvider = deps.dateProvider;
|
|
466
476
|
this.epochCache = deps.epochCache;
|
|
467
477
|
this.lastActions = deps.lastActions;
|
|
468
478
|
this.blobClient = deps.blobClient;
|
|
@@ -470,6 +480,7 @@ export class SequencerPublisher {
|
|
|
470
480
|
this.metrics = deps.metrics ?? new SequencerPublisherMetrics(telemetry, 'SequencerPublisher');
|
|
471
481
|
this.tracer = telemetry.getTracer('SequencerPublisher');
|
|
472
482
|
this.l1TxUtils = deps.l1TxUtils;
|
|
483
|
+
this.getNextPublisher = deps.getNextPublisher;
|
|
473
484
|
this.rollupContract = deps.rollupContract;
|
|
474
485
|
this.govProposerContract = deps.governanceProposerContract;
|
|
475
486
|
this.slashingProposerContract = deps.slashingProposerContract;
|
|
@@ -485,6 +496,24 @@ export class SequencerPublisher {
|
|
|
485
496
|
}
|
|
486
497
|
// Initialize fee asset price oracle
|
|
487
498
|
this.feeAssetPriceOracle = new FeeAssetPriceOracle(this.l1TxUtils.client, this.rollupContract, createLogger('sequencer:publisher:price-oracle'));
|
|
499
|
+
// Initialize failed L1 tx store (optional, for test networks)
|
|
500
|
+
this.failedTxStore = createL1TxFailedStore(config.l1TxFailedStore, this.log);
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Backs up a failed L1 transaction to the configured store for debugging.
|
|
504
|
+
* Does nothing if no store is configured.
|
|
505
|
+
*/ backupFailedTx(failedTx) {
|
|
506
|
+
if (!this.failedTxStore) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
const tx = {
|
|
510
|
+
...failedTx,
|
|
511
|
+
timestamp: Date.now()
|
|
512
|
+
};
|
|
513
|
+
// Fire and forget - don't block on backup
|
|
514
|
+
void this.failedTxStore.then((store)=>store?.saveFailedTx(tx)).catch((err)=>{
|
|
515
|
+
this.log.warn(`Failed to backup failed L1 tx to store`, err);
|
|
516
|
+
});
|
|
488
517
|
}
|
|
489
518
|
getRollupContract() {
|
|
490
519
|
return this.rollupContract;
|
|
@@ -513,7 +542,7 @@ export class SequencerPublisher {
|
|
|
513
542
|
this.requests.push(request);
|
|
514
543
|
}
|
|
515
544
|
getCurrentL2Slot() {
|
|
516
|
-
return this.epochCache.
|
|
545
|
+
return this.epochCache.getSlotNow();
|
|
517
546
|
}
|
|
518
547
|
/**
|
|
519
548
|
* Clears all pending requests without sending them.
|
|
@@ -602,8 +631,8 @@ export class SequencerPublisher {
|
|
|
602
631
|
// @note - we can only have one blob config per bundle
|
|
603
632
|
// find requests with gas and blob configs
|
|
604
633
|
// See https://github.com/AztecProtocol/aztec-packages/issues/11513
|
|
605
|
-
const gasConfigs =
|
|
606
|
-
const blobConfigs =
|
|
634
|
+
const gasConfigs = validRequests.filter((request)=>request.gasConfig).map((request)=>request.gasConfig);
|
|
635
|
+
const blobConfigs = validRequests.filter((request)=>request.blobConfig).map((request)=>request.blobConfig);
|
|
607
636
|
if (blobConfigs.length > 1) {
|
|
608
637
|
throw new Error('Multiple blob configs found');
|
|
609
638
|
}
|
|
@@ -630,12 +659,34 @@ export class SequencerPublisher {
|
|
|
630
659
|
// This ensures the committee gets precomputed correctly
|
|
631
660
|
validRequests.sort((a, b)=>compareActions(a.action, b.action));
|
|
632
661
|
try {
|
|
662
|
+
// Capture context for failed tx backup before sending
|
|
663
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
664
|
+
const multicallData = encodeFunctionData({
|
|
665
|
+
abi: multicall3Abi,
|
|
666
|
+
functionName: 'aggregate3',
|
|
667
|
+
args: [
|
|
668
|
+
validRequests.map((r)=>({
|
|
669
|
+
target: r.request.to,
|
|
670
|
+
callData: r.request.data,
|
|
671
|
+
allowFailure: true
|
|
672
|
+
}))
|
|
673
|
+
]
|
|
674
|
+
});
|
|
675
|
+
const blobDataHex = blobConfig?.blobs?.map((b)=>toHex(b));
|
|
676
|
+
const txContext = {
|
|
677
|
+
multicallData,
|
|
678
|
+
blobData: blobDataHex,
|
|
679
|
+
l1BlockNumber
|
|
680
|
+
};
|
|
633
681
|
this.log.debug('Forwarding transactions', {
|
|
634
682
|
validRequests: validRequests.map((request)=>request.action),
|
|
635
683
|
txConfig
|
|
636
684
|
});
|
|
637
|
-
const result = await
|
|
638
|
-
|
|
685
|
+
const result = await this.forwardWithPublisherRotation(validRequests, txConfig, blobConfig);
|
|
686
|
+
if (result === undefined) {
|
|
687
|
+
return undefined;
|
|
688
|
+
}
|
|
689
|
+
const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result, txContext);
|
|
639
690
|
return {
|
|
640
691
|
result,
|
|
641
692
|
expiredActions,
|
|
@@ -655,17 +706,83 @@ export class SequencerPublisher {
|
|
|
655
706
|
}
|
|
656
707
|
}
|
|
657
708
|
}
|
|
658
|
-
|
|
709
|
+
/**
|
|
710
|
+
* Forwards transactions via Multicall3, rotating to the next available publisher if a send
|
|
711
|
+
* failure occurs (i.e. the tx never reached the chain).
|
|
712
|
+
* On-chain reverts and simulation errors are returned as-is without rotation.
|
|
713
|
+
*/ async forwardWithPublisherRotation(validRequests, txConfig, blobConfig) {
|
|
714
|
+
const triedAddresses = [];
|
|
715
|
+
let currentPublisher = this.l1TxUtils;
|
|
716
|
+
while(true){
|
|
717
|
+
triedAddresses.push(currentPublisher.getSenderAddress());
|
|
718
|
+
try {
|
|
719
|
+
const result = await Multicall3.forward(validRequests.map((r)=>r.request), currentPublisher, txConfig, blobConfig, this.rollupContract.address, this.log);
|
|
720
|
+
this.l1TxUtils = currentPublisher;
|
|
721
|
+
return result;
|
|
722
|
+
} catch (err) {
|
|
723
|
+
if (err instanceof TimeoutError) {
|
|
724
|
+
throw err;
|
|
725
|
+
}
|
|
726
|
+
const viemError = formatViemError(err);
|
|
727
|
+
if (!this.getNextPublisher) {
|
|
728
|
+
this.log.error('Failed to publish bundled transactions', viemError);
|
|
729
|
+
return undefined;
|
|
730
|
+
}
|
|
731
|
+
this.log.warn(`Publisher ${currentPublisher.getSenderAddress()} failed to send, rotating to next publisher`, viemError);
|
|
732
|
+
const nextPublisher = await this.getNextPublisher([
|
|
733
|
+
...triedAddresses
|
|
734
|
+
]);
|
|
735
|
+
if (!nextPublisher) {
|
|
736
|
+
this.log.error('All available publishers exhausted, failed to publish bundled transactions');
|
|
737
|
+
return undefined;
|
|
738
|
+
}
|
|
739
|
+
currentPublisher = nextPublisher;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
callbackBundledTransactions(requests, result, txContext) {
|
|
659
744
|
const actionsListStr = requests.map((r)=>r.action).join(', ');
|
|
660
745
|
if (result instanceof FormattedViemError) {
|
|
661
746
|
this.log.error(`Failed to publish bundled transactions (${actionsListStr})`, result);
|
|
747
|
+
this.backupFailedTx({
|
|
748
|
+
id: keccak256(txContext.multicallData),
|
|
749
|
+
failureType: 'send-error',
|
|
750
|
+
request: {
|
|
751
|
+
to: MULTI_CALL_3_ADDRESS,
|
|
752
|
+
data: txContext.multicallData
|
|
753
|
+
},
|
|
754
|
+
blobData: txContext.blobData,
|
|
755
|
+
l1BlockNumber: txContext.l1BlockNumber.toString(),
|
|
756
|
+
error: {
|
|
757
|
+
message: result.message,
|
|
758
|
+
name: result.name
|
|
759
|
+
},
|
|
760
|
+
context: {
|
|
761
|
+
actions: requests.map((r)=>r.action),
|
|
762
|
+
requests: requests.map((r)=>({
|
|
763
|
+
action: r.action,
|
|
764
|
+
to: r.request.to,
|
|
765
|
+
data: r.request.data
|
|
766
|
+
})),
|
|
767
|
+
sender: this.getSenderAddress().toString()
|
|
768
|
+
}
|
|
769
|
+
});
|
|
662
770
|
return {
|
|
663
771
|
failedActions: requests.map((r)=>r.action)
|
|
664
772
|
};
|
|
665
773
|
} else {
|
|
666
774
|
this.log.verbose(`Published bundled transactions (${actionsListStr})`, {
|
|
667
775
|
result,
|
|
668
|
-
requests
|
|
776
|
+
requests: requests.map((r)=>({
|
|
777
|
+
...r,
|
|
778
|
+
// Avoid logging large blob data
|
|
779
|
+
blobConfig: r.blobConfig ? {
|
|
780
|
+
...r.blobConfig,
|
|
781
|
+
blobs: r.blobConfig.blobs.map((b)=>({
|
|
782
|
+
size: trimmedBytesLength(b)
|
|
783
|
+
}))
|
|
784
|
+
} : undefined
|
|
785
|
+
}))
|
|
669
786
|
});
|
|
670
787
|
const successfulActions = [];
|
|
671
788
|
const failedActions = [];
|
|
@@ -676,6 +793,37 @@ export class SequencerPublisher {
|
|
|
676
793
|
failedActions.push(request.action);
|
|
677
794
|
}
|
|
678
795
|
}
|
|
796
|
+
// Single backup for the whole reverted tx
|
|
797
|
+
if (failedActions.length > 0 && result?.receipt?.status === 'reverted') {
|
|
798
|
+
this.backupFailedTx({
|
|
799
|
+
id: result.receipt.transactionHash,
|
|
800
|
+
failureType: 'revert',
|
|
801
|
+
request: {
|
|
802
|
+
to: MULTI_CALL_3_ADDRESS,
|
|
803
|
+
data: txContext.multicallData
|
|
804
|
+
},
|
|
805
|
+
blobData: txContext.blobData,
|
|
806
|
+
l1BlockNumber: result.receipt.blockNumber.toString(),
|
|
807
|
+
receipt: {
|
|
808
|
+
transactionHash: result.receipt.transactionHash,
|
|
809
|
+
blockNumber: result.receipt.blockNumber.toString(),
|
|
810
|
+
gasUsed: (result.receipt.gasUsed ?? 0n).toString(),
|
|
811
|
+
status: 'reverted'
|
|
812
|
+
},
|
|
813
|
+
error: {
|
|
814
|
+
message: result.errorMsg ?? 'Transaction reverted'
|
|
815
|
+
},
|
|
816
|
+
context: {
|
|
817
|
+
actions: failedActions,
|
|
818
|
+
requests: requests.filter((r)=>failedActions.includes(r.action)).map((r)=>({
|
|
819
|
+
action: r.action,
|
|
820
|
+
to: r.request.to,
|
|
821
|
+
data: r.request.data
|
|
822
|
+
})),
|
|
823
|
+
sender: this.getSenderAddress().toString()
|
|
824
|
+
}
|
|
825
|
+
});
|
|
826
|
+
}
|
|
679
827
|
return {
|
|
680
828
|
successfulActions,
|
|
681
829
|
failedActions
|
|
@@ -683,17 +831,20 @@ export class SequencerPublisher {
|
|
|
683
831
|
}
|
|
684
832
|
}
|
|
685
833
|
/**
|
|
686
|
-
* @notice Will call `
|
|
834
|
+
* @notice Will call `canProposeAt` to make sure that it is possible to propose
|
|
687
835
|
* @param tipArchive - The archive to check
|
|
688
836
|
* @returns The slot and block number if it is possible to propose, undefined otherwise
|
|
689
|
-
*/
|
|
837
|
+
*/ canProposeAt(tipArchive, msgSender, opts = {}) {
|
|
690
838
|
// TODO: #14291 - should loop through multiple keys to check if any of them can propose
|
|
691
839
|
const ignoredErrors = [
|
|
692
840
|
'SlotAlreadyInChain',
|
|
693
841
|
'InvalidProposer',
|
|
694
842
|
'InvalidArchive'
|
|
695
843
|
];
|
|
696
|
-
|
|
844
|
+
const pipelined = opts.pipelined ?? this.epochCache.isProposerPipeliningEnabled();
|
|
845
|
+
const slotOffset = pipelined ? this.aztecSlotDuration : 0n;
|
|
846
|
+
const nextL1SlotTs = this.getNextL1SlotTimestamp() + slotOffset;
|
|
847
|
+
return this.rollupContract.canProposeAt(tipArchive.toBuffer(), msgSender.toString(), nextL1SlotTs, {
|
|
697
848
|
forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber
|
|
698
849
|
}).catch((err)=>{
|
|
699
850
|
if (err instanceof FormattedViemError && ignoredErrors.find((e)=>err.message.includes(e))) {
|
|
@@ -725,7 +876,7 @@ export class SequencerPublisher {
|
|
|
725
876
|
header.blobsHash.toString(),
|
|
726
877
|
flags
|
|
727
878
|
];
|
|
728
|
-
const ts =
|
|
879
|
+
const ts = this.getNextL1SlotTimestamp();
|
|
729
880
|
const stateOverrides = await this.rollupContract.makePendingCheckpointNumberOverride(opts?.forcePendingCheckpointNumber);
|
|
730
881
|
let balance = 0n;
|
|
731
882
|
if (this.config.fishermanMode) {
|
|
@@ -778,6 +929,7 @@ export class SequencerPublisher {
|
|
|
778
929
|
...logData,
|
|
779
930
|
request
|
|
780
931
|
});
|
|
932
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
781
933
|
try {
|
|
782
934
|
const { gasUsed } = await this.l1TxUtils.simulate(request, undefined, undefined, mergeAbis([
|
|
783
935
|
request.abi ?? [],
|
|
@@ -820,6 +972,27 @@ export class SequencerPublisher {
|
|
|
820
972
|
}
|
|
821
973
|
// Otherwise, throw. We cannot build the next checkpoint if we cannot invalidate the previous one.
|
|
822
974
|
this.log.error(`Simulation for invalidate checkpoint ${checkpointNumber} failed`, viemError, logData);
|
|
975
|
+
this.backupFailedTx({
|
|
976
|
+
id: keccak256(request.data),
|
|
977
|
+
failureType: 'simulation',
|
|
978
|
+
request: {
|
|
979
|
+
to: request.to,
|
|
980
|
+
data: request.data,
|
|
981
|
+
value: request.value?.toString()
|
|
982
|
+
},
|
|
983
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
984
|
+
error: {
|
|
985
|
+
message: viemError.message,
|
|
986
|
+
name: viemError.name
|
|
987
|
+
},
|
|
988
|
+
context: {
|
|
989
|
+
actions: [
|
|
990
|
+
`invalidate-${reason}`
|
|
991
|
+
],
|
|
992
|
+
checkpointNumber,
|
|
993
|
+
sender: this.getSenderAddress().toString()
|
|
994
|
+
}
|
|
995
|
+
});
|
|
823
996
|
throw new Error(`Failed to simulate invalidate checkpoint ${checkpointNumber}`, {
|
|
824
997
|
cause: viemError
|
|
825
998
|
});
|
|
@@ -846,7 +1019,9 @@ export class SequencerPublisher {
|
|
|
846
1019
|
}
|
|
847
1020
|
}
|
|
848
1021
|
/** Simulates `propose` to make sure that the checkpoint is valid for submission */ async validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, options) {
|
|
849
|
-
|
|
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;
|
|
850
1025
|
const blobFields = checkpoint.toBlobFields();
|
|
851
1026
|
const blobs = await getBlobsPerL1Block(blobFields);
|
|
852
1027
|
const blobInput = getPrefixedEthBlobCommitments(blobs);
|
|
@@ -922,6 +1097,7 @@ export class SequencerPublisher {
|
|
|
922
1097
|
signer: this.l1TxUtils.client.account?.address,
|
|
923
1098
|
lastValidL2Slot: slotNumber
|
|
924
1099
|
});
|
|
1100
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
925
1101
|
try {
|
|
926
1102
|
await this.l1TxUtils.simulate(request, {
|
|
927
1103
|
time: timestamp
|
|
@@ -933,7 +1109,29 @@ export class SequencerPublisher {
|
|
|
933
1109
|
request
|
|
934
1110
|
});
|
|
935
1111
|
} catch (err) {
|
|
936
|
-
|
|
1112
|
+
const viemError = formatViemError(err);
|
|
1113
|
+
this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError);
|
|
1114
|
+
this.backupFailedTx({
|
|
1115
|
+
id: keccak256(request.data),
|
|
1116
|
+
failureType: 'simulation',
|
|
1117
|
+
request: {
|
|
1118
|
+
to: request.to,
|
|
1119
|
+
data: request.data,
|
|
1120
|
+
value: request.value?.toString()
|
|
1121
|
+
},
|
|
1122
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
1123
|
+
error: {
|
|
1124
|
+
message: viemError.message,
|
|
1125
|
+
name: viemError.name
|
|
1126
|
+
},
|
|
1127
|
+
context: {
|
|
1128
|
+
actions: [
|
|
1129
|
+
action
|
|
1130
|
+
],
|
|
1131
|
+
slot: slotNumber,
|
|
1132
|
+
sender: this.getSenderAddress().toString()
|
|
1133
|
+
}
|
|
1134
|
+
});
|
|
937
1135
|
// Yes, we enqueue the request anyway, in case there was a bug with the simulation itself
|
|
938
1136
|
}
|
|
939
1137
|
// TODO(palla/slash): All votes (governance and slashing) should txTimeoutAt at the end of the slot.
|
|
@@ -1155,6 +1353,7 @@ export class SequencerPublisher {
|
|
|
1155
1353
|
const cachedLastActionSlot = this.lastActions[action];
|
|
1156
1354
|
this.lastActions[action] = slotNumber;
|
|
1157
1355
|
this.log.debug(`Simulating ${action} for slot ${slotNumber}`, logData);
|
|
1356
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1158
1357
|
let gasUsed;
|
|
1159
1358
|
const simulateAbi = mergeAbis([
|
|
1160
1359
|
request.abi ?? [],
|
|
@@ -1172,6 +1371,27 @@ export class SequencerPublisher {
|
|
|
1172
1371
|
} catch (err) {
|
|
1173
1372
|
const viemError = formatViemError(err, simulateAbi);
|
|
1174
1373
|
this.log.error(`Simulation for ${action} at ${slotNumber} failed`, viemError, logData);
|
|
1374
|
+
this.backupFailedTx({
|
|
1375
|
+
id: keccak256(request.data),
|
|
1376
|
+
failureType: 'simulation',
|
|
1377
|
+
request: {
|
|
1378
|
+
to: request.to,
|
|
1379
|
+
data: request.data,
|
|
1380
|
+
value: request.value?.toString()
|
|
1381
|
+
},
|
|
1382
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
1383
|
+
error: {
|
|
1384
|
+
message: viemError.message,
|
|
1385
|
+
name: viemError.name
|
|
1386
|
+
},
|
|
1387
|
+
context: {
|
|
1388
|
+
actions: [
|
|
1389
|
+
action
|
|
1390
|
+
],
|
|
1391
|
+
slot: slotNumber,
|
|
1392
|
+
sender: this.getSenderAddress().toString()
|
|
1393
|
+
}
|
|
1394
|
+
});
|
|
1175
1395
|
return false;
|
|
1176
1396
|
}
|
|
1177
1397
|
// We issued the simulation against the rollup contract, so we need to account for the overhead of the multicall3
|
|
@@ -1250,10 +1470,38 @@ export class SequencerPublisher {
|
|
|
1250
1470
|
}, {}, {
|
|
1251
1471
|
blobs: encodedData.blobs.map((b)=>b.data),
|
|
1252
1472
|
kzg
|
|
1253
|
-
}).catch((err)=>{
|
|
1254
|
-
const
|
|
1255
|
-
this.log.error(`Failed to validate blobs`, message, {
|
|
1256
|
-
metaMessages
|
|
1473
|
+
}).catch(async (err)=>{
|
|
1474
|
+
const viemError = formatViemError(err);
|
|
1475
|
+
this.log.error(`Failed to validate blobs`, viemError.message, {
|
|
1476
|
+
metaMessages: viemError.metaMessages
|
|
1477
|
+
});
|
|
1478
|
+
const validateBlobsData = encodeFunctionData({
|
|
1479
|
+
abi: RollupAbi,
|
|
1480
|
+
functionName: 'validateBlobs',
|
|
1481
|
+
args: [
|
|
1482
|
+
blobInput
|
|
1483
|
+
]
|
|
1484
|
+
});
|
|
1485
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1486
|
+
this.backupFailedTx({
|
|
1487
|
+
id: keccak256(validateBlobsData),
|
|
1488
|
+
failureType: 'simulation',
|
|
1489
|
+
request: {
|
|
1490
|
+
to: this.rollupContract.address,
|
|
1491
|
+
data: validateBlobsData
|
|
1492
|
+
},
|
|
1493
|
+
blobData: encodedData.blobs.map((b)=>toHex(b.data)),
|
|
1494
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
1495
|
+
error: {
|
|
1496
|
+
message: viemError.message,
|
|
1497
|
+
name: viemError.name
|
|
1498
|
+
},
|
|
1499
|
+
context: {
|
|
1500
|
+
actions: [
|
|
1501
|
+
'validate-blobs'
|
|
1502
|
+
],
|
|
1503
|
+
sender: this.getSenderAddress().toString()
|
|
1504
|
+
}
|
|
1257
1505
|
});
|
|
1258
1506
|
throw new Error('Failed to validate blobs');
|
|
1259
1507
|
});
|
|
@@ -1313,6 +1561,7 @@ export class SequencerPublisher {
|
|
|
1313
1561
|
balance: 10n * WEI_CONST * WEI_CONST
|
|
1314
1562
|
});
|
|
1315
1563
|
}
|
|
1564
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1316
1565
|
const simulationResult = await this.l1TxUtils.simulate({
|
|
1317
1566
|
to: this.rollupContract.address,
|
|
1318
1567
|
data: rollupData,
|
|
@@ -1340,6 +1589,26 @@ export class SequencerPublisher {
|
|
|
1340
1589
|
};
|
|
1341
1590
|
}
|
|
1342
1591
|
this.log.error(`Failed to simulate propose tx`, viemError);
|
|
1592
|
+
this.backupFailedTx({
|
|
1593
|
+
id: keccak256(rollupData),
|
|
1594
|
+
failureType: 'simulation',
|
|
1595
|
+
request: {
|
|
1596
|
+
to: this.rollupContract.address,
|
|
1597
|
+
data: rollupData
|
|
1598
|
+
},
|
|
1599
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
1600
|
+
error: {
|
|
1601
|
+
message: viemError.message,
|
|
1602
|
+
name: viemError.name
|
|
1603
|
+
},
|
|
1604
|
+
context: {
|
|
1605
|
+
actions: [
|
|
1606
|
+
'propose'
|
|
1607
|
+
],
|
|
1608
|
+
slot: Number(args[0].header.slotNumber),
|
|
1609
|
+
sender: this.getSenderAddress().toString()
|
|
1610
|
+
}
|
|
1611
|
+
});
|
|
1343
1612
|
throw err;
|
|
1344
1613
|
});
|
|
1345
1614
|
return {
|
|
@@ -1416,4 +1685,8 @@ export class SequencerPublisher {
|
|
|
1416
1685
|
}
|
|
1417
1686
|
});
|
|
1418
1687
|
}
|
|
1688
|
+
/** Returns the timestamp to use when simulating L1 proposal calls */ getNextL1SlotTimestamp() {
|
|
1689
|
+
const l1Constants = this.epochCache.getL1Constants();
|
|
1690
|
+
return getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), l1Constants);
|
|
1691
|
+
}
|
|
1419
1692
|
}
|
|
@@ -27,8 +27,10 @@ import { SequencerState } from './utils.js';
|
|
|
27
27
|
* the Sequencer once the check for being the proposer for the slot has succeeded.
|
|
28
28
|
*/
|
|
29
29
|
export declare class CheckpointProposalJob implements Traceable {
|
|
30
|
-
private readonly
|
|
31
|
-
private readonly
|
|
30
|
+
private readonly slotNow;
|
|
31
|
+
private readonly targetSlot;
|
|
32
|
+
private readonly epochNow;
|
|
33
|
+
private readonly targetEpoch;
|
|
32
34
|
private readonly checkpointNumber;
|
|
33
35
|
private readonly syncedToBlockNumber;
|
|
34
36
|
private readonly proposer;
|
|
@@ -54,7 +56,11 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
54
56
|
private readonly setStateFn;
|
|
55
57
|
readonly tracer: Tracer;
|
|
56
58
|
protected readonly log: Logger;
|
|
57
|
-
constructor(
|
|
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();
|
|
58
64
|
/**
|
|
59
65
|
* Executes the checkpoint proposal job.
|
|
60
66
|
* Returns the published checkpoint if successful, undefined otherwise.
|
|
@@ -62,6 +68,8 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
62
68
|
execute(): Promise<Checkpoint | undefined>;
|
|
63
69
|
private proposeCheckpoint;
|
|
64
70
|
private buildBlocksForCheckpoint;
|
|
71
|
+
/** Creates a block proposal for a given block via the validator client (unless in fisherman mode) */
|
|
72
|
+
private createBlockProposal;
|
|
65
73
|
private waitUntilNextSubslot;
|
|
66
74
|
/** Builds a single block. Called from the main block building loop. */
|
|
67
75
|
protected buildSingleBlock(checkpointBuilder: CheckpointBuilder, opts: {
|
|
@@ -97,4 +105,4 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
97
105
|
private getSecondsIntoSlot;
|
|
98
106
|
getPublisher(): SequencerPublisher;
|
|
99
107
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQVF6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFHTCxPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUcvRSxPQUFPLEVBR0wsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxzQkFBc0IsRUFDNUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztBQVNwRyxPQUFPLEVBQWlCLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE9BQU8sRUFBYyxLQUFLLFNB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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;
|
|
1
|
+
{"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}
|