@aztec/sequencer-client 0.0.1-commit.9ef841308 → 0.0.1-commit.a89ec08
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 +3 -2
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +7 -8
- package/dest/config.d.ts +3 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +1 -2
- package/dest/publisher/config.d.ts +1 -17
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +3 -23
- package/dest/publisher/index.d.ts +1 -2
- package/dest/publisher/index.d.ts.map +1 -1
- 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 +2 -16
- package/dest/publisher/sequencer-publisher.d.ts +2 -12
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +11 -260
- package/dest/sequencer/checkpoint_proposal_job.d.ts +4 -10
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +75 -117
- package/dest/sequencer/events.d.ts +1 -2
- package/dest/sequencer/events.d.ts.map +1 -1
- package/dest/sequencer/metrics.d.ts +1 -5
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +0 -11
- package/dest/sequencer/sequencer.d.ts +5 -4
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +49 -58
- package/dest/test/mock_checkpoint_builder.d.ts +1 -1
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.js +2 -0
- package/package.json +28 -27
- package/src/client/sequencer-client.ts +12 -8
- package/src/config.ts +0 -4
- package/src/publisher/config.ts +0 -41
- package/src/publisher/index.ts +0 -3
- package/src/publisher/sequencer-publisher-factory.ts +3 -18
- package/src/publisher/sequencer-publisher.ts +16 -237
- package/src/sequencer/checkpoint_proposal_job.ts +66 -139
- package/src/sequencer/events.ts +1 -1
- package/src/sequencer/metrics.ts +0 -14
- package/src/sequencer/sequencer.ts +57 -83
- package/src/test/mock_checkpoint_builder.ts +2 -0
- package/dest/publisher/l1_tx_failed_store/factory.d.ts +0 -11
- package/dest/publisher/l1_tx_failed_store/factory.d.ts.map +0 -1
- package/dest/publisher/l1_tx_failed_store/factory.js +0 -22
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +0 -59
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +0 -1
- package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +0 -1
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +0 -15
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +0 -1
- package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +0 -34
- package/dest/publisher/l1_tx_failed_store/index.d.ts +0 -4
- package/dest/publisher/l1_tx_failed_store/index.d.ts.map +0 -1
- package/dest/publisher/l1_tx_failed_store/index.js +0 -2
- package/src/publisher/l1_tx_failed_store/factory.ts +0 -32
- package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +0 -55
- package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +0 -46
- package/src/publisher/l1_tx_failed_store/index.ts +0 -3
|
@@ -381,7 +381,6 @@ import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
|
|
|
381
381
|
import { CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
382
382
|
import { trimmedBytesLength } from '@aztec/foundation/buffer';
|
|
383
383
|
import { pick } from '@aztec/foundation/collection';
|
|
384
|
-
import { TimeoutError } from '@aztec/foundation/error';
|
|
385
384
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
386
385
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
387
386
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -393,8 +392,7 @@ import { encodeSlashConsensusVotes } from '@aztec/slasher';
|
|
|
393
392
|
import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
394
393
|
import { getLastL1SlotTimestampForL2Slot, getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
395
394
|
import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
396
|
-
import { encodeFunctionData,
|
|
397
|
-
import { createL1TxFailedStore } from './l1_tx_failed_store/index.js';
|
|
395
|
+
import { encodeFunctionData, toHex } from 'viem';
|
|
398
396
|
import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
399
397
|
export const Actions = [
|
|
400
398
|
'invalidate-by-invalid-attestation',
|
|
@@ -434,7 +432,6 @@ export class SequencerPublisher {
|
|
|
434
432
|
interrupted;
|
|
435
433
|
metrics;
|
|
436
434
|
epochCache;
|
|
437
|
-
failedTxStore;
|
|
438
435
|
governanceLog;
|
|
439
436
|
slashingLog;
|
|
440
437
|
lastActions;
|
|
@@ -446,7 +443,6 @@ export class SequencerPublisher {
|
|
|
446
443
|
dateProvider;
|
|
447
444
|
blobClient;
|
|
448
445
|
/** 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;
|
|
450
446
|
/** L1 fee analyzer for fisherman mode */ l1FeeAnalyzer;
|
|
451
447
|
/** Fee asset price oracle for computing price modifiers from Uniswap V4 */ feeAssetPriceOracle;
|
|
452
448
|
// A CALL to a cold address is 2700 gas
|
|
@@ -480,7 +476,6 @@ export class SequencerPublisher {
|
|
|
480
476
|
this.metrics = deps.metrics ?? new SequencerPublisherMetrics(telemetry, 'SequencerPublisher');
|
|
481
477
|
this.tracer = telemetry.getTracer('SequencerPublisher');
|
|
482
478
|
this.l1TxUtils = deps.l1TxUtils;
|
|
483
|
-
this.getNextPublisher = deps.getNextPublisher;
|
|
484
479
|
this.rollupContract = deps.rollupContract;
|
|
485
480
|
this.govProposerContract = deps.governanceProposerContract;
|
|
486
481
|
this.slashingProposerContract = deps.slashingProposerContract;
|
|
@@ -496,24 +491,6 @@ export class SequencerPublisher {
|
|
|
496
491
|
}
|
|
497
492
|
// Initialize fee asset price oracle
|
|
498
493
|
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
|
-
});
|
|
517
494
|
}
|
|
518
495
|
getRollupContract() {
|
|
519
496
|
return this.rollupContract;
|
|
@@ -542,7 +519,7 @@ export class SequencerPublisher {
|
|
|
542
519
|
this.requests.push(request);
|
|
543
520
|
}
|
|
544
521
|
getCurrentL2Slot() {
|
|
545
|
-
return this.epochCache.
|
|
522
|
+
return this.epochCache.getEpochAndSlotNow().slot;
|
|
546
523
|
}
|
|
547
524
|
/**
|
|
548
525
|
* Clears all pending requests without sending them.
|
|
@@ -659,34 +636,12 @@ export class SequencerPublisher {
|
|
|
659
636
|
// This ensures the committee gets precomputed correctly
|
|
660
637
|
validRequests.sort((a, b)=>compareActions(a.action, b.action));
|
|
661
638
|
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
|
-
};
|
|
681
639
|
this.log.debug('Forwarding transactions', {
|
|
682
640
|
validRequests: validRequests.map((request)=>request.action),
|
|
683
641
|
txConfig
|
|
684
642
|
});
|
|
685
|
-
const result = await
|
|
686
|
-
|
|
687
|
-
return undefined;
|
|
688
|
-
}
|
|
689
|
-
const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result, txContext);
|
|
643
|
+
const result = await Multicall3.forward(validRequests.map((request)=>request.request), this.l1TxUtils, txConfig, blobConfig, this.rollupContract.address, this.log);
|
|
644
|
+
const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result);
|
|
690
645
|
return {
|
|
691
646
|
result,
|
|
692
647
|
expiredActions,
|
|
@@ -706,67 +661,10 @@ export class SequencerPublisher {
|
|
|
706
661
|
}
|
|
707
662
|
}
|
|
708
663
|
}
|
|
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) {
|
|
664
|
+
callbackBundledTransactions(requests, result) {
|
|
744
665
|
const actionsListStr = requests.map((r)=>r.action).join(', ');
|
|
745
666
|
if (result instanceof FormattedViemError) {
|
|
746
667
|
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
|
-
});
|
|
770
668
|
return {
|
|
771
669
|
failedActions: requests.map((r)=>r.action)
|
|
772
670
|
};
|
|
@@ -793,37 +691,6 @@ export class SequencerPublisher {
|
|
|
793
691
|
failedActions.push(request.action);
|
|
794
692
|
}
|
|
795
693
|
}
|
|
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
|
-
}
|
|
827
694
|
return {
|
|
828
695
|
successfulActions,
|
|
829
696
|
failedActions
|
|
@@ -841,7 +708,7 @@ export class SequencerPublisher {
|
|
|
841
708
|
'InvalidProposer',
|
|
842
709
|
'InvalidArchive'
|
|
843
710
|
];
|
|
844
|
-
const pipelined = opts.pipelined ??
|
|
711
|
+
const pipelined = opts.pipelined ?? false;
|
|
845
712
|
const slotOffset = pipelined ? this.aztecSlotDuration : 0n;
|
|
846
713
|
const nextL1SlotTs = this.getNextL1SlotTimestamp() + slotOffset;
|
|
847
714
|
return this.rollupContract.canProposeAt(tipArchive.toBuffer(), msgSender.toString(), nextL1SlotTs, {
|
|
@@ -929,7 +796,6 @@ export class SequencerPublisher {
|
|
|
929
796
|
...logData,
|
|
930
797
|
request
|
|
931
798
|
});
|
|
932
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
933
799
|
try {
|
|
934
800
|
const { gasUsed } = await this.l1TxUtils.simulate(request, undefined, undefined, mergeAbis([
|
|
935
801
|
request.abi ?? [],
|
|
@@ -972,27 +838,6 @@ export class SequencerPublisher {
|
|
|
972
838
|
}
|
|
973
839
|
// Otherwise, throw. We cannot build the next checkpoint if we cannot invalidate the previous one.
|
|
974
840
|
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
|
-
});
|
|
996
841
|
throw new Error(`Failed to simulate invalidate checkpoint ${checkpointNumber}`, {
|
|
997
842
|
cause: viemError
|
|
998
843
|
});
|
|
@@ -1093,7 +938,6 @@ export class SequencerPublisher {
|
|
|
1093
938
|
signer: this.l1TxUtils.client.account?.address,
|
|
1094
939
|
lastValidL2Slot: slotNumber
|
|
1095
940
|
});
|
|
1096
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1097
941
|
const timestamp = this.getSimulationTimestamp(slotNumber);
|
|
1098
942
|
try {
|
|
1099
943
|
await this.l1TxUtils.simulate(request, {
|
|
@@ -1108,29 +952,7 @@ export class SequencerPublisher {
|
|
|
1108
952
|
} catch (err) {
|
|
1109
953
|
const viemError = formatViemError(err);
|
|
1110
954
|
this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError, {
|
|
1111
|
-
simulationTimestamp: timestamp
|
|
1112
|
-
l1BlockNumber
|
|
1113
|
-
});
|
|
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
|
-
}
|
|
955
|
+
simulationTimestamp: timestamp
|
|
1134
956
|
});
|
|
1135
957
|
// Yes, we enqueue the request anyway, in case there was a bug with the simulation itself
|
|
1136
958
|
}
|
|
@@ -1352,7 +1174,6 @@ export class SequencerPublisher {
|
|
|
1352
1174
|
const cachedLastActionSlot = this.lastActions[action];
|
|
1353
1175
|
this.lastActions[action] = slotNumber;
|
|
1354
1176
|
this.log.debug(`Simulating ${action} for slot ${slotNumber}`, logData);
|
|
1355
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1356
1177
|
let gasUsed;
|
|
1357
1178
|
const simulateAbi = mergeAbis([
|
|
1358
1179
|
request.abi ?? [],
|
|
@@ -1370,27 +1191,6 @@ export class SequencerPublisher {
|
|
|
1370
1191
|
} catch (err) {
|
|
1371
1192
|
const viemError = formatViemError(err, simulateAbi);
|
|
1372
1193
|
this.log.error(`Simulation for ${action} at ${slotNumber} failed`, viemError, logData);
|
|
1373
|
-
this.backupFailedTx({
|
|
1374
|
-
id: keccak256(request.data),
|
|
1375
|
-
failureType: 'simulation',
|
|
1376
|
-
request: {
|
|
1377
|
-
to: request.to,
|
|
1378
|
-
data: request.data,
|
|
1379
|
-
value: request.value?.toString()
|
|
1380
|
-
},
|
|
1381
|
-
l1BlockNumber: l1BlockNumber.toString(),
|
|
1382
|
-
error: {
|
|
1383
|
-
message: viemError.message,
|
|
1384
|
-
name: viemError.name
|
|
1385
|
-
},
|
|
1386
|
-
context: {
|
|
1387
|
-
actions: [
|
|
1388
|
-
action
|
|
1389
|
-
],
|
|
1390
|
-
slot: slotNumber,
|
|
1391
|
-
sender: this.getSenderAddress().toString()
|
|
1392
|
-
}
|
|
1393
|
-
});
|
|
1394
1194
|
return false;
|
|
1395
1195
|
}
|
|
1396
1196
|
// We issued the simulation against the rollup contract, so we need to account for the overhead of the multicall3
|
|
@@ -1469,38 +1269,10 @@ export class SequencerPublisher {
|
|
|
1469
1269
|
}, {}, {
|
|
1470
1270
|
blobs: encodedData.blobs.map((b)=>b.data),
|
|
1471
1271
|
kzg
|
|
1472
|
-
}).catch(
|
|
1473
|
-
const
|
|
1474
|
-
this.log.error(`Failed to validate blobs`,
|
|
1475
|
-
metaMessages
|
|
1476
|
-
});
|
|
1477
|
-
const validateBlobsData = encodeFunctionData({
|
|
1478
|
-
abi: RollupAbi,
|
|
1479
|
-
functionName: 'validateBlobs',
|
|
1480
|
-
args: [
|
|
1481
|
-
blobInput
|
|
1482
|
-
]
|
|
1483
|
-
});
|
|
1484
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1485
|
-
this.backupFailedTx({
|
|
1486
|
-
id: keccak256(validateBlobsData),
|
|
1487
|
-
failureType: 'simulation',
|
|
1488
|
-
request: {
|
|
1489
|
-
to: this.rollupContract.address,
|
|
1490
|
-
data: validateBlobsData
|
|
1491
|
-
},
|
|
1492
|
-
blobData: encodedData.blobs.map((b)=>toHex(b.data)),
|
|
1493
|
-
l1BlockNumber: l1BlockNumber.toString(),
|
|
1494
|
-
error: {
|
|
1495
|
-
message: viemError.message,
|
|
1496
|
-
name: viemError.name
|
|
1497
|
-
},
|
|
1498
|
-
context: {
|
|
1499
|
-
actions: [
|
|
1500
|
-
'validate-blobs'
|
|
1501
|
-
],
|
|
1502
|
-
sender: this.getSenderAddress().toString()
|
|
1503
|
-
}
|
|
1272
|
+
}).catch((err)=>{
|
|
1273
|
+
const { message, metaMessages } = formatViemError(err);
|
|
1274
|
+
this.log.error(`Failed to validate blobs`, message, {
|
|
1275
|
+
metaMessages
|
|
1504
1276
|
});
|
|
1505
1277
|
throw new Error('Failed to validate blobs');
|
|
1506
1278
|
});
|
|
@@ -1559,7 +1331,6 @@ export class SequencerPublisher {
|
|
|
1559
1331
|
balance: 10n * WEI_CONST * WEI_CONST
|
|
1560
1332
|
});
|
|
1561
1333
|
}
|
|
1562
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1563
1334
|
const simTs = this.getSimulationTimestamp(SlotNumber.fromBigInt(args[0].header.slotNumber));
|
|
1564
1335
|
const simulationResult = await this.l1TxUtils.simulate({
|
|
1565
1336
|
to: this.rollupContract.address,
|
|
@@ -1589,26 +1360,6 @@ export class SequencerPublisher {
|
|
|
1589
1360
|
this.log.error(`Failed to simulate propose tx`, viemError, {
|
|
1590
1361
|
simulationTimestamp: simTs
|
|
1591
1362
|
});
|
|
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
|
-
});
|
|
1612
1363
|
throw err;
|
|
1613
1364
|
});
|
|
1614
1365
|
return {
|
|
@@ -27,10 +27,8 @@ 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
|
|
32
|
-
private readonly epochNow;
|
|
33
|
-
private readonly targetEpoch;
|
|
30
|
+
private readonly epoch;
|
|
31
|
+
private readonly slot;
|
|
34
32
|
private readonly checkpointNumber;
|
|
35
33
|
private readonly syncedToBlockNumber;
|
|
36
34
|
private readonly proposer;
|
|
@@ -56,11 +54,7 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
56
54
|
private readonly setStateFn;
|
|
57
55
|
readonly tracer: Tracer;
|
|
58
56
|
protected readonly log: Logger;
|
|
59
|
-
constructor(
|
|
60
|
-
/** The wall-clock slot during which the proposer builds. */
|
|
61
|
-
private get slot();
|
|
62
|
-
/** The wall-clock epoch. */
|
|
63
|
-
private get epoch();
|
|
57
|
+
constructor(epoch: EpochNumber, slot: SlotNumber, checkpointNumber: CheckpointNumber, syncedToBlockNumber: BlockNumber, proposer: EthAddress | undefined, publisher: SequencerPublisher, attestorAddress: EthAddress, invalidateCheckpoint: InvalidateCheckpointRequest | undefined, validatorClient: ValidatorClient, globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer, l1ToL2MessageSource: L1ToL2MessageSource, l2BlockSource: L2BlockSource, checkpointsBuilder: FullNodeCheckpointsBuilder, blockSink: L2BlockSink, l1Constants: SequencerRollupConstants, config: ResolvedSequencerConfig, timetable: SequencerTimetable, slasherClient: SlasherClientInterface | undefined, epochCache: EpochCache, dateProvider: DateProvider, metrics: SequencerMetrics, eventEmitter: TypedEventEmitter<SequencerEvents>, setStateFn: (state: SequencerState, slot?: SlotNumber) => void, tracer: Tracer, bindings?: LoggerBindings);
|
|
64
58
|
/**
|
|
65
59
|
* Executes the checkpoint proposal job.
|
|
66
60
|
* Returns the published checkpoint if successful, undefined otherwise.
|
|
@@ -105,4 +99,4 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
105
99
|
private getSecondsIntoSlot;
|
|
106
100
|
getPublisher(): SequencerPublisher;
|
|
107
101
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# 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;AASpG,OAAO,EAAiB,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,KAAK,0BAA0B,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGnH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,KAAK,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAK5C;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IAInD,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}
|