@aztec/sequencer-client 0.0.1-commit.f504929 → 0.0.1-commit.f81dbcf
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 -1
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +85 -13
- package/dest/config.d.ts +22 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +14 -12
- package/dest/publisher/config.d.ts +1 -5
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +1 -6
- 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 +1 -1
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.js +0 -14
- 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 +9 -258
- package/dest/sequencer/checkpoint_proposal_job.d.ts +2 -4
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +55 -58
- package/dest/sequencer/sequencer.d.ts +7 -6
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +11 -13
- 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 +10 -8
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -1
- package/dest/test/mock_checkpoint_builder.js +41 -30
- package/package.json +28 -28
- package/src/client/sequencer-client.ts +111 -12
- package/src/config.ts +17 -14
- package/src/publisher/config.ts +0 -9
- package/src/publisher/index.ts +0 -3
- package/src/publisher/sequencer-publisher-factory.ts +0 -15
- package/src/publisher/sequencer-publisher.ts +15 -237
- package/src/sequencer/checkpoint_proposal_job.ts +65 -65
- package/src/sequencer/sequencer.ts +12 -14
- package/src/sequencer/timetable.ts +7 -7
- package/src/sequencer/types.ts +1 -1
- package/src/test/mock_checkpoint_builder.ts +52 -47
- 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
|
@@ -380,7 +380,6 @@ 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';
|
|
384
383
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
385
384
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
386
385
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -391,8 +390,7 @@ import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
|
391
390
|
import { encodeSlashConsensusVotes } from '@aztec/slasher';
|
|
392
391
|
import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
393
392
|
import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
394
|
-
import { encodeFunctionData,
|
|
395
|
-
import { createL1TxFailedStore } from './l1_tx_failed_store/index.js';
|
|
393
|
+
import { encodeFunctionData, toHex } from 'viem';
|
|
396
394
|
import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
397
395
|
export const Actions = [
|
|
398
396
|
'invalidate-by-invalid-attestation',
|
|
@@ -432,7 +430,6 @@ export class SequencerPublisher {
|
|
|
432
430
|
interrupted;
|
|
433
431
|
metrics;
|
|
434
432
|
epochCache;
|
|
435
|
-
failedTxStore;
|
|
436
433
|
governanceLog;
|
|
437
434
|
slashingLog;
|
|
438
435
|
lastActions;
|
|
@@ -442,7 +439,6 @@ export class SequencerPublisher {
|
|
|
442
439
|
ethereumSlotDuration;
|
|
443
440
|
blobClient;
|
|
444
441
|
/** 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;
|
|
446
442
|
/** L1 fee analyzer for fisherman mode */ l1FeeAnalyzer;
|
|
447
443
|
/** Fee asset price oracle for computing price modifiers from Uniswap V4 */ feeAssetPriceOracle;
|
|
448
444
|
// A CALL to a cold address is 2700 gas
|
|
@@ -474,7 +470,6 @@ export class SequencerPublisher {
|
|
|
474
470
|
this.metrics = deps.metrics ?? new SequencerPublisherMetrics(telemetry, 'SequencerPublisher');
|
|
475
471
|
this.tracer = telemetry.getTracer('SequencerPublisher');
|
|
476
472
|
this.l1TxUtils = deps.l1TxUtils;
|
|
477
|
-
this.getNextPublisher = deps.getNextPublisher;
|
|
478
473
|
this.rollupContract = deps.rollupContract;
|
|
479
474
|
this.govProposerContract = deps.governanceProposerContract;
|
|
480
475
|
this.slashingProposerContract = deps.slashingProposerContract;
|
|
@@ -490,24 +485,6 @@ export class SequencerPublisher {
|
|
|
490
485
|
}
|
|
491
486
|
// Initialize fee asset price oracle
|
|
492
487
|
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
|
-
});
|
|
511
488
|
}
|
|
512
489
|
getRollupContract() {
|
|
513
490
|
return this.rollupContract;
|
|
@@ -653,34 +630,12 @@ export class SequencerPublisher {
|
|
|
653
630
|
// This ensures the committee gets precomputed correctly
|
|
654
631
|
validRequests.sort((a, b)=>compareActions(a.action, b.action));
|
|
655
632
|
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
|
-
};
|
|
675
633
|
this.log.debug('Forwarding transactions', {
|
|
676
634
|
validRequests: validRequests.map((request)=>request.action),
|
|
677
635
|
txConfig
|
|
678
636
|
});
|
|
679
|
-
const result = await
|
|
680
|
-
|
|
681
|
-
return undefined;
|
|
682
|
-
}
|
|
683
|
-
const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result, txContext);
|
|
637
|
+
const result = await Multicall3.forward(validRequests.map((request)=>request.request), this.l1TxUtils, txConfig, blobConfig, this.rollupContract.address, this.log);
|
|
638
|
+
const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result);
|
|
684
639
|
return {
|
|
685
640
|
result,
|
|
686
641
|
expiredActions,
|
|
@@ -700,67 +655,10 @@ export class SequencerPublisher {
|
|
|
700
655
|
}
|
|
701
656
|
}
|
|
702
657
|
}
|
|
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) {
|
|
658
|
+
callbackBundledTransactions(requests, result) {
|
|
738
659
|
const actionsListStr = requests.map((r)=>r.action).join(', ');
|
|
739
660
|
if (result instanceof FormattedViemError) {
|
|
740
661
|
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
|
-
});
|
|
764
662
|
return {
|
|
765
663
|
failedActions: requests.map((r)=>r.action)
|
|
766
664
|
};
|
|
@@ -778,37 +676,6 @@ export class SequencerPublisher {
|
|
|
778
676
|
failedActions.push(request.action);
|
|
779
677
|
}
|
|
780
678
|
}
|
|
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
|
-
}
|
|
812
679
|
return {
|
|
813
680
|
successfulActions,
|
|
814
681
|
failedActions
|
|
@@ -911,7 +778,6 @@ export class SequencerPublisher {
|
|
|
911
778
|
...logData,
|
|
912
779
|
request
|
|
913
780
|
});
|
|
914
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
915
781
|
try {
|
|
916
782
|
const { gasUsed } = await this.l1TxUtils.simulate(request, undefined, undefined, mergeAbis([
|
|
917
783
|
request.abi ?? [],
|
|
@@ -954,27 +820,6 @@ export class SequencerPublisher {
|
|
|
954
820
|
}
|
|
955
821
|
// Otherwise, throw. We cannot build the next checkpoint if we cannot invalidate the previous one.
|
|
956
822
|
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
|
-
});
|
|
978
823
|
throw new Error(`Failed to simulate invalidate checkpoint ${checkpointNumber}`, {
|
|
979
824
|
cause: viemError
|
|
980
825
|
});
|
|
@@ -1077,7 +922,6 @@ export class SequencerPublisher {
|
|
|
1077
922
|
signer: this.l1TxUtils.client.account?.address,
|
|
1078
923
|
lastValidL2Slot: slotNumber
|
|
1079
924
|
});
|
|
1080
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1081
925
|
try {
|
|
1082
926
|
await this.l1TxUtils.simulate(request, {
|
|
1083
927
|
time: timestamp
|
|
@@ -1089,29 +933,7 @@ export class SequencerPublisher {
|
|
|
1089
933
|
request
|
|
1090
934
|
});
|
|
1091
935
|
} catch (err) {
|
|
1092
|
-
|
|
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
|
-
});
|
|
936
|
+
this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, err);
|
|
1115
937
|
// Yes, we enqueue the request anyway, in case there was a bug with the simulation itself
|
|
1116
938
|
}
|
|
1117
939
|
// TODO(palla/slash): All votes (governance and slashing) should txTimeoutAt at the end of the slot.
|
|
@@ -1333,7 +1155,6 @@ export class SequencerPublisher {
|
|
|
1333
1155
|
const cachedLastActionSlot = this.lastActions[action];
|
|
1334
1156
|
this.lastActions[action] = slotNumber;
|
|
1335
1157
|
this.log.debug(`Simulating ${action} for slot ${slotNumber}`, logData);
|
|
1336
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1337
1158
|
let gasUsed;
|
|
1338
1159
|
const simulateAbi = mergeAbis([
|
|
1339
1160
|
request.abi ?? [],
|
|
@@ -1351,27 +1172,6 @@ export class SequencerPublisher {
|
|
|
1351
1172
|
} catch (err) {
|
|
1352
1173
|
const viemError = formatViemError(err, simulateAbi);
|
|
1353
1174
|
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
|
-
});
|
|
1375
1175
|
return false;
|
|
1376
1176
|
}
|
|
1377
1177
|
// We issued the simulation against the rollup contract, so we need to account for the overhead of the multicall3
|
|
@@ -1450,38 +1250,10 @@ export class SequencerPublisher {
|
|
|
1450
1250
|
}, {}, {
|
|
1451
1251
|
blobs: encodedData.blobs.map((b)=>b.data),
|
|
1452
1252
|
kzg
|
|
1453
|
-
}).catch(
|
|
1454
|
-
const
|
|
1455
|
-
this.log.error(`Failed to validate blobs`,
|
|
1456
|
-
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
|
-
}
|
|
1253
|
+
}).catch((err)=>{
|
|
1254
|
+
const { message, metaMessages } = formatViemError(err);
|
|
1255
|
+
this.log.error(`Failed to validate blobs`, message, {
|
|
1256
|
+
metaMessages
|
|
1485
1257
|
});
|
|
1486
1258
|
throw new Error('Failed to validate blobs');
|
|
1487
1259
|
});
|
|
@@ -1541,7 +1313,6 @@ export class SequencerPublisher {
|
|
|
1541
1313
|
balance: 10n * WEI_CONST * WEI_CONST
|
|
1542
1314
|
});
|
|
1543
1315
|
}
|
|
1544
|
-
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1545
1316
|
const simulationResult = await this.l1TxUtils.simulate({
|
|
1546
1317
|
to: this.rollupContract.address,
|
|
1547
1318
|
data: rollupData,
|
|
@@ -1569,26 +1340,6 @@ export class SequencerPublisher {
|
|
|
1569
1340
|
};
|
|
1570
1341
|
}
|
|
1571
1342
|
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
|
-
});
|
|
1592
1343
|
throw err;
|
|
1593
1344
|
});
|
|
1594
1345
|
return {
|
|
@@ -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';
|
|
@@ -71,11 +71,9 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
71
71
|
indexWithinCheckpoint: IndexWithinCheckpoint;
|
|
72
72
|
buildDeadline: Date | undefined;
|
|
73
73
|
txHashesAlreadyIncluded: Set<string>;
|
|
74
|
-
remainingBlobFields: number;
|
|
75
74
|
}): Promise<{
|
|
76
75
|
block: L2Block;
|
|
77
76
|
usedTxs: Tx[];
|
|
78
|
-
remainingBlobFields: number;
|
|
79
77
|
} | {
|
|
80
78
|
error: Error;
|
|
81
79
|
} | undefined>;
|
|
@@ -99,4 +97,4 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
99
97
|
private getSecondsIntoSlot;
|
|
100
98
|
getPublisher(): SequencerPublisher;
|
|
101
99
|
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQVF6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFHTCxPQUFPLEVBQ1AsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUcvRSxPQUFPLEVBR0wsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxzQkFBc0IsRUFDNUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztBQUlwRyxPQUFPLEVBQWlCLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE9BQU8sRUFBYyxLQUFLLFNB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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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"}
|