@aztec/sequencer-client 0.0.1-commit.cd76b27 → 0.0.1-commit.ce4f8c4f2
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 -1
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +46 -23
- package/dest/config.d.ts +25 -5
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +31 -17
- 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 +294 -18
- package/dest/sequencer/checkpoint_proposal_job.d.ts +13 -7
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +206 -130
- 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 +18 -9
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +77 -62
- package/dest/sequencer/timetable.d.ts +4 -3
- package/dest/sequencer/timetable.d.ts.map +1 -1
- package/dest/sequencer/timetable.js +6 -7
- package/dest/sequencer/types.d.ts +2 -2
- package/dest/sequencer/types.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.d.ts +7 -9
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.js +39 -30
- package/package.json +27 -28
- package/src/client/sequencer-client.ts +56 -21
- package/src/config.ts +39 -19
- 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 +281 -26
- package/src/sequencer/checkpoint_proposal_job.ts +277 -142
- package/src/sequencer/events.ts +1 -1
- package/src/sequencer/metrics.ts +14 -0
- package/src/sequencer/sequencer.ts +105 -69
- package/src/sequencer/timetable.ts +7 -7
- package/src/sequencer/types.ts +1 -1
- package/src/test/mock_checkpoint_builder.ts +51 -48
|
@@ -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,12 @@ 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
|
+
// When pipelining, the checkpoint targets the next slot so its timestamp is in the future.
|
|
1023
|
+
// Without pipelining, the checkpoint targets the current slot so its timestamp is in the past
|
|
1024
|
+
// by the time we simulate (~24s of build time), causing eth_simulateV1 to reject it.
|
|
1025
|
+
// In that case, use the latest L1 block timestamp + one ethereum slot, which is just ahead
|
|
1026
|
+
// of L1 and still within the same L2 slot.
|
|
1027
|
+
const ts = this.epochCache.isProposerPipeliningEnabled() ? checkpoint.header.timestamp : (await this.l1TxUtils.getBlock()).timestamp + this.ethereumSlotDuration;
|
|
850
1028
|
const blobFields = checkpoint.toBlobFields();
|
|
851
1029
|
const blobs = await getBlobsPerL1Block(blobFields);
|
|
852
1030
|
const blobInput = getPrefixedEthBlobCommitments(blobs);
|
|
@@ -922,6 +1100,7 @@ export class SequencerPublisher {
|
|
|
922
1100
|
signer: this.l1TxUtils.client.account?.address,
|
|
923
1101
|
lastValidL2Slot: slotNumber
|
|
924
1102
|
});
|
|
1103
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
925
1104
|
try {
|
|
926
1105
|
await this.l1TxUtils.simulate(request, {
|
|
927
1106
|
time: timestamp
|
|
@@ -933,7 +1112,29 @@ export class SequencerPublisher {
|
|
|
933
1112
|
request
|
|
934
1113
|
});
|
|
935
1114
|
} catch (err) {
|
|
936
|
-
|
|
1115
|
+
const viemError = formatViemError(err);
|
|
1116
|
+
this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError);
|
|
1117
|
+
this.backupFailedTx({
|
|
1118
|
+
id: keccak256(request.data),
|
|
1119
|
+
failureType: 'simulation',
|
|
1120
|
+
request: {
|
|
1121
|
+
to: request.to,
|
|
1122
|
+
data: request.data,
|
|
1123
|
+
value: request.value?.toString()
|
|
1124
|
+
},
|
|
1125
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
1126
|
+
error: {
|
|
1127
|
+
message: viemError.message,
|
|
1128
|
+
name: viemError.name
|
|
1129
|
+
},
|
|
1130
|
+
context: {
|
|
1131
|
+
actions: [
|
|
1132
|
+
action
|
|
1133
|
+
],
|
|
1134
|
+
slot: slotNumber,
|
|
1135
|
+
sender: this.getSenderAddress().toString()
|
|
1136
|
+
}
|
|
1137
|
+
});
|
|
937
1138
|
// Yes, we enqueue the request anyway, in case there was a bug with the simulation itself
|
|
938
1139
|
}
|
|
939
1140
|
// TODO(palla/slash): All votes (governance and slashing) should txTimeoutAt at the end of the slot.
|
|
@@ -1155,6 +1356,7 @@ export class SequencerPublisher {
|
|
|
1155
1356
|
const cachedLastActionSlot = this.lastActions[action];
|
|
1156
1357
|
this.lastActions[action] = slotNumber;
|
|
1157
1358
|
this.log.debug(`Simulating ${action} for slot ${slotNumber}`, logData);
|
|
1359
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1158
1360
|
let gasUsed;
|
|
1159
1361
|
const simulateAbi = mergeAbis([
|
|
1160
1362
|
request.abi ?? [],
|
|
@@ -1172,6 +1374,27 @@ export class SequencerPublisher {
|
|
|
1172
1374
|
} catch (err) {
|
|
1173
1375
|
const viemError = formatViemError(err, simulateAbi);
|
|
1174
1376
|
this.log.error(`Simulation for ${action} at ${slotNumber} failed`, viemError, logData);
|
|
1377
|
+
this.backupFailedTx({
|
|
1378
|
+
id: keccak256(request.data),
|
|
1379
|
+
failureType: 'simulation',
|
|
1380
|
+
request: {
|
|
1381
|
+
to: request.to,
|
|
1382
|
+
data: request.data,
|
|
1383
|
+
value: request.value?.toString()
|
|
1384
|
+
},
|
|
1385
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
1386
|
+
error: {
|
|
1387
|
+
message: viemError.message,
|
|
1388
|
+
name: viemError.name
|
|
1389
|
+
},
|
|
1390
|
+
context: {
|
|
1391
|
+
actions: [
|
|
1392
|
+
action
|
|
1393
|
+
],
|
|
1394
|
+
slot: slotNumber,
|
|
1395
|
+
sender: this.getSenderAddress().toString()
|
|
1396
|
+
}
|
|
1397
|
+
});
|
|
1175
1398
|
return false;
|
|
1176
1399
|
}
|
|
1177
1400
|
// We issued the simulation against the rollup contract, so we need to account for the overhead of the multicall3
|
|
@@ -1250,10 +1473,38 @@ export class SequencerPublisher {
|
|
|
1250
1473
|
}, {}, {
|
|
1251
1474
|
blobs: encodedData.blobs.map((b)=>b.data),
|
|
1252
1475
|
kzg
|
|
1253
|
-
}).catch((err)=>{
|
|
1254
|
-
const
|
|
1255
|
-
this.log.error(`Failed to validate blobs`, message, {
|
|
1256
|
-
metaMessages
|
|
1476
|
+
}).catch(async (err)=>{
|
|
1477
|
+
const viemError = formatViemError(err);
|
|
1478
|
+
this.log.error(`Failed to validate blobs`, viemError.message, {
|
|
1479
|
+
metaMessages: viemError.metaMessages
|
|
1480
|
+
});
|
|
1481
|
+
const validateBlobsData = encodeFunctionData({
|
|
1482
|
+
abi: RollupAbi,
|
|
1483
|
+
functionName: 'validateBlobs',
|
|
1484
|
+
args: [
|
|
1485
|
+
blobInput
|
|
1486
|
+
]
|
|
1487
|
+
});
|
|
1488
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1489
|
+
this.backupFailedTx({
|
|
1490
|
+
id: keccak256(validateBlobsData),
|
|
1491
|
+
failureType: 'simulation',
|
|
1492
|
+
request: {
|
|
1493
|
+
to: this.rollupContract.address,
|
|
1494
|
+
data: validateBlobsData
|
|
1495
|
+
},
|
|
1496
|
+
blobData: encodedData.blobs.map((b)=>toHex(b.data)),
|
|
1497
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
1498
|
+
error: {
|
|
1499
|
+
message: viemError.message,
|
|
1500
|
+
name: viemError.name
|
|
1501
|
+
},
|
|
1502
|
+
context: {
|
|
1503
|
+
actions: [
|
|
1504
|
+
'validate-blobs'
|
|
1505
|
+
],
|
|
1506
|
+
sender: this.getSenderAddress().toString()
|
|
1507
|
+
}
|
|
1257
1508
|
});
|
|
1258
1509
|
throw new Error('Failed to validate blobs');
|
|
1259
1510
|
});
|
|
@@ -1313,6 +1564,7 @@ export class SequencerPublisher {
|
|
|
1313
1564
|
balance: 10n * WEI_CONST * WEI_CONST
|
|
1314
1565
|
});
|
|
1315
1566
|
}
|
|
1567
|
+
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1316
1568
|
const simulationResult = await this.l1TxUtils.simulate({
|
|
1317
1569
|
to: this.rollupContract.address,
|
|
1318
1570
|
data: rollupData,
|
|
@@ -1340,6 +1592,26 @@ export class SequencerPublisher {
|
|
|
1340
1592
|
};
|
|
1341
1593
|
}
|
|
1342
1594
|
this.log.error(`Failed to simulate propose tx`, viemError);
|
|
1595
|
+
this.backupFailedTx({
|
|
1596
|
+
id: keccak256(rollupData),
|
|
1597
|
+
failureType: 'simulation',
|
|
1598
|
+
request: {
|
|
1599
|
+
to: this.rollupContract.address,
|
|
1600
|
+
data: rollupData
|
|
1601
|
+
},
|
|
1602
|
+
l1BlockNumber: l1BlockNumber.toString(),
|
|
1603
|
+
error: {
|
|
1604
|
+
message: viemError.message,
|
|
1605
|
+
name: viemError.name
|
|
1606
|
+
},
|
|
1607
|
+
context: {
|
|
1608
|
+
actions: [
|
|
1609
|
+
'propose'
|
|
1610
|
+
],
|
|
1611
|
+
slot: Number(args[0].header.slotNumber),
|
|
1612
|
+
sender: this.getSenderAddress().toString()
|
|
1613
|
+
}
|
|
1614
|
+
});
|
|
1343
1615
|
throw err;
|
|
1344
1616
|
});
|
|
1345
1617
|
return {
|
|
@@ -1416,4 +1688,8 @@ export class SequencerPublisher {
|
|
|
1416
1688
|
}
|
|
1417
1689
|
});
|
|
1418
1690
|
}
|
|
1691
|
+
/** Returns the timestamp to use when simulating L1 proposal calls */ getNextL1SlotTimestamp() {
|
|
1692
|
+
const l1Constants = this.epochCache.getL1Constants();
|
|
1693
|
+
return getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), l1Constants);
|
|
1694
|
+
}
|
|
1419
1695
|
}
|
|
@@ -7,7 +7,7 @@ import { type TypedEventEmitter } from '@aztec/foundation/types';
|
|
|
7
7
|
import type { P2P } from '@aztec/p2p';
|
|
8
8
|
import type { SlasherClientInterface } from '@aztec/slasher';
|
|
9
9
|
import { L2Block, type L2BlockSink, type L2BlockSource } from '@aztec/stdlib/block';
|
|
10
|
-
import type
|
|
10
|
+
import { type Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
11
11
|
import { type ResolvedSequencerConfig, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
12
12
|
import { type L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
13
13
|
import { Tx } from '@aztec/stdlib/tx';
|
|
@@ -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: {
|
|
@@ -71,11 +79,9 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
71
79
|
indexWithinCheckpoint: IndexWithinCheckpoint;
|
|
72
80
|
buildDeadline: Date | undefined;
|
|
73
81
|
txHashesAlreadyIncluded: Set<string>;
|
|
74
|
-
remainingBlobFields: number;
|
|
75
82
|
}): Promise<{
|
|
76
83
|
block: L2Block;
|
|
77
84
|
usedTxs: Tx[];
|
|
78
|
-
remainingBlobFields: number;
|
|
79
85
|
} | {
|
|
80
86
|
error: Error;
|
|
81
87
|
} | undefined>;
|
|
@@ -99,4 +105,4 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
99
105
|
private getSecondsIntoSlot;
|
|
100
106
|
getPublisher(): SequencerPublisher;
|
|
101
107
|
}
|
|
102
|
-
//# 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":"
|
|
1
|
+
{"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}
|