@aztec/sequencer-client 0.76.4 → 0.77.0-testnet-ignition.21

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.
Files changed (87) hide show
  1. package/dest/client/index.js +0 -1
  2. package/dest/client/sequencer-client.d.ts +12 -9
  3. package/dest/client/sequencer-client.d.ts.map +1 -1
  4. package/dest/client/sequencer-client.js +55 -60
  5. package/dest/config.d.ts +2 -2
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +41 -46
  8. package/dest/global_variable_builder/global_builder.d.ts +5 -2
  9. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  10. package/dest/global_variable_builder/global_builder.js +45 -31
  11. package/dest/global_variable_builder/index.js +0 -1
  12. package/dest/index.js +0 -1
  13. package/dest/publisher/config.d.ts.map +1 -1
  14. package/dest/publisher/config.js +33 -48
  15. package/dest/publisher/index.js +0 -1
  16. package/dest/publisher/sequencer-publisher-metrics.d.ts +5 -2
  17. package/dest/publisher/sequencer-publisher-metrics.d.ts.map +1 -1
  18. package/dest/publisher/sequencer-publisher-metrics.js +47 -23
  19. package/dest/publisher/sequencer-publisher.d.ts +10 -9
  20. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  21. package/dest/publisher/sequencer-publisher.js +191 -160
  22. package/dest/sequencer/allowed.d.ts +1 -1
  23. package/dest/sequencer/allowed.d.ts.map +1 -1
  24. package/dest/sequencer/allowed.js +6 -13
  25. package/dest/sequencer/config.d.ts +1 -1
  26. package/dest/sequencer/config.d.ts.map +1 -1
  27. package/dest/sequencer/config.js +1 -2
  28. package/dest/sequencer/index.js +0 -1
  29. package/dest/sequencer/metrics.js +26 -18
  30. package/dest/sequencer/sequencer.d.ts +18 -12
  31. package/dest/sequencer/sequencer.d.ts.map +1 -1
  32. package/dest/sequencer/sequencer.js +589 -560
  33. package/dest/sequencer/timetable.d.ts +1 -1
  34. package/dest/sequencer/timetable.d.ts.map +1 -1
  35. package/dest/sequencer/timetable.js +33 -19
  36. package/dest/sequencer/utils.d.ts +2 -2
  37. package/dest/sequencer/utils.d.ts.map +1 -1
  38. package/dest/sequencer/utils.js +22 -32
  39. package/dest/slasher/factory.d.ts +4 -8
  40. package/dest/slasher/factory.d.ts.map +1 -1
  41. package/dest/slasher/factory.js +5 -7
  42. package/dest/slasher/index.js +0 -1
  43. package/dest/slasher/slasher_client.d.ts +10 -62
  44. package/dest/slasher/slasher_client.d.ts.map +1 -1
  45. package/dest/slasher/slasher_client.js +47 -231
  46. package/dest/test/index.d.ts +3 -3
  47. package/dest/test/index.d.ts.map +1 -1
  48. package/dest/test/index.js +4 -1
  49. package/dest/tx_validator/archive_cache.d.ts +3 -3
  50. package/dest/tx_validator/archive_cache.d.ts.map +1 -1
  51. package/dest/tx_validator/archive_cache.js +8 -8
  52. package/dest/tx_validator/gas_validator.d.ts +5 -3
  53. package/dest/tx_validator/gas_validator.d.ts.map +1 -1
  54. package/dest/tx_validator/gas_validator.js +70 -70
  55. package/dest/tx_validator/nullifier_cache.d.ts +2 -2
  56. package/dest/tx_validator/nullifier_cache.d.ts.map +1 -1
  57. package/dest/tx_validator/nullifier_cache.js +9 -9
  58. package/dest/tx_validator/phases_validator.d.ts +3 -2
  59. package/dest/tx_validator/phases_validator.d.ts.map +1 -1
  60. package/dest/tx_validator/phases_validator.js +29 -21
  61. package/dest/tx_validator/test_utils.d.ts +4 -2
  62. package/dest/tx_validator/test_utils.d.ts.map +1 -1
  63. package/dest/tx_validator/test_utils.js +2 -3
  64. package/dest/tx_validator/tx_validator_factory.d.ts +7 -5
  65. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
  66. package/dest/tx_validator/tx_validator_factory.js +14 -13
  67. package/package.json +28 -29
  68. package/src/client/sequencer-client.ts +17 -14
  69. package/src/config.ts +6 -14
  70. package/src/global_variable_builder/global_builder.ts +18 -19
  71. package/src/publisher/config.ts +9 -17
  72. package/src/publisher/sequencer-publisher-metrics.ts +23 -2
  73. package/src/publisher/sequencer-publisher.ts +15 -17
  74. package/src/sequencer/allowed.ts +4 -4
  75. package/src/sequencer/config.ts +1 -1
  76. package/src/sequencer/sequencer.ts +40 -35
  77. package/src/sequencer/timetable.ts +1 -1
  78. package/src/sequencer/utils.ts +2 -2
  79. package/src/slasher/factory.ts +7 -13
  80. package/src/slasher/slasher_client.ts +30 -252
  81. package/src/test/index.ts +3 -3
  82. package/src/tx_validator/archive_cache.ts +4 -3
  83. package/src/tx_validator/gas_validator.ts +22 -31
  84. package/src/tx_validator/nullifier_cache.ts +3 -2
  85. package/src/tx_validator/phases_validator.ts +8 -8
  86. package/src/tx_validator/test_utils.ts +5 -3
  87. package/src/tx_validator/tx_validator_factory.ts +23 -17
@@ -1,34 +1,49 @@
1
1
  import { Blob } from '@aztec/blob-lib';
2
2
  import { createBlobSinkClient } from '@aztec/blob-sink/client';
3
- import { ConsensusPayload, SignatureDomainSeparator, getHashedSignaturePayload, } from '@aztec/circuit-types';
4
- import { EthAddress } from '@aztec/circuits.js';
5
- import { FormattedViemError, RollupContract, formatViemError, } from '@aztec/ethereum';
3
+ import { FormattedViemError, RollupContract, formatViemError } from '@aztec/ethereum';
6
4
  import { toHex } from '@aztec/foundation/bigint-buffer';
5
+ import { EthAddress } from '@aztec/foundation/eth-address';
7
6
  import { createLogger } from '@aztec/foundation/log';
8
7
  import { Timer } from '@aztec/foundation/timer';
9
8
  import { ForwarderAbi, RollupAbi } from '@aztec/l1-artifacts';
9
+ import { ConsensusPayload, SignatureDomainSeparator, getHashedSignaturePayload } from '@aztec/stdlib/p2p';
10
10
  import { getTelemetryClient } from '@aztec/telemetry-client';
11
11
  import pick from 'lodash.pick';
12
12
  import { encodeFunctionData } from 'viem';
13
13
  import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
14
- export var VoteType;
15
- (function (VoteType) {
14
+ export var VoteType = /*#__PURE__*/ function(VoteType) {
16
15
  VoteType[VoteType["GOVERNANCE"] = 0] = "GOVERNANCE";
17
16
  VoteType[VoteType["SLASHING"] = 1] = "SLASHING";
18
- })(VoteType || (VoteType = {}));
17
+ return VoteType;
18
+ }({});
19
19
  export class SequencerPublisher {
20
- constructor(config, deps) {
21
- this.interrupted = false;
22
- this.governanceLog = createLogger('sequencer:publisher:governance');
23
- this.governancePayload = EthAddress.ZERO;
24
- this.slashingLog = createLogger('sequencer:publisher:slashing');
25
- this.getSlashPayload = undefined;
26
- this.myLastVotes = {
27
- [VoteType.GOVERNANCE]: 0n,
28
- [VoteType.SLASHING]: 0n,
29
- };
30
- this.log = createLogger('sequencer:publisher');
31
- this.requests = [];
20
+ interrupted = false;
21
+ metrics;
22
+ epochCache;
23
+ forwarderContract;
24
+ governanceLog = createLogger('sequencer:publisher:governance');
25
+ governanceProposerAddress;
26
+ governancePayload = EthAddress.ZERO;
27
+ slashingLog = createLogger('sequencer:publisher:slashing');
28
+ slashingProposerAddress;
29
+ getSlashPayload = undefined;
30
+ myLastVotes = {
31
+ [0]: 0n,
32
+ [1]: 0n
33
+ };
34
+ log = createLogger('sequencer:publisher');
35
+ ethereumSlotDuration;
36
+ blobSinkClient;
37
+ // @note - with blobs, the below estimate seems too large.
38
+ // Total used for full block from int_l1_pub e2e test: 1m (of which 86k is 1x blob)
39
+ // Total used for emptier block from above test: 429k (of which 84k is 1x blob)
40
+ static PROPOSE_GAS_GUESS = 12_000_000n;
41
+ l1TxUtils;
42
+ rollupContract;
43
+ govProposerContract;
44
+ slashingProposerContract;
45
+ requests = [];
46
+ constructor(config, deps){
32
47
  this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
33
48
  this.epochCache = deps.epochCache;
34
49
  this.blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config);
@@ -62,31 +77,32 @@ export class SequencerPublisher {
62
77
  return this.epochCache.getEpochAndSlotNow().slot;
63
78
  }
64
79
  /**
65
- * Sends all requests that are still valid.
66
- * @returns one of:
67
- * - A receipt and stats if the tx succeeded
68
- * - a receipt and errorMsg if it failed on L1
69
- * - undefined if no valid requests are found OR the tx failed to send.
70
- */
71
- async sendRequests() {
72
- const requestsToProcess = [...this.requests];
80
+ * Sends all requests that are still valid.
81
+ * @returns one of:
82
+ * - A receipt and stats if the tx succeeded
83
+ * - a receipt and errorMsg if it failed on L1
84
+ * - undefined if no valid requests are found OR the tx failed to send.
85
+ */ async sendRequests() {
86
+ const requestsToProcess = [
87
+ ...this.requests
88
+ ];
73
89
  this.requests = [];
74
90
  if (this.interrupted) {
75
91
  return undefined;
76
92
  }
77
93
  const currentL2Slot = this.getCurrentL2Slot();
78
94
  this.log.debug(`Current L2 slot: ${currentL2Slot}`);
79
- const validRequests = requestsToProcess.filter(request => request.lastValidL2Slot >= currentL2Slot);
95
+ const validRequests = requestsToProcess.filter((request)=>request.lastValidL2Slot >= currentL2Slot);
80
96
  if (validRequests.length !== requestsToProcess.length) {
81
97
  this.log.warn(`Some requests were expired for slot ${currentL2Slot}`, {
82
- validRequests: validRequests.map(request => ({
83
- action: request.action,
84
- lastValidL2Slot: request.lastValidL2Slot,
85
- })),
86
- requests: requestsToProcess.map(request => ({
87
- action: request.action,
88
- lastValidL2Slot: request.lastValidL2Slot,
89
- })),
98
+ validRequests: validRequests.map((request)=>({
99
+ action: request.action,
100
+ lastValidL2Slot: request.lastValidL2Slot
101
+ })),
102
+ requests: requestsToProcess.map((request)=>({
103
+ action: request.action,
104
+ lastValidL2Slot: request.lastValidL2Slot
105
+ }))
90
106
  });
91
107
  }
92
108
  if (validRequests.length === 0) {
@@ -96,8 +112,8 @@ export class SequencerPublisher {
96
112
  // @note - we can only have one gas config and one blob config per bundle
97
113
  // find requests with gas and blob configs
98
114
  // See https://github.com/AztecProtocol/aztec-packages/issues/11513
99
- const gasConfigs = requestsToProcess.filter(request => request.gasConfig);
100
- const blobConfigs = requestsToProcess.filter(request => request.blobConfig);
115
+ const gasConfigs = requestsToProcess.filter((request)=>request.gasConfig);
116
+ const blobConfigs = requestsToProcess.filter((request)=>request.blobConfig);
101
117
  if (gasConfigs.length > 1 || blobConfigs.length > 1) {
102
118
  throw new Error('Multiple gas or blob configs found');
103
119
  }
@@ -105,68 +121,75 @@ export class SequencerPublisher {
105
121
  const blobConfig = blobConfigs[0]?.blobConfig;
106
122
  try {
107
123
  this.log.debug('Forwarding transactions', {
108
- validRequests: validRequests.map(request => request.action),
124
+ validRequests: validRequests.map((request)=>request.action)
109
125
  });
110
- const result = await this.forwarderContract.forward(validRequests.map(request => request.request), this.l1TxUtils, gasConfig, blobConfig, this.log);
126
+ const result = await this.forwarderContract.forward(validRequests.map((request)=>request.request), this.l1TxUtils, gasConfig, blobConfig, this.log);
111
127
  this.callbackBundledTransactions(validRequests, result);
112
128
  return result;
113
- }
114
- catch (err) {
129
+ } catch (err) {
115
130
  const viemError = formatViemError(err);
116
131
  this.log.error(`Failed to publish bundled transactions`, viemError);
117
132
  return undefined;
133
+ } finally{
134
+ try {
135
+ this.metrics.recordSenderBalance(await this.l1TxUtils.getSenderBalance(), this.l1TxUtils.getSenderAddress());
136
+ } catch (err) {
137
+ this.log.warn(`Failed to record balance after sending tx: ${err}`);
138
+ }
118
139
  }
119
140
  }
120
141
  callbackBundledTransactions(requests, result) {
121
142
  const success = result?.receipt.status === 'success';
122
143
  const logger = success ? this.log.info : this.log.error;
123
- for (const request of requests) {
144
+ for (const request of requests){
124
145
  logger(`Bundled [${request.action}] transaction [${success ? 'succeeded' : 'failed'}]`);
125
146
  request.onResult?.(request.request, result);
126
147
  }
127
148
  }
128
149
  /**
129
- * @notice Will call `canProposeAtNextEthBlock` to make sure that it is possible to propose
130
- * @param tipArchive - The archive to check
131
- * @returns The slot and block number if it is possible to propose, undefined otherwise
132
- */
133
- canProposeAtNextEthBlock(tipArchive) {
134
- const ignoredErrors = ['SlotAlreadyInChain', 'InvalidProposer', 'InvalidArchive'];
135
- return this.rollupContract
136
- .canProposeAtNextEthBlock(tipArchive, this.getForwarderAddress().toString(), this.ethereumSlotDuration)
137
- .catch(err => {
138
- if (err instanceof FormattedViemError && ignoredErrors.find(e => err.message.includes(e))) {
150
+ * @notice Will call `canProposeAtNextEthBlock` to make sure that it is possible to propose
151
+ * @param tipArchive - The archive to check
152
+ * @returns The slot and block number if it is possible to propose, undefined otherwise
153
+ */ canProposeAtNextEthBlock(tipArchive) {
154
+ const ignoredErrors = [
155
+ 'SlotAlreadyInChain',
156
+ 'InvalidProposer',
157
+ 'InvalidArchive'
158
+ ];
159
+ return this.rollupContract.canProposeAtNextEthBlock(tipArchive, this.getForwarderAddress().toString(), this.ethereumSlotDuration).catch((err)=>{
160
+ if (err instanceof FormattedViemError && ignoredErrors.find((e)=>err.message.includes(e))) {
139
161
  this.log.debug(err.message);
140
- }
141
- else {
162
+ } else {
142
163
  this.log.error(err.name, err);
143
164
  }
144
165
  return undefined;
145
166
  });
146
167
  }
147
168
  /**
148
- * @notice Will call `validateHeader` to make sure that it is possible to propose
149
- *
150
- * @dev Throws if unable to propose
151
- *
152
- * @param header - The header to propose
153
- * @param digest - The digest that attestations are signing over
154
- *
155
- */
156
- async validateBlockForSubmission(header, attestationData = {
169
+ * @notice Will call `validateHeader` to make sure that it is possible to propose
170
+ *
171
+ * @dev Throws if unable to propose
172
+ *
173
+ * @param header - The header to propose
174
+ * @param digest - The digest that attestations are signing over
175
+ *
176
+ */ async validateBlockForSubmission(header, attestationData = {
157
177
  digest: Buffer.alloc(32),
158
- signatures: [],
178
+ signatures: []
159
179
  }) {
160
180
  const ts = BigInt((await this.l1TxUtils.getBlock()).timestamp + this.ethereumSlotDuration);
161
- const formattedSignatures = attestationData.signatures.map(attest => attest.toViemSignature());
162
- const flags = { ignoreDA: true, ignoreSignatures: formattedSignatures.length == 0 };
181
+ const formattedSignatures = attestationData.signatures.map((attest)=>attest.toViemSignature());
182
+ const flags = {
183
+ ignoreDA: true,
184
+ ignoreSignatures: formattedSignatures.length == 0
185
+ };
163
186
  const args = [
164
187
  `0x${header.toBuffer().toString('hex')}`,
165
188
  formattedSignatures,
166
189
  `0x${attestationData.digest.toString('hex')}`,
167
190
  ts,
168
191
  `0x${header.contentCommitment.blobsHash.toString('hex')}`,
169
- flags,
192
+ flags
170
193
  ];
171
194
  await this.rollupContract.validateHeader(args, this.getForwarderAddress().toString());
172
195
  return ts;
@@ -185,7 +208,7 @@ export class SequencerPublisher {
185
208
  const round = await base.computeRound(slotNumber);
186
209
  const [proposer, roundInfo] = await Promise.all([
187
210
  this.rollupContract.getProposerAt(timestamp),
188
- base.getRoundInfo(this.rollupContract.address, round),
211
+ base.getRoundInfo(this.rollupContract.address, round)
189
212
  ]);
190
213
  if (proposer.toLowerCase() !== this.getForwarderAddress().toString().toLowerCase()) {
191
214
  return false;
@@ -196,25 +219,26 @@ export class SequencerPublisher {
196
219
  const cachedLastVote = this.myLastVotes[voteType];
197
220
  this.myLastVotes[voteType] = slotNumber;
198
221
  this.addRequest({
199
- action: voteType === VoteType.GOVERNANCE ? 'governance-vote' : 'slashing-vote',
222
+ action: voteType === 0 ? 'governance-vote' : 'slashing-vote',
200
223
  request: base.createVoteRequest(payload.toString()),
201
224
  lastValidL2Slot: slotNumber,
202
- onResult: (_request, result) => {
225
+ onResult: (_request, result)=>{
203
226
  if (!result || result.receipt.status !== 'success') {
204
227
  this.myLastVotes[voteType] = cachedLastVote;
205
- }
206
- else {
228
+ } else {
207
229
  this.log.info(`Cast [${voteType}] vote for slot ${slotNumber}`);
208
230
  }
209
- },
231
+ }
210
232
  });
211
233
  return true;
212
234
  }
213
235
  async getVoteConfig(slotNumber, voteType) {
214
- if (voteType === VoteType.GOVERNANCE) {
215
- return { payload: this.governancePayload, base: this.govProposerContract };
216
- }
217
- else if (voteType === VoteType.SLASHING) {
236
+ if (voteType === 0) {
237
+ return {
238
+ payload: this.governancePayload,
239
+ base: this.govProposerContract
240
+ };
241
+ } else if (voteType === 1) {
218
242
  if (!this.getSlashPayload) {
219
243
  return undefined;
220
244
  }
@@ -222,18 +246,20 @@ export class SequencerPublisher {
222
246
  if (!slashPayload) {
223
247
  return undefined;
224
248
  }
225
- return { payload: slashPayload, base: this.slashingProposerContract };
249
+ return {
250
+ payload: slashPayload,
251
+ base: this.slashingProposerContract
252
+ };
226
253
  }
227
254
  throw new Error('Unreachable: Invalid vote type');
228
255
  }
229
256
  /**
230
- * Enqueues a castVote transaction to cast a vote for a given slot number.
231
- * @param slotNumber - The slot number to cast a vote for.
232
- * @param timestamp - The timestamp of the slot to cast a vote for.
233
- * @param voteType - The type of vote to cast.
234
- * @returns True if the vote was successfully enqueued, false otherwise.
235
- */
236
- async enqueueCastVote(slotNumber, timestamp, voteType) {
257
+ * Enqueues a castVote transaction to cast a vote for a given slot number.
258
+ * @param slotNumber - The slot number to cast a vote for.
259
+ * @param timestamp - The timestamp of the slot to cast a vote for.
260
+ * @param voteType - The type of vote to cast.
261
+ * @returns True if the vote was successfully enqueued, false otherwise.
262
+ */ async enqueueCastVote(slotNumber, timestamp, voteType) {
237
263
  const voteConfig = await this.getVoteConfig(slotNumber, voteType);
238
264
  if (!voteConfig) {
239
265
  return false;
@@ -242,12 +268,11 @@ export class SequencerPublisher {
242
268
  return this.enqueueCastVoteHelper(slotNumber, timestamp, voteType, payload, base);
243
269
  }
244
270
  /**
245
- * Proposes a L2 block on L1.
246
- *
247
- * @param block - L2 block to propose.
248
- * @returns True if the tx has been enqueued, throws otherwise. See #9315
249
- */
250
- async enqueueProposeL2Block(block, attestations, txHashes, opts = {}) {
271
+ * Proposes a L2 block on L1.
272
+ *
273
+ * @param block - L2 block to propose.
274
+ * @returns True if the tx has been enqueued, throws otherwise. See #9315
275
+ */ async enqueueProposeL2Block(block, attestations, txHashes, opts = {}) {
251
276
  const consensusPayload = new ConsensusPayload(block.header, block.archive.root, txHashes ?? []);
252
277
  const digest = await getHashedSignaturePayload(consensusPayload, SignatureDomainSeparator.blockAttestation);
253
278
  const blobs = await Blob.getBlobs(block.body.toBlobFields());
@@ -258,7 +283,7 @@ export class SequencerPublisher {
258
283
  body: block.body.toBuffer(),
259
284
  blobs,
260
285
  attestations,
261
- txHashes: txHashes ?? [],
286
+ txHashes: txHashes ?? []
262
287
  };
263
288
  // @note This will make sure that we are passing the checks for our header ASSUMING that the data is also made available
264
289
  // This means that we can avoid the simulation issues in later checks.
@@ -266,88 +291,92 @@ export class SequencerPublisher {
266
291
  // make time consistency checks break.
267
292
  const ts = await this.validateBlockForSubmission(block.header, {
268
293
  digest: digest.toBuffer(),
269
- signatures: attestations ?? [],
294
+ signatures: attestations ?? []
270
295
  });
271
296
  this.log.debug(`Submitting propose transaction`);
272
297
  await this.addProposeTx(block, proposeTxArgs, opts, ts);
273
298
  return true;
274
299
  }
275
300
  /**
276
- * Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
277
- * Be warned, the call may return false even if the tx subsequently gets successfully mined.
278
- * In practice this shouldn't matter, as we'll only ever be calling `interrupt` when we know it's going to fail.
279
- * A call to `restart` is required before you can continue publishing.
280
- */
281
- interrupt() {
301
+ * Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
302
+ * Be warned, the call may return false even if the tx subsequently gets successfully mined.
303
+ * In practice this shouldn't matter, as we'll only ever be calling `interrupt` when we know it's going to fail.
304
+ * A call to `restart` is required before you can continue publishing.
305
+ */ interrupt() {
282
306
  this.interrupted = true;
283
307
  this.l1TxUtils.interrupt();
284
308
  }
285
- /** Restarts the publisher after calling `interrupt`. */
286
- restart() {
309
+ /** Restarts the publisher after calling `interrupt`. */ restart() {
287
310
  this.interrupted = false;
288
311
  this.l1TxUtils.restart();
289
312
  }
290
313
  async prepareProposeTx(encodedData, timestamp) {
291
314
  const kzg = Blob.getViemKzgInstance();
292
315
  const blobInput = Blob.getEthBlobEvaluationInputs(encodedData.blobs);
293
- this.log.debug('Validating blob input', { blobInput });
294
- const blobEvaluationGas = await this.l1TxUtils
295
- .estimateGas(this.l1TxUtils.walletClient.account, {
316
+ this.log.debug('Validating blob input', {
317
+ blobInput
318
+ });
319
+ const blobEvaluationGas = await this.l1TxUtils.estimateGas(this.l1TxUtils.walletClient.account, {
296
320
  to: this.rollupContract.address,
297
321
  data: encodeFunctionData({
298
322
  abi: RollupAbi,
299
323
  functionName: 'validateBlobs',
300
- args: [blobInput],
301
- }),
324
+ args: [
325
+ blobInput
326
+ ]
327
+ })
302
328
  }, {}, {
303
- blobs: encodedData.blobs.map(b => b.data),
304
- kzg,
305
- })
306
- .catch(err => {
329
+ blobs: encodedData.blobs.map((b)=>b.data),
330
+ kzg
331
+ }).catch((err)=>{
307
332
  const { message, metaMessages } = formatViemError(err);
308
- this.log.error(`Failed to validate blobs`, message, { metaMessages });
333
+ this.log.error(`Failed to validate blobs`, message, {
334
+ metaMessages
335
+ });
309
336
  throw new Error('Failed to validate blobs');
310
337
  });
311
- const attestations = encodedData.attestations
312
- ? encodedData.attestations.map(attest => attest.toViemSignature())
313
- : [];
314
- const txHashes = encodedData.txHashes ? encodedData.txHashes.map(txHash => txHash.toString()) : [];
338
+ const attestations = encodedData.attestations ? encodedData.attestations.map((attest)=>attest.toViemSignature()) : [];
339
+ const txHashes = encodedData.txHashes ? encodedData.txHashes.map((txHash)=>txHash.toString()) : [];
315
340
  const args = [
316
341
  {
317
342
  header: `0x${encodedData.header.toString('hex')}`,
318
343
  archive: `0x${encodedData.archive.toString('hex')}`,
319
344
  oracleInput: {
320
345
  // We are currently not modifying these. See #9963
321
- feeAssetPriceModifier: 0n,
346
+ feeAssetPriceModifier: 0n
322
347
  },
323
348
  blockHash: `0x${encodedData.blockHash.toString('hex')}`,
324
- txHashes,
349
+ txHashes
325
350
  },
326
351
  attestations,
327
- // TODO(#9101): Extract blobs from beacon chain => calldata will only contain what's needed to verify blob and body input can be removed
328
- `0x${encodedData.body.toString('hex')}`,
329
- blobInput,
352
+ blobInput
330
353
  ];
331
354
  const rollupData = encodeFunctionData({
332
355
  abi: RollupAbi,
333
356
  functionName: 'propose',
334
- args,
357
+ args
335
358
  });
336
359
  const forwarderData = encodeFunctionData({
337
360
  abi: ForwarderAbi,
338
361
  functionName: 'forward',
339
- args: [[this.rollupContract.address], [rollupData]],
362
+ args: [
363
+ [
364
+ this.rollupContract.address
365
+ ],
366
+ [
367
+ rollupData
368
+ ]
369
+ ]
340
370
  });
341
- const simulationResult = await this.l1TxUtils
342
- .simulateGasUsed({
371
+ const simulationResult = await this.l1TxUtils.simulateGasUsed({
343
372
  to: this.getForwarderAddress().toString(),
344
373
  data: forwarderData,
345
- gas: SequencerPublisher.PROPOSE_GAS_GUESS,
374
+ gas: SequencerPublisher.PROPOSE_GAS_GUESS
346
375
  }, {
347
376
  // @note we add 1n to the timestamp because geth implementation doesn't like simulation timestamp to be equal to the current block timestamp
348
377
  time: timestamp + 1n,
349
378
  // @note reth should have a 30m gas limit per block but throws errors that this tx is beyond limit
350
- gasLimit: SequencerPublisher.PROPOSE_GAS_GUESS * 2n,
379
+ gasLimit: SequencerPublisher.PROPOSE_GAS_GUESS * 2n
351
380
  }, [
352
381
  {
353
382
  address: this.rollupContract.address,
@@ -355,20 +384,26 @@ export class SequencerPublisher {
355
384
  stateDiff: [
356
385
  {
357
386
  slot: toHex(RollupContract.checkBlobStorageSlot, true),
358
- value: toHex(0n, true),
359
- },
360
- ],
361
- },
387
+ value: toHex(0n, true)
388
+ }
389
+ ]
390
+ }
362
391
  ], {
363
392
  // @note fallback gas estimate to use if the node doesn't support simulation API
364
- fallbackGasEstimate: SequencerPublisher.PROPOSE_GAS_GUESS,
365
- })
366
- .catch(err => {
393
+ fallbackGasEstimate: SequencerPublisher.PROPOSE_GAS_GUESS
394
+ }).catch((err)=>{
367
395
  const { message, metaMessages } = formatViemError(err);
368
- this.log.error(`Failed to simulate gas used`, message, { metaMessages });
396
+ this.log.error(`Failed to simulate gas used`, message, {
397
+ metaMessages
398
+ });
369
399
  throw new Error('Failed to simulate gas used');
370
400
  });
371
- return { args, blobEvaluationGas, rollupData, simulationResult };
401
+ return {
402
+ args,
403
+ blobEvaluationGas,
404
+ rollupData,
405
+ simulationResult
406
+ };
372
407
  }
373
408
  async addProposeTx(block, encodedData, opts = {}, timestamp) {
374
409
  const timer = new Timer();
@@ -380,18 +415,18 @@ export class SequencerPublisher {
380
415
  action: 'propose',
381
416
  request: {
382
417
  to: this.rollupContract.address,
383
- data: rollupData,
418
+ data: rollupData
384
419
  },
385
420
  lastValidL2Slot: block.header.globalVariables.slotNumber.toBigInt(),
386
421
  gasConfig: {
387
422
  ...opts,
388
- gasLimit: this.l1TxUtils.bumpGasLimit(simulationResult + blobEvaluationGas),
423
+ gasLimit: this.l1TxUtils.bumpGasLimit(simulationResult + blobEvaluationGas)
389
424
  },
390
425
  blobConfig: {
391
- blobs: encodedData.blobs.map(b => b.data),
392
- kzg,
426
+ blobs: encodedData.blobs.map((b)=>b.data),
427
+ kzg
393
428
  },
394
- onResult: (request, result) => {
429
+ onResult: (request, result)=>{
395
430
  if (!result) {
396
431
  return;
397
432
  }
@@ -409,42 +444,38 @@ export class SequencerPublisher {
409
444
  ...block.getStats(),
410
445
  eventName: 'rollup-published-to-l1',
411
446
  blobCount: encodedData.blobs.length,
412
- inclusionBlocks,
447
+ inclusionBlocks
413
448
  };
414
- this.log.verbose(`Published L2 block to L1 rollup contract`, { ...stats, ...block.getStats() });
449
+ this.log.verbose(`Published L2 block to L1 rollup contract`, {
450
+ ...stats,
451
+ ...block.getStats()
452
+ });
415
453
  this.metrics.recordProcessBlockTx(timer.ms(), publishStats);
416
454
  // Send the blobs to the blob sink
417
- this.sendBlobsToBlobSink(receipt.blockHash, encodedData.blobs).catch(_err => {
455
+ this.sendBlobsToBlobSink(receipt.blockHash, encodedData.blobs).catch((_err)=>{
418
456
  this.log.error('Failed to send blobs to blob sink');
419
457
  });
420
458
  return true;
421
- }
422
- else {
459
+ } else {
423
460
  this.metrics.recordFailedTx('process');
424
461
  this.log.error(`Rollup process tx reverted. ${errorMsg ?? 'No error message'}`, undefined, {
425
462
  ...block.getStats(),
426
463
  txHash: receipt.transactionHash,
427
464
  blockHash,
428
- slotNumber: block.header.globalVariables.slotNumber.toBigInt(),
465
+ slotNumber: block.header.globalVariables.slotNumber.toBigInt()
429
466
  });
430
467
  }
431
- },
468
+ }
432
469
  });
433
470
  }
434
471
  /**
435
- * Send blobs to the blob sink
436
- *
437
- * If a blob sink url is configured, then we send blobs to the blob sink
438
- * - for now we use the blockHash as the identifier for the blobs;
439
- * In the future this will move to be the beacon block id - which takes a bit more work
440
- * to calculate and will need to be mocked in e2e tests
441
- */
442
- sendBlobsToBlobSink(blockHash, blobs) {
472
+ * Send blobs to the blob sink
473
+ *
474
+ * If a blob sink url is configured, then we send blobs to the blob sink
475
+ * - for now we use the blockHash as the identifier for the blobs;
476
+ * In the future this will move to be the beacon block id - which takes a bit more work
477
+ * to calculate and will need to be mocked in e2e tests
478
+ */ sendBlobsToBlobSink(blockHash, blobs) {
443
479
  return this.blobSinkClient.sendBlobsToBlobSink(blockHash, blobs);
444
480
  }
445
481
  }
446
- // @note - with blobs, the below estimate seems too large.
447
- // Total used for full block from int_l1_pub e2e test: 1m (of which 86k is 1x blob)
448
- // Total used for emptier block from above test: 429k (of which 84k is 1x blob)
449
- SequencerPublisher.PROPOSE_GAS_GUESS = 12000000n;
450
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLXB1Ymxpc2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaXNoZXIvc2VxdWVuY2VyLXB1Ymxpc2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFnQyxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdGLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsd0JBQXdCLEVBRXhCLHlCQUF5QixHQUMxQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEUsT0FBTyxFQUNMLGtCQUFrQixFQVNsQixjQUFjLEVBR2QsZUFBZSxHQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUF3QixrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5GLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQTJCLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR25FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBb0I3RSxNQUFNLENBQU4sSUFBWSxRQUdYO0FBSEQsV0FBWSxRQUFRO0lBQ2xCLG1EQUFVLENBQUE7SUFDViwrQ0FBUSxDQUFBO0FBQ1YsQ0FBQyxFQUhXLFFBQVEsS0FBUixRQUFRLFFBR25CO0FBaUJELE1BQU0sT0FBTyxrQkFBa0I7SUFtQzdC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
@@ -1,3 +1,3 @@
1
- import { type AllowedElement } from '@aztec/circuit-types';
1
+ import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
2
2
  export declare function getDefaultAllowedSetupFunctions(): Promise<AllowedElement[]>;
3
3
  //# sourceMappingURL=allowed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"allowed.d.ts","sourceRoot":"","sources":["../../src/sequencer/allowed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CA2BjF"}
1
+ {"version":3,"file":"allowed.d.ts","sourceRoot":"","sources":["../../src/sequencer/allowed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CA2BjF"}