@aztec/sequencer-client 0.0.1-commit.3fd054f6 → 0.0.1-commit.42ee6df9b
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/global_variable_builder/global_builder.d.ts +3 -3
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +7 -4
- package/dest/publisher/sequencer-publisher.d.ts +46 -24
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +72 -40
- package/dest/sequencer/checkpoint_proposal_job.d.ts +28 -9
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_proposal_job.js +149 -74
- package/dest/sequencer/checkpoint_voter.d.ts +1 -2
- package/dest/sequencer/checkpoint_voter.d.ts.map +1 -1
- package/dest/sequencer/checkpoint_voter.js +2 -5
- package/dest/sequencer/sequencer.d.ts +14 -4
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +60 -15
- package/package.json +27 -27
- package/src/global_variable_builder/global_builder.ts +15 -3
- package/src/publisher/sequencer-publisher.ts +113 -51
- package/src/sequencer/checkpoint_proposal_job.ts +181 -77
- package/src/sequencer/checkpoint_voter.ts +1 -12
- package/src/sequencer/sequencer.ts +89 -19
|
@@ -386,12 +386,13 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
386
386
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
387
387
|
import { createLogger } from '@aztec/foundation/log';
|
|
388
388
|
import { makeBackoff, retry } from '@aztec/foundation/retry';
|
|
389
|
+
import { InterruptibleSleep } from '@aztec/foundation/sleep';
|
|
389
390
|
import { bufferToHex } from '@aztec/foundation/string';
|
|
390
391
|
import { Timer } from '@aztec/foundation/timer';
|
|
391
392
|
import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
392
393
|
import { encodeSlashConsensusVotes } from '@aztec/slasher';
|
|
393
394
|
import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
394
|
-
import { getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
395
|
+
import { getLastL1SlotTimestampForL2Slot, getNextL1SlotTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
395
396
|
import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
396
397
|
import { encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
|
|
397
398
|
import { createL1TxFailedStore } from './l1_tx_failed_store/index.js';
|
|
@@ -443,12 +444,13 @@ export class SequencerPublisher {
|
|
|
443
444
|
log;
|
|
444
445
|
ethereumSlotDuration;
|
|
445
446
|
aztecSlotDuration;
|
|
446
|
-
dateProvider;
|
|
447
|
+
/** Date provider for wall-clock time. */ dateProvider;
|
|
447
448
|
blobClient;
|
|
448
449
|
/** Address to use for simulations in fisherman mode (actual proposer's address) */ proposerAddressForSimulation;
|
|
449
450
|
/** Optional callback to obtain a replacement publisher when the current one fails to send. */ getNextPublisher;
|
|
450
451
|
/** L1 fee analyzer for fisherman mode */ l1FeeAnalyzer;
|
|
451
452
|
/** Fee asset price oracle for computing price modifiers from Uniswap V4 */ feeAssetPriceOracle;
|
|
453
|
+
/** Interruptible sleep used by sendRequestsAt to wait until a target timestamp. */ interruptibleSleep;
|
|
452
454
|
// A CALL to a cold address is 2700 gas
|
|
453
455
|
static MULTICALL_OVERHEAD_GAS_GUESS = 5000n;
|
|
454
456
|
// Gas report for VotingWithSigTest shows a max gas of 100k, but we've seen it cost 700k+ in testnet
|
|
@@ -468,6 +470,7 @@ export class SequencerPublisher {
|
|
|
468
470
|
this.lastActions = {};
|
|
469
471
|
this.isPayloadEmptyCache = new Map();
|
|
470
472
|
this.payloadProposedCache = new Set();
|
|
473
|
+
this.interruptibleSleep = new InterruptibleSleep();
|
|
471
474
|
this.requests = [];
|
|
472
475
|
this.log = deps.log ?? createLogger('sequencer:publisher');
|
|
473
476
|
this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
|
|
@@ -476,6 +479,7 @@ export class SequencerPublisher {
|
|
|
476
479
|
this.epochCache = deps.epochCache;
|
|
477
480
|
this.lastActions = deps.lastActions;
|
|
478
481
|
this.blobClient = deps.blobClient;
|
|
482
|
+
this.dateProvider = deps.dateProvider;
|
|
479
483
|
const telemetry = deps.telemetry ?? getTelemetryClient();
|
|
480
484
|
this.metrics = deps.metrics ?? new SequencerPublisherMetrics(telemetry, 'SequencerPublisher');
|
|
481
485
|
this.tracer = telemetry.getTracer('SequencerPublisher');
|
|
@@ -740,6 +744,23 @@ export class SequencerPublisher {
|
|
|
740
744
|
}
|
|
741
745
|
}
|
|
742
746
|
}
|
|
747
|
+
/*
|
|
748
|
+
* Schedules sending all enqueued requests at (or after) the given timestamp.
|
|
749
|
+
* Uses InterruptibleSleep so it can be cancelled via interrupt().
|
|
750
|
+
* Returns the promise for the L1 response (caller should NOT await this in the work loop).
|
|
751
|
+
*/ async sendRequestsAt(submitAfter) {
|
|
752
|
+
const ms = submitAfter.getTime() - this.dateProvider.now();
|
|
753
|
+
if (ms > 0) {
|
|
754
|
+
this.log.debug(`Sleeping ${ms}ms before sending requests`, {
|
|
755
|
+
submitAfter
|
|
756
|
+
});
|
|
757
|
+
await this.interruptibleSleep.sleep(ms);
|
|
758
|
+
}
|
|
759
|
+
if (this.interrupted) {
|
|
760
|
+
return undefined;
|
|
761
|
+
}
|
|
762
|
+
return this.sendRequests();
|
|
763
|
+
}
|
|
743
764
|
callbackBundledTransactions(requests, result, txContext) {
|
|
744
765
|
const actionsListStr = requests.map((r)=>r.action).join(', ');
|
|
745
766
|
if (result instanceof FormattedViemError) {
|
|
@@ -845,7 +866,8 @@ export class SequencerPublisher {
|
|
|
845
866
|
const slotOffset = pipelined ? this.aztecSlotDuration : 0n;
|
|
846
867
|
const nextL1SlotTs = this.getNextL1SlotTimestamp() + slotOffset;
|
|
847
868
|
return this.rollupContract.canProposeAt(tipArchive.toBuffer(), msgSender.toString(), nextL1SlotTs, {
|
|
848
|
-
forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber
|
|
869
|
+
forcePendingCheckpointNumber: opts.forcePendingCheckpointNumber,
|
|
870
|
+
forceArchive: opts.forceArchive
|
|
849
871
|
}).catch((err)=>{
|
|
850
872
|
if (err instanceof FormattedViemError && ignoredErrors.find((e)=>err.message.includes(e))) {
|
|
851
873
|
this.log.warn(`Failed canProposeAtTime check with ${ignoredErrors.find((e)=>err.message.includes(e))}`, {
|
|
@@ -876,7 +898,7 @@ export class SequencerPublisher {
|
|
|
876
898
|
header.blobsHash.toString(),
|
|
877
899
|
flags
|
|
878
900
|
];
|
|
879
|
-
const ts = this.
|
|
901
|
+
const ts = this.getSimulationTimestamp(header.slotNumber);
|
|
880
902
|
const stateOverrides = await this.rollupContract.makePendingCheckpointNumberOverride(opts?.forcePendingCheckpointNumber);
|
|
881
903
|
let balance = 0n;
|
|
882
904
|
if (this.config.fishermanMode) {
|
|
@@ -899,7 +921,7 @@ export class SequencerPublisher {
|
|
|
899
921
|
}),
|
|
900
922
|
from: MULTI_CALL_3_ADDRESS
|
|
901
923
|
}, {
|
|
902
|
-
time: ts
|
|
924
|
+
time: ts
|
|
903
925
|
}, stateOverrides);
|
|
904
926
|
this.log.debug(`Simulated validateHeader`);
|
|
905
927
|
}
|
|
@@ -945,6 +967,7 @@ export class SequencerPublisher {
|
|
|
945
967
|
gasUsed,
|
|
946
968
|
checkpointNumber,
|
|
947
969
|
forcePendingCheckpointNumber: CheckpointNumber(checkpointNumber - 1),
|
|
970
|
+
lastArchive: validationResult.checkpoint.lastArchive,
|
|
948
971
|
reason
|
|
949
972
|
};
|
|
950
973
|
} catch (err) {
|
|
@@ -957,8 +980,8 @@ export class SequencerPublisher {
|
|
|
957
980
|
request,
|
|
958
981
|
error: viemError.message
|
|
959
982
|
});
|
|
960
|
-
const
|
|
961
|
-
if (
|
|
983
|
+
const latestProposedCheckpointNumber = await this.rollupContract.getCheckpointNumber();
|
|
984
|
+
if (latestProposedCheckpointNumber < checkpointNumber) {
|
|
962
985
|
this.log.verbose(`Checkpoint ${checkpointNumber} has already been invalidated`, {
|
|
963
986
|
...logData
|
|
964
987
|
});
|
|
@@ -1019,9 +1042,6 @@ export class SequencerPublisher {
|
|
|
1019
1042
|
}
|
|
1020
1043
|
}
|
|
1021
1044
|
/** Simulates `propose` to make sure that the checkpoint is valid for submission */ async validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, options) {
|
|
1022
|
-
// Anchor the simulation timestamp to the checkpoint's own slot start time
|
|
1023
|
-
// rather than the current L1 block timestamp, which may overshoot into the next slot if the build ran late.
|
|
1024
|
-
const ts = checkpoint.header.timestamp;
|
|
1025
1045
|
const blobFields = checkpoint.toBlobFields();
|
|
1026
1046
|
const blobs = await getBlobsPerL1Block(blobFields);
|
|
1027
1047
|
const blobInput = getPrefixedEthBlobCommitments(blobs);
|
|
@@ -1038,10 +1058,9 @@ export class SequencerPublisher {
|
|
|
1038
1058
|
attestationsAndSignersSignature.toViemSignature(),
|
|
1039
1059
|
blobInput
|
|
1040
1060
|
];
|
|
1041
|
-
await this.simulateProposeTx(args,
|
|
1042
|
-
return ts;
|
|
1061
|
+
await this.simulateProposeTx(args, options);
|
|
1043
1062
|
}
|
|
1044
|
-
async enqueueCastSignalHelper(slotNumber,
|
|
1063
|
+
async enqueueCastSignalHelper(slotNumber, signalType, payload, base, signerAddress, signer) {
|
|
1045
1064
|
if (this.lastActions[signalType] && this.lastActions[signalType] === slotNumber) {
|
|
1046
1065
|
this.log.debug(`Skipping duplicate vote cast signal ${signalType} for slot ${slotNumber}`);
|
|
1047
1066
|
return false;
|
|
@@ -1098,6 +1117,7 @@ export class SequencerPublisher {
|
|
|
1098
1117
|
lastValidL2Slot: slotNumber
|
|
1099
1118
|
});
|
|
1100
1119
|
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1120
|
+
const timestamp = this.getSimulationTimestamp(slotNumber);
|
|
1101
1121
|
try {
|
|
1102
1122
|
await this.l1TxUtils.simulate(request, {
|
|
1103
1123
|
time: timestamp
|
|
@@ -1110,7 +1130,10 @@ export class SequencerPublisher {
|
|
|
1110
1130
|
});
|
|
1111
1131
|
} catch (err) {
|
|
1112
1132
|
const viemError = formatViemError(err);
|
|
1113
|
-
this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError
|
|
1133
|
+
this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError, {
|
|
1134
|
+
simulationTimestamp: timestamp,
|
|
1135
|
+
l1BlockNumber
|
|
1136
|
+
});
|
|
1114
1137
|
this.backupFailedTx({
|
|
1115
1138
|
id: keccak256(request.data),
|
|
1116
1139
|
failureType: 'simulation',
|
|
@@ -1175,12 +1198,11 @@ export class SequencerPublisher {
|
|
|
1175
1198
|
/**
|
|
1176
1199
|
* Enqueues a governance castSignal transaction to cast a signal for a given slot number.
|
|
1177
1200
|
* @param slotNumber - The slot number to cast a signal for.
|
|
1178
|
-
* @param timestamp - The timestamp of the slot to cast a signal for.
|
|
1179
1201
|
* @returns True if the signal was successfully enqueued, false otherwise.
|
|
1180
|
-
*/ enqueueGovernanceCastSignal(governancePayload, slotNumber,
|
|
1181
|
-
return this.enqueueCastSignalHelper(slotNumber,
|
|
1202
|
+
*/ enqueueGovernanceCastSignal(governancePayload, slotNumber, signerAddress, signer) {
|
|
1203
|
+
return this.enqueueCastSignalHelper(slotNumber, 'governance-signal', governancePayload, this.govProposerContract, signerAddress, signer);
|
|
1182
1204
|
}
|
|
1183
|
-
/** Enqueues all slashing actions as returned by the slasher client. */ async enqueueSlashingActions(actions, slotNumber,
|
|
1205
|
+
/** Enqueues all slashing actions as returned by the slasher client. */ async enqueueSlashingActions(actions, slotNumber, signerAddress, signer) {
|
|
1184
1206
|
if (actions.length === 0) {
|
|
1185
1207
|
this.log.debug(`No slashing actions to enqueue for slot ${slotNumber}`);
|
|
1186
1208
|
return false;
|
|
@@ -1196,7 +1218,7 @@ export class SequencerPublisher {
|
|
|
1196
1218
|
this.log.debug(`Enqueuing slashing vote for payload ${action.payload} at slot ${slotNumber}`, {
|
|
1197
1219
|
signerAddress
|
|
1198
1220
|
});
|
|
1199
|
-
await this.enqueueCastSignalHelper(slotNumber,
|
|
1221
|
+
await this.enqueueCastSignalHelper(slotNumber, 'empire-slashing-signal', action.payload, this.slashingProposerContract, signerAddress, signer);
|
|
1200
1222
|
break;
|
|
1201
1223
|
}
|
|
1202
1224
|
case 'create-empire-payload':
|
|
@@ -1206,7 +1228,7 @@ export class SequencerPublisher {
|
|
|
1206
1228
|
signerAddress
|
|
1207
1229
|
});
|
|
1208
1230
|
const request = this.slashFactoryContract.buildCreatePayloadRequest(action.data);
|
|
1209
|
-
await this.simulateAndEnqueueRequest('create-empire-payload', request, (receipt)=>!!this.slashFactoryContract.tryExtractSlashPayloadCreatedEvent(receipt.logs), slotNumber
|
|
1231
|
+
await this.simulateAndEnqueueRequest('create-empire-payload', request, (receipt)=>!!this.slashFactoryContract.tryExtractSlashPayloadCreatedEvent(receipt.logs), slotNumber);
|
|
1210
1232
|
break;
|
|
1211
1233
|
}
|
|
1212
1234
|
case 'execute-empire-payload':
|
|
@@ -1221,7 +1243,7 @@ export class SequencerPublisher {
|
|
|
1221
1243
|
}
|
|
1222
1244
|
const empireSlashingProposer = this.slashingProposerContract;
|
|
1223
1245
|
const request = empireSlashingProposer.buildExecuteRoundRequest(action.round);
|
|
1224
|
-
await this.simulateAndEnqueueRequest('execute-empire-payload', request, (receipt)=>!!empireSlashingProposer.tryExtractPayloadSubmittedEvent(receipt.logs), slotNumber
|
|
1246
|
+
await this.simulateAndEnqueueRequest('execute-empire-payload', request, (receipt)=>!!empireSlashingProposer.tryExtractPayloadSubmittedEvent(receipt.logs), slotNumber);
|
|
1225
1247
|
break;
|
|
1226
1248
|
}
|
|
1227
1249
|
case 'vote-offenses':
|
|
@@ -1239,7 +1261,7 @@ export class SequencerPublisher {
|
|
|
1239
1261
|
const tallySlashingProposer = this.slashingProposerContract;
|
|
1240
1262
|
const votes = bufferToHex(encodeSlashConsensusVotes(action.votes));
|
|
1241
1263
|
const request = await tallySlashingProposer.buildVoteRequestFromSigner(votes, slotNumber, signer);
|
|
1242
|
-
await this.simulateAndEnqueueRequest('vote-offenses', request, (receipt)=>!!tallySlashingProposer.tryExtractVoteCastEvent(receipt.logs), slotNumber
|
|
1264
|
+
await this.simulateAndEnqueueRequest('vote-offenses', request, (receipt)=>!!tallySlashingProposer.tryExtractVoteCastEvent(receipt.logs), slotNumber);
|
|
1243
1265
|
break;
|
|
1244
1266
|
}
|
|
1245
1267
|
case 'execute-slash':
|
|
@@ -1255,7 +1277,7 @@ export class SequencerPublisher {
|
|
|
1255
1277
|
}
|
|
1256
1278
|
const tallySlashingProposer = this.slashingProposerContract;
|
|
1257
1279
|
const request = tallySlashingProposer.buildExecuteRoundRequest(action.round, action.committees);
|
|
1258
|
-
await this.simulateAndEnqueueRequest('execute-slash', request, (receipt)=>!!tallySlashingProposer.tryExtractRoundExecutedEvent(receipt.logs), slotNumber
|
|
1280
|
+
await this.simulateAndEnqueueRequest('execute-slash', request, (receipt)=>!!tallySlashingProposer.tryExtractRoundExecutedEvent(receipt.logs), slotNumber);
|
|
1259
1281
|
break;
|
|
1260
1282
|
}
|
|
1261
1283
|
default:
|
|
@@ -1279,14 +1301,13 @@ export class SequencerPublisher {
|
|
|
1279
1301
|
attestationsAndSignersSignature,
|
|
1280
1302
|
feeAssetPriceModifier: checkpoint.feeAssetPriceModifier
|
|
1281
1303
|
};
|
|
1282
|
-
let ts;
|
|
1283
1304
|
try {
|
|
1284
1305
|
// @note This will make sure that we are passing the checks for our header ASSUMING that the data is also made available
|
|
1285
1306
|
// This means that we can avoid the simulation issues in later checks.
|
|
1286
1307
|
// By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which
|
|
1287
1308
|
// make time consistency checks break.
|
|
1288
1309
|
// TODO(palla): Check whether we're validating twice, once here and once within addProposeTx, since we call simulateProposeTx in both places.
|
|
1289
|
-
|
|
1310
|
+
await this.validateCheckpointForSubmission(checkpoint, attestationsAndSigners, attestationsAndSignersSignature, opts);
|
|
1290
1311
|
} catch (err) {
|
|
1291
1312
|
this.log.error(`Checkpoint validation failed. ${err instanceof Error ? err.message : 'No error message'}`, err, {
|
|
1292
1313
|
...checkpoint.getStats(),
|
|
@@ -1299,7 +1320,7 @@ export class SequencerPublisher {
|
|
|
1299
1320
|
...checkpoint.toCheckpointInfo(),
|
|
1300
1321
|
...opts
|
|
1301
1322
|
});
|
|
1302
|
-
await this.addProposeTx(checkpoint, proposeTxArgs, opts
|
|
1323
|
+
await this.addProposeTx(checkpoint, proposeTxArgs, opts);
|
|
1303
1324
|
}
|
|
1304
1325
|
enqueueInvalidateCheckpoint(request, opts = {}) {
|
|
1305
1326
|
if (!request) {
|
|
@@ -1340,7 +1361,8 @@ export class SequencerPublisher {
|
|
|
1340
1361
|
}
|
|
1341
1362
|
});
|
|
1342
1363
|
}
|
|
1343
|
-
async simulateAndEnqueueRequest(action, request, checkSuccess, slotNumber
|
|
1364
|
+
async simulateAndEnqueueRequest(action, request, checkSuccess, slotNumber) {
|
|
1365
|
+
const timestamp = this.getSimulationTimestamp(slotNumber);
|
|
1344
1366
|
const logData = {
|
|
1345
1367
|
slotNumber,
|
|
1346
1368
|
timestamp,
|
|
@@ -1362,7 +1384,7 @@ export class SequencerPublisher {
|
|
|
1362
1384
|
try {
|
|
1363
1385
|
({ gasUsed } = await this.l1TxUtils.simulate(request, {
|
|
1364
1386
|
time: timestamp
|
|
1365
|
-
}, [], simulateAbi));
|
|
1387
|
+
}, [], simulateAbi));
|
|
1366
1388
|
this.log.verbose(`Simulation for ${action} succeeded`, {
|
|
1367
1389
|
...logData,
|
|
1368
1390
|
request,
|
|
@@ -1437,13 +1459,14 @@ export class SequencerPublisher {
|
|
|
1437
1459
|
* A call to `restart` is required before you can continue publishing.
|
|
1438
1460
|
*/ interrupt() {
|
|
1439
1461
|
this.interrupted = true;
|
|
1462
|
+
this.interruptibleSleep.interrupt();
|
|
1440
1463
|
this.l1TxUtils.interrupt();
|
|
1441
1464
|
}
|
|
1442
1465
|
/** Restarts the publisher after calling `interrupt`. */ restart() {
|
|
1443
1466
|
this.interrupted = false;
|
|
1444
1467
|
this.l1TxUtils.restart();
|
|
1445
1468
|
}
|
|
1446
|
-
async prepareProposeTx(encodedData,
|
|
1469
|
+
async prepareProposeTx(encodedData, options) {
|
|
1447
1470
|
const kzg = Blob.getViemKzgInstance();
|
|
1448
1471
|
const blobInput = getPrefixedEthBlobCommitments(encodedData.blobs);
|
|
1449
1472
|
this.log.debug('Validating blob input', {
|
|
@@ -1520,7 +1543,7 @@ export class SequencerPublisher {
|
|
|
1520
1543
|
encodedData.attestationsAndSignersSignature.toViemSignature(),
|
|
1521
1544
|
blobInput
|
|
1522
1545
|
];
|
|
1523
|
-
const { rollupData, simulationResult } = await this.simulateProposeTx(args,
|
|
1546
|
+
const { rollupData, simulationResult } = await this.simulateProposeTx(args, options);
|
|
1524
1547
|
return {
|
|
1525
1548
|
args,
|
|
1526
1549
|
blobEvaluationGas,
|
|
@@ -1531,16 +1554,17 @@ export class SequencerPublisher {
|
|
|
1531
1554
|
/**
|
|
1532
1555
|
* Simulates the propose tx with eth_simulateV1
|
|
1533
1556
|
* @param args - The propose tx args
|
|
1534
|
-
* @param timestamp - The timestamp to simulate proposal at
|
|
1535
1557
|
* @returns The simulation result
|
|
1536
|
-
*/ async simulateProposeTx(args,
|
|
1558
|
+
*/ async simulateProposeTx(args, options) {
|
|
1537
1559
|
const rollupData = encodeFunctionData({
|
|
1538
1560
|
abi: RollupAbi,
|
|
1539
1561
|
functionName: 'propose',
|
|
1540
1562
|
args
|
|
1541
1563
|
});
|
|
1542
|
-
// override the
|
|
1564
|
+
// override the proposed checkpoint number if requested
|
|
1543
1565
|
const forcePendingCheckpointNumberStateDiff = (options.forcePendingCheckpointNumber !== undefined ? await this.rollupContract.makePendingCheckpointNumberOverride(options.forcePendingCheckpointNumber) : []).flatMap((override)=>override.stateDiff ?? []);
|
|
1566
|
+
// override the fee header for a specific checkpoint number if requested (used when pipelining)
|
|
1567
|
+
const forceProposedFeeHeaderStateDiff = (options.forceProposedFeeHeader !== undefined ? await this.rollupContract.makeFeeHeaderOverride(options.forceProposedFeeHeader.checkpointNumber, options.forceProposedFeeHeader.feeHeader) : []).flatMap((override)=>override.stateDiff ?? []);
|
|
1544
1568
|
const stateOverrides = [
|
|
1545
1569
|
{
|
|
1546
1570
|
address: this.rollupContract.address,
|
|
@@ -1550,7 +1574,8 @@ export class SequencerPublisher {
|
|
|
1550
1574
|
slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
|
|
1551
1575
|
value: toPaddedHex(0n, true)
|
|
1552
1576
|
},
|
|
1553
|
-
...forcePendingCheckpointNumberStateDiff
|
|
1577
|
+
...forcePendingCheckpointNumberStateDiff,
|
|
1578
|
+
...forceProposedFeeHeaderStateDiff
|
|
1554
1579
|
]
|
|
1555
1580
|
}
|
|
1556
1581
|
];
|
|
@@ -1562,6 +1587,7 @@ export class SequencerPublisher {
|
|
|
1562
1587
|
});
|
|
1563
1588
|
}
|
|
1564
1589
|
const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
|
|
1590
|
+
const simTs = this.getSimulationTimestamp(SlotNumber.fromBigInt(args[0].header.slotNumber));
|
|
1565
1591
|
const simulationResult = await this.l1TxUtils.simulate({
|
|
1566
1592
|
to: this.rollupContract.address,
|
|
1567
1593
|
data: rollupData,
|
|
@@ -1570,8 +1596,7 @@ export class SequencerPublisher {
|
|
|
1570
1596
|
from: this.proposerAddressForSimulation.toString()
|
|
1571
1597
|
}
|
|
1572
1598
|
}, {
|
|
1573
|
-
|
|
1574
|
-
time: timestamp + 1n,
|
|
1599
|
+
time: simTs,
|
|
1575
1600
|
// @note reth should have a 30m gas limit per block but throws errors that this tx is beyond limit so we increase here
|
|
1576
1601
|
gasLimit: MAX_L1_TX_LIMIT * 2n
|
|
1577
1602
|
}, stateOverrides, RollupAbi, {
|
|
@@ -1588,7 +1613,9 @@ export class SequencerPublisher {
|
|
|
1588
1613
|
logs: []
|
|
1589
1614
|
};
|
|
1590
1615
|
}
|
|
1591
|
-
this.log.error(`Failed to simulate propose tx`, viemError
|
|
1616
|
+
this.log.error(`Failed to simulate propose tx`, viemError, {
|
|
1617
|
+
simulationTimestamp: simTs
|
|
1618
|
+
});
|
|
1592
1619
|
this.backupFailedTx({
|
|
1593
1620
|
id: keccak256(rollupData),
|
|
1594
1621
|
failureType: 'simulation',
|
|
@@ -1616,11 +1643,11 @@ export class SequencerPublisher {
|
|
|
1616
1643
|
simulationResult
|
|
1617
1644
|
};
|
|
1618
1645
|
}
|
|
1619
|
-
async addProposeTx(checkpoint, encodedData, opts = {}
|
|
1646
|
+
async addProposeTx(checkpoint, encodedData, opts = {}) {
|
|
1620
1647
|
const slot = checkpoint.header.slotNumber;
|
|
1621
1648
|
const timer = new Timer();
|
|
1622
1649
|
const kzg = Blob.getViemKzgInstance();
|
|
1623
|
-
const { rollupData, simulationResult, blobEvaluationGas } = await this.prepareProposeTx(encodedData,
|
|
1650
|
+
const { rollupData, simulationResult, blobEvaluationGas } = await this.prepareProposeTx(encodedData, opts);
|
|
1624
1651
|
const startBlock = await this.l1TxUtils.getBlockNumber();
|
|
1625
1652
|
const gasLimit = this.l1TxUtils.bumpGasLimit(BigInt(Math.ceil(Number(simulationResult.gasUsed) * 64 / 63)) + blobEvaluationGas + SequencerPublisher.MULTICALL_OVERHEAD_GAS_GUESS);
|
|
1626
1653
|
// Send the blobs to the blob client preemptively. This helps in tests where the sequencer mistakingly thinks that the propose
|
|
@@ -1685,7 +1712,12 @@ export class SequencerPublisher {
|
|
|
1685
1712
|
}
|
|
1686
1713
|
});
|
|
1687
1714
|
}
|
|
1688
|
-
/** Returns the timestamp
|
|
1715
|
+
/** Returns the timestamp of the last L1 slot within a given L2 slot. Used as the simulation timestamp
|
|
1716
|
+
* for eth_simulateV1 calls, since it's guaranteed to be greater than any L1 block produced during the slot. */ getSimulationTimestamp(slot) {
|
|
1717
|
+
const l1Constants = this.epochCache.getL1Constants();
|
|
1718
|
+
return getLastL1SlotTimestampForL2Slot(slot, l1Constants);
|
|
1719
|
+
}
|
|
1720
|
+
/** Returns the timestamp of the next L1 slot boundary after now. */ getNextL1SlotTimestamp() {
|
|
1689
1721
|
const l1Constants = this.epochCache.getL1Constants();
|
|
1690
1722
|
return getNextL1SlotTimestamp(this.dateProvider.nowInSeconds(), l1Constants);
|
|
1691
1723
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
|
+
import { type FeeHeader } from '@aztec/ethereum/contracts';
|
|
2
3
|
import { BlockNumber, CheckpointNumber, EpochNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
5
|
import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
|
|
@@ -7,7 +8,7 @@ import { type TypedEventEmitter } from '@aztec/foundation/types';
|
|
|
7
8
|
import type { P2P } from '@aztec/p2p';
|
|
8
9
|
import type { SlasherClientInterface } from '@aztec/slasher';
|
|
9
10
|
import { L2Block, type L2BlockSink, type L2BlockSource } from '@aztec/stdlib/block';
|
|
10
|
-
import { type Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
11
|
+
import { type Checkpoint, type ProposedCheckpointData } from '@aztec/stdlib/checkpoint';
|
|
11
12
|
import { type ResolvedSequencerConfig, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
12
13
|
import { type L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
13
14
|
import { Tx } from '@aztec/stdlib/tx';
|
|
@@ -29,7 +30,6 @@ import { SequencerState } from './utils.js';
|
|
|
29
30
|
export declare class CheckpointProposalJob implements Traceable {
|
|
30
31
|
private readonly slotNow;
|
|
31
32
|
private readonly targetSlot;
|
|
32
|
-
private readonly epochNow;
|
|
33
33
|
private readonly targetEpoch;
|
|
34
34
|
private readonly checkpointNumber;
|
|
35
35
|
private readonly syncedToBlockNumber;
|
|
@@ -55,17 +55,23 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
55
55
|
private readonly eventEmitter;
|
|
56
56
|
private readonly setStateFn;
|
|
57
57
|
readonly tracer: Tracer;
|
|
58
|
+
private readonly proposedCheckpointData?;
|
|
58
59
|
protected readonly log: Logger;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
/** Tracks the fire-and-forget L1 submission promise so it can be awaited during shutdown. */
|
|
61
|
+
private pendingL1Submission;
|
|
62
|
+
/** Fee header override computed during proposeCheckpoint, reused in enqueueCheckpointForSubmission. */
|
|
63
|
+
private computedForceProposedFeeHeader?;
|
|
64
|
+
constructor(slotNow: SlotNumber, targetSlot: SlotNumber, 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, proposedCheckpointData?: ProposedCheckpointData | undefined);
|
|
65
|
+
/** Awaits the pending L1 submission if one is in progress. Call during shutdown. */
|
|
66
|
+
awaitPendingSubmission(): Promise<void>;
|
|
64
67
|
/**
|
|
65
68
|
* Executes the checkpoint proposal job.
|
|
66
|
-
*
|
|
69
|
+
* Builds blocks, collects attestations, enqueues requests, and schedules L1 submission as a
|
|
70
|
+
* background task so the work loop can return to IDLE immediately.
|
|
71
|
+
* Returns the built checkpoint if successful, undefined otherwise.
|
|
67
72
|
*/
|
|
68
73
|
execute(): Promise<Checkpoint | undefined>;
|
|
74
|
+
private enqueueCheckpointForSubmission;
|
|
69
75
|
private proposeCheckpoint;
|
|
70
76
|
private buildBlocksForCheckpoint;
|
|
71
77
|
/** Creates a block proposal for a given block via the validator client (unless in fisherman mode) */
|
|
@@ -97,6 +103,19 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
97
103
|
* Helper to handle HA double-signing errors. Returns true if the error was handled (caller should yield).
|
|
98
104
|
*/
|
|
99
105
|
private handleHASigningError;
|
|
106
|
+
/**
|
|
107
|
+
* In times of congestion we need to simulate using the correct fee header override for the previous block
|
|
108
|
+
* We calculate the correct fee header values.
|
|
109
|
+
*
|
|
110
|
+
* If we are in block 1, or the checkpoint we are querying does not exist, we return undefined. However
|
|
111
|
+
* If we are pipelining - where this function is called, the grandparentCheckpointNumber should always exist
|
|
112
|
+
* @param parentCheckpointNumber
|
|
113
|
+
* @returns
|
|
114
|
+
*/
|
|
115
|
+
protected computeForceProposedFeeHeader(parentCheckpointNumber: CheckpointNumber): Promise<{
|
|
116
|
+
checkpointNumber: CheckpointNumber;
|
|
117
|
+
feeHeader: FeeHeader;
|
|
118
|
+
} | undefined>;
|
|
100
119
|
/** Waits until a specific time within the current slot */
|
|
101
120
|
protected waitUntilTimeInSlot(targetSecondsIntoSlot: number): Promise<void>;
|
|
102
121
|
/** Waits the polling interval for transactions. Extracted for test overriding. */
|
|
@@ -105,4 +124,4 @@ export declare class CheckpointProposalJob implements Traceable {
|
|
|
105
124
|
private getSecondsIntoSlot;
|
|
106
125
|
getPublisher(): SequencerPublisher;
|
|
107
126
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF9qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvY2hlY2twb2ludF9wcm9wb3NhbF9qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFrQixNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsVUFBVSxFQUNYLE1BQU0saUNBQWlDLENBQUM7QUFRekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBMEIsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RixPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBR0wsT0FBTyxFQUNQLEtBQUssV0FBVyxFQUNoQixLQUFLLGFBQWEsRUFFbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUUsS0FBSyxzQkFBc0IsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RyxPQUFPLEVBR0wsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxzQkFBc0IsRUFDNUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztB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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;
|
|
1
|
+
{"version":3,"file":"checkpoint_proposal_job.d.ts","sourceRoot":"","sources":["../../src/sequencer/checkpoint_proposal_job.ts"],"names":[],"mappings":"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"}
|