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