@aztec/sequencer-client 0.66.0 → 0.67.1

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.
@@ -1,14 +1,15 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
- import { Tx, } from '@aztec/circuit-types';
3
- import { AppendOnlyTreeSnapshot, ContentCommitment, GENESIS_ARCHIVE_ROOT, Header, StateReference, } from '@aztec/circuits.js';
2
+ import { SequencerConfigSchema, Tx, } from '@aztec/circuit-types';
3
+ import { AppendOnlyTreeSnapshot, BlockHeader, ContentCommitment, GENESIS_ARCHIVE_ROOT, StateReference, } from '@aztec/circuits.js';
4
4
  import { AztecAddress } from '@aztec/foundation/aztec-address';
5
+ import { omit } from '@aztec/foundation/collection';
5
6
  import { EthAddress } from '@aztec/foundation/eth-address';
6
7
  import { Fr } from '@aztec/foundation/fields';
7
- import { createDebugLogger } from '@aztec/foundation/log';
8
+ import { createLogger } from '@aztec/foundation/log';
8
9
  import { RunningPromise } from '@aztec/foundation/running-promise';
10
+ import { pickFromSchema } from '@aztec/foundation/schemas';
9
11
  import { Timer, elapsed } from '@aztec/foundation/timer';
10
12
  import { Attributes, trackSpan } from '@aztec/telemetry-client';
11
- import { inspect } from 'util';
12
13
  import { prettyLogViemErrorMsg } from '../publisher/utils.js';
13
14
  import { SequencerMetrics } from './metrics.js';
14
15
  import { SequencerState, getSecondsIntoSlot, orderAttestations } from './utils.js';
@@ -39,7 +40,7 @@ let Sequencer = (() => {
39
40
  let _publishL2Block_decorators;
40
41
  return _a = class Sequencer {
41
42
  constructor(publisher, validatorClient, // During migration the validator client can be inactive
42
- globalsBuilder, p2pClient, worldState, blockBuilderFactory, l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, txValidatorFactory, l1GenesisTime, aztecSlotDuration, telemetry, config = {}, log = createDebugLogger('aztec:sequencer')) {
43
+ globalsBuilder, p2pClient, worldState, blockBuilderFactory, l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, txValidatorFactory, l1GenesisTime, aztecSlotDuration, telemetry, config = {}, log = createLogger('sequencer')) {
43
44
  this.publisher = (__runInitializers(this, _instanceExtraInitializers), publisher);
44
45
  this.validatorClient = validatorClient;
45
46
  this.globalsBuilder = globalsBuilder;
@@ -69,7 +70,6 @@ let Sequencer = (() => {
69
70
  this.enforceTimeTable = false;
70
71
  this.updateConfig(config);
71
72
  this.metrics = new SequencerMetrics(telemetry, () => this.state, 'Sequencer');
72
- this.log.verbose(`Initialized sequencer with ${this.minTxsPerBLock}-${this.maxTxsPerBlock} txs per block.`);
73
73
  // Register the block builder with the validator client for re-execution
74
74
  this.validatorClient?.registerBlockBuilder(this.buildBlock.bind(this));
75
75
  }
@@ -81,6 +81,7 @@ let Sequencer = (() => {
81
81
  * @param config - New parameters.
82
82
  */
83
83
  updateConfig(config) {
84
+ this.log.info(`Sequencer config set`, omit(pickFromSchema(this.config, SequencerConfigSchema), 'allowedInSetup', 'allowedInTeardown'));
84
85
  if (config.transactionPollingIntervalMS !== undefined) {
85
86
  this.pollingIntervalMs = config.transactionPollingIntervalMS;
86
87
  }
@@ -138,9 +139,9 @@ let Sequencer = (() => {
138
139
  */
139
140
  start() {
140
141
  this.runningPromise = new RunningPromise(this.work.bind(this), this.pollingIntervalMs);
141
- this.runningPromise.start();
142
142
  this.setState(SequencerState.IDLE, 0n, true /** force */);
143
- this.log.info('Sequencer started');
143
+ this.runningPromise.start();
144
+ this.log.info(`Sequencer started with address ${this.publisher.getSenderAddress().toString()}`);
144
145
  return Promise.resolve();
145
146
  }
146
147
  /**
@@ -148,6 +149,7 @@ let Sequencer = (() => {
148
149
  */
149
150
  async stop() {
150
151
  this.log.debug(`Stopping sequencer`);
152
+ await this.validatorClient?.stop();
151
153
  await this.runningPromise?.stop();
152
154
  this.publisher.interrupt();
153
155
  this.setState(SequencerState.STOPPED, 0n, true /** force */);
@@ -183,10 +185,8 @@ let Sequencer = (() => {
183
185
  const prevBlockSynced = await this.isBlockSynced();
184
186
  // Do not go forward with new block if the previous one has not been mined and processed
185
187
  if (!prevBlockSynced) {
186
- this.log.debug('Previous block has not been mined and processed yet');
187
188
  return;
188
189
  }
189
- this.log.debug('Previous block has been mined and processed');
190
190
  this.setState(SequencerState.PROPOSER_CHECK, 0n);
191
191
  const chainTip = await this.l2BlockSource.getBlock(-1);
192
192
  const historicalHeader = chainTip?.header;
@@ -208,15 +208,19 @@ let Sequencer = (() => {
208
208
  if (!this.shouldProposeBlock(historicalHeader, {})) {
209
209
  return;
210
210
  }
211
+ this.log.verbose(`Preparing proposal for block ${newBlockNumber} at slot ${slot}`, {
212
+ chainTipArchive: new Fr(chainTipArchive),
213
+ blockNumber: newBlockNumber,
214
+ slot,
215
+ });
211
216
  this.setState(SequencerState.WAITING_FOR_TXS, slot);
212
217
  // Get txs to build the new block.
213
- const pendingTxs = this.p2pClient.getTxs('pending');
218
+ const pendingTxs = await this.p2pClient.getPendingTxs();
214
219
  if (!this.shouldProposeBlock(historicalHeader, { pendingTxsCount: pendingTxs.length })) {
215
220
  return;
216
221
  }
217
- this.log.debug(`Retrieved ${pendingTxs.length} txs from P2P pool`);
218
222
  // If I created a "partial" header here that should make our job much easier.
219
- const proposalHeader = new Header(new AppendOnlyTreeSnapshot(Fr.fromBuffer(chainTipArchive), 1), ContentCommitment.empty(), StateReference.empty(), newGlobalVariables, Fr.ZERO, Fr.ZERO);
223
+ const proposalHeader = new BlockHeader(new AppendOnlyTreeSnapshot(Fr.fromBuffer(chainTipArchive), 1), ContentCommitment.empty(), StateReference.empty(), newGlobalVariables, Fr.ZERO, Fr.ZERO);
220
224
  // TODO: It should be responsibility of the P2P layer to validate txs before passing them on here
221
225
  const allValidTxs = await this.takeValidTxs(pendingTxs, this.txValidatorFactory.validatorForNewTxs(newGlobalVariables, this.allowedInSetup));
222
226
  // TODO: We are taking the size of the tx from private-land, but we should be doing this after running
@@ -225,6 +229,7 @@ let Sequencer = (() => {
225
229
  // exceeding max block size in bytes is contract class registration, which happens in private-land. This
226
230
  // may break if we start emitting lots of log data from public-land.
227
231
  const validTxs = this.takeTxsWithinMaxSize(allValidTxs);
232
+ this.log.verbose(`Collected ${validTxs.length} txs out of ${allValidTxs.length} valid txs out of ${pendingTxs.length} total pending txs for block ${newBlockNumber}`);
228
233
  // Bail if we don't have enough valid txs
229
234
  if (!this.shouldProposeBlock(historicalHeader, { validTxsCount: validTxs.length })) {
230
235
  return;
@@ -236,7 +241,7 @@ let Sequencer = (() => {
236
241
  await this.buildBlockAndAttemptToPublish(validTxs, proposalHeader, historicalHeader);
237
242
  }
238
243
  catch (err) {
239
- this.log.error(`Error assembling block`, err.stack);
244
+ this.log.error(`Error assembling block`, err, { blockNumber: newBlockNumber, slot });
240
245
  }
241
246
  this.setState(SequencerState.IDLE, 0n);
242
247
  }
@@ -269,18 +274,15 @@ let Sequencer = (() => {
269
274
  try {
270
275
  const [slot, blockNumber] = await this.publisher.canProposeAtNextEthBlock(tipArchive);
271
276
  if (proposalBlockNumber !== blockNumber) {
272
- const msg = `Block number mismatch. Expected ${proposalBlockNumber} but got ${blockNumber}`;
273
- this.log.debug(msg);
277
+ const msg = `Sequencer block number mismatch. Expected ${proposalBlockNumber} but got ${blockNumber}.`;
278
+ this.log.warn(msg);
274
279
  throw new Error(msg);
275
280
  }
276
- this.log.verbose(`Can propose block ${proposalBlockNumber} at slot ${slot}`, {
277
- publisherAddress: this.publisher.publisherAddress,
278
- });
279
281
  return slot;
280
282
  }
281
283
  catch (err) {
282
284
  const msg = prettyLogViemErrorMsg(err);
283
- this.log.verbose(`Rejected from being able to propose at next block with ${tipArchive.toString('hex')}: ${msg ? `${msg}` : ''}`);
285
+ this.log.debug(`Rejected from being able to propose at next block with ${tipArchive.toString('hex')}: ${msg ? `${msg}` : ''}`);
284
286
  throw err;
285
287
  }
286
288
  }
@@ -292,11 +294,11 @@ let Sequencer = (() => {
292
294
  return true;
293
295
  }
294
296
  const bufferSeconds = this.timeTable[proposedState] - secondsIntoSlot;
295
- this.metrics.recordStateTransitionBufferMs(bufferSeconds * 1000, proposedState);
296
297
  if (bufferSeconds < 0) {
297
298
  this.log.warn(`Too far into slot to transition to ${proposedState}. max allowed: ${this.timeTable[proposedState]}s, time into slot: ${secondsIntoSlot}s`);
298
299
  return false;
299
300
  }
301
+ this.metrics.recordStateTransitionBufferMs(Math.floor(bufferSeconds * 1000), proposedState);
300
302
  this.log.debug(`Enough time to transition to ${proposedState}, max allowed: ${this.timeTable[proposedState]}s, time into slot: ${secondsIntoSlot}s`);
301
303
  return true;
302
304
  }
@@ -311,13 +313,14 @@ let Sequencer = (() => {
311
313
  */
312
314
  setState(proposedState, currentSlotNumber, force = false) {
313
315
  if (this.state === SequencerState.STOPPED && force !== true) {
314
- this.log.warn(`Cannot set sequencer from ${this.state} to ${proposedState} as it is stopped. Set force=true to override.`);
316
+ this.log.warn(`Cannot set sequencer from ${this.state} to ${proposedState} as it is stopped.`);
315
317
  return;
316
318
  }
317
319
  const secondsIntoSlot = getSecondsIntoSlot(this.l1GenesisTime, this.aztecSlotDuration, Number(currentSlotNumber));
318
320
  if (!this.doIHaveEnoughTimeLeft(proposedState, secondsIntoSlot)) {
319
321
  throw new SequencerTooSlowError(this.state, proposedState, this.timeTable[proposedState], secondsIntoSlot);
320
322
  }
323
+ this.log.debug(`Transitioning from ${this.state} to ${proposedState}`);
321
324
  this.state = proposedState;
322
325
  }
323
326
  shouldProposeBlock(historicalHeader, args) {
@@ -333,7 +336,7 @@ let Sequencer = (() => {
333
336
  // If we haven't hit the maxSecondsBetweenBlocks, we need to have at least minTxsPerBLock txs.
334
337
  // Do not go forward with new block if not enough time has passed since last block
335
338
  if (this.minSecondsBetweenBlocks > 0 && elapsedSinceLastBlock < this.minSecondsBetweenBlocks) {
336
- this.log.debug(`Not creating block because not enough time ${this.minSecondsBetweenBlocks} has passed since last block`);
339
+ this.log.verbose(`Not creating block because not enough time ${this.minSecondsBetweenBlocks} has passed since last block`);
337
340
  return false;
338
341
  }
339
342
  const skipCheck = this.skipMinTxsPerBlockCheck(historicalHeader);
@@ -344,7 +347,7 @@ let Sequencer = (() => {
344
347
  this.log.debug(`Creating block with only ${args.pendingTxsCount} txs as more than ${this.maxSecondsBetweenBlocks}s have passed since last block`);
345
348
  }
346
349
  else {
347
- this.log.debug(`Not creating block because not enough txs in the pool (got ${args.pendingTxsCount} min ${this.minTxsPerBLock})`);
350
+ this.log.verbose(`Not creating block because not enough txs in the pool (got ${args.pendingTxsCount} min ${this.minTxsPerBLock})`);
348
351
  return false;
349
352
  }
350
353
  }
@@ -353,7 +356,7 @@ let Sequencer = (() => {
353
356
  if (args.validTxsCount != undefined) {
354
357
  // Bail if we don't have enough valid txs
355
358
  if (!skipCheck && args.validTxsCount < this.minTxsPerBLock) {
356
- this.log.debug(`Not creating block because not enough valid txs loaded from the pool (got ${args.validTxsCount} min ${this.minTxsPerBLock})`);
359
+ this.log.verbose(`Not creating block because not enough valid txs loaded from the pool (got ${args.validTxsCount} min ${this.minTxsPerBLock})`);
357
360
  return false;
358
361
  }
359
362
  }
@@ -363,7 +366,7 @@ let Sequencer = (() => {
363
366
  // we should bail.
364
367
  if (args.processedTxsCount != undefined) {
365
368
  if (args.processedTxsCount === 0 && !skipCheck && this.minTxsPerBLock > 0) {
366
- this.log.verbose('No txs processed correctly to build block. Exiting');
369
+ this.log.verbose('No txs processed correctly to build block.');
367
370
  return false;
368
371
  }
369
372
  }
@@ -380,14 +383,21 @@ let Sequencer = (() => {
380
383
  * @param interrupt - The interrupt callback, used to validate the block for submission and check if we should propose the block
381
384
  */
382
385
  async buildBlock(validTxs, newGlobalVariables, historicalHeader, interrupt) {
383
- this.log.debug('Requesting L1 to L2 messages from contract');
384
- const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(newGlobalVariables.blockNumber.toBigInt());
385
- this.log.verbose(`Retrieved ${l1ToL2Messages.length} L1 to L2 messages for block ${newGlobalVariables.blockNumber.toNumber()}`);
386
+ const blockNumber = newGlobalVariables.blockNumber.toBigInt();
387
+ const slot = newGlobalVariables.slotNumber.toBigInt();
388
+ this.log.debug(`Requesting L1 to L2 messages from contract for block ${blockNumber}`);
389
+ const l1ToL2Messages = await this.l1ToL2MessageSource.getL1ToL2Messages(blockNumber);
390
+ this.log.verbose(`Building block ${blockNumber} with ${validTxs.length} txs and ${l1ToL2Messages.length} messages`, {
391
+ msgCount: l1ToL2Messages.length,
392
+ txCount: validTxs.length,
393
+ slot,
394
+ blockNumber,
395
+ });
386
396
  const numRealTxs = validTxs.length;
387
397
  const blockSize = Math.max(2, numRealTxs);
388
398
  // Sync to the previous block at least
389
399
  await this.worldState.syncImmediate(newGlobalVariables.blockNumber.toNumber() - 1);
390
- this.log.verbose(`Synced to previous block ${newGlobalVariables.blockNumber.toNumber() - 1}`);
400
+ this.log.debug(`Synced to previous block ${newGlobalVariables.blockNumber.toNumber() - 1}`);
391
401
  // NB: separating the dbs because both should update the state
392
402
  const publicProcessorFork = await this.worldState.fork();
393
403
  const orchestratorFork = await this.worldState.fork();
@@ -399,13 +409,19 @@ let Sequencer = (() => {
399
409
  const [publicProcessorDuration, [processedTxs, failedTxs]] = await elapsed(() => processor.process(validTxs, blockSize, blockBuilder, this.txValidatorFactory.validatorForProcessedTxs(publicProcessorFork)));
400
410
  if (failedTxs.length > 0) {
401
411
  const failedTxData = failedTxs.map(fail => fail.tx);
402
- this.log.debug(`Dropping failed txs ${Tx.getHashes(failedTxData).join(', ')}`);
412
+ this.log.verbose(`Dropping failed txs ${Tx.getHashes(failedTxData).join(', ')}`);
403
413
  await this.p2pClient.deleteTxs(Tx.getHashes(failedTxData));
404
414
  }
405
415
  await interrupt?.(processedTxs);
406
416
  // All real transactions have been added, set the block as full and complete the proving.
407
417
  const block = await blockBuilder.setBlockCompleted();
408
- return { block, publicProcessorDuration, numProcessedTxs: processedTxs.length, blockBuildingTimer };
418
+ return {
419
+ block,
420
+ publicProcessorDuration,
421
+ numMsgs: l1ToL2Messages.length,
422
+ numProcessedTxs: processedTxs.length,
423
+ blockBuildingTimer,
424
+ };
409
425
  }
410
426
  finally {
411
427
  // We create a fresh processor each time to reset any cached state (eg storage writes)
@@ -426,10 +442,11 @@ let Sequencer = (() => {
426
442
  async buildBlockAndAttemptToPublish(validTxs, proposalHeader, historicalHeader) {
427
443
  await this.publisher.validateBlockForSubmission(proposalHeader);
428
444
  const newGlobalVariables = proposalHeader.globalVariables;
429
- this.metrics.recordNewBlock(newGlobalVariables.blockNumber.toNumber(), validTxs.length);
445
+ const blockNumber = newGlobalVariables.blockNumber.toNumber();
446
+ const slot = newGlobalVariables.slotNumber.toBigInt();
447
+ this.metrics.recordNewBlock(blockNumber, validTxs.length);
430
448
  const workTimer = new Timer();
431
- this.setState(SequencerState.CREATING_BLOCK, newGlobalVariables.slotNumber.toBigInt());
432
- this.log.info(`Building blockNumber=${newGlobalVariables.blockNumber.toNumber()} txCount=${validTxs.length} slotNumber=${newGlobalVariables.slotNumber.toNumber()}`);
449
+ this.setState(SequencerState.CREATING_BLOCK, slot);
433
450
  /**
434
451
  * BuildBlock is shared between the sequencer and the validator for re-execution
435
452
  * We use the interrupt callback to validate the block for submission and check if we should propose the block
@@ -447,35 +464,53 @@ let Sequencer = (() => {
447
464
  }
448
465
  };
449
466
  try {
450
- const { block, publicProcessorDuration, numProcessedTxs, blockBuildingTimer } = await this.buildBlock(validTxs, newGlobalVariables, historicalHeader, interrupt);
467
+ const buildBlockRes = await this.buildBlock(validTxs, newGlobalVariables, historicalHeader, interrupt);
468
+ const { block, publicProcessorDuration, numProcessedTxs, numMsgs, blockBuildingTimer } = buildBlockRes;
451
469
  // TODO(@PhilWindle) We should probably periodically check for things like another
452
470
  // block being published before ours instead of just waiting on our block
453
471
  await this.publisher.validateBlockForSubmission(block.header);
454
472
  const workDuration = workTimer.ms();
455
- this.log.info(`Assembled block ${block.number} (txEffectsHash: ${block.header.contentCommitment.txsEffectsHash.toString('hex')})`, {
473
+ const blockStats = {
456
474
  eventName: 'l2-block-built',
457
475
  creator: this.publisher.getSenderAddress().toString(),
458
476
  duration: workDuration,
459
477
  publicProcessDuration: publicProcessorDuration,
460
478
  rollupCircuitsDuration: blockBuildingTimer.ms(),
461
479
  ...block.getStats(),
480
+ };
481
+ const blockHash = block.hash();
482
+ const txHashes = validTxs.map(tx => tx.getTxHash());
483
+ this.log.info(`Built block ${block.number} with hash ${blockHash}`, {
484
+ txEffectsHash: block.header.contentCommitment.txsEffectsHash.toString('hex'),
485
+ blockHash,
486
+ globalVariables: block.header.globalVariables.toInspect(),
487
+ txHashes,
488
+ ...blockStats,
462
489
  });
463
490
  if (this.isFlushing) {
464
- this.log.info(`Flushing completed`);
491
+ this.log.verbose(`Sequencer flushing completed`);
465
492
  }
466
- const txHashes = validTxs.map(tx => tx.getTxHash());
467
493
  this.isFlushing = false;
468
- this.log.verbose('Collecting attestations');
494
+ this.log.debug('Collecting attestations');
469
495
  const stopCollectingAttestationsTimer = this.metrics.startCollectingAttestationsTimer();
470
496
  const attestations = await this.collectAttestations(block, txHashes);
471
- this.log.verbose('Attestations collected');
497
+ if (attestations !== undefined) {
498
+ this.log.verbose(`Collected ${attestations.length} attestations`);
499
+ }
472
500
  stopCollectingAttestationsTimer();
473
- this.log.verbose('Collecting proof quotes');
501
+ this.log.debug('Collecting proof quotes');
474
502
  const proofQuote = await this.createProofClaimForPreviousEpoch(newGlobalVariables.slotNumber.toBigInt());
475
- this.log.info(proofQuote ? `Using proof quote ${inspect(proofQuote.payload)}` : 'No proof quote available');
476
503
  await this.publishL2Block(block, attestations, txHashes, proofQuote);
477
504
  this.metrics.recordPublishedBlock(workDuration);
478
- this.log.info(`Submitted rollup block ${block.number} with ${numProcessedTxs} transactions duration=${Math.ceil(workDuration)}ms (Submitter: ${this.publisher.getSenderAddress()})`);
505
+ this.log.info(`Published rollup block ${block.number} with ${numProcessedTxs} transactions and ${numMsgs} messages in ${Math.ceil(workDuration)}ms`, {
506
+ blockNumber: block.number,
507
+ blockHash: blockHash,
508
+ slot,
509
+ txCount: numProcessedTxs,
510
+ msgCount: numMsgs,
511
+ duration: Math.ceil(workDuration),
512
+ submitter: this.publisher.getSenderAddress().toString(),
513
+ });
479
514
  }
480
515
  catch (err) {
481
516
  this.metrics.recordFailedBlock();
@@ -489,30 +524,31 @@ let Sequencer = (() => {
489
524
  async collectAttestations(block, txHashes) {
490
525
  // TODO(https://github.com/AztecProtocol/aztec-packages/issues/7962): inefficient to have a round trip in here - this should be cached
491
526
  const committee = await this.publisher.getCurrentEpochCommittee();
492
- this.log.debug(`Attesting committee length ${committee.length}`);
493
527
  if (committee.length === 0) {
494
- this.log.verbose(`Attesting committee length is 0, skipping`);
528
+ this.log.verbose(`Attesting committee is empty`);
495
529
  return undefined;
496
530
  }
531
+ else {
532
+ this.log.debug(`Attesting committee length is ${committee.length}`);
533
+ }
497
534
  if (!this.validatorClient) {
498
535
  const msg = 'Missing validator client: Cannot collect attestations';
499
536
  this.log.error(msg);
500
537
  throw new Error(msg);
501
538
  }
502
539
  const numberOfRequiredAttestations = Math.floor((committee.length * 2) / 3) + 1;
503
- this.log.info('Creating block proposal');
540
+ this.log.debug('Creating block proposal');
504
541
  const proposal = await this.validatorClient.createBlockProposal(block.header, block.archive.root, txHashes);
505
542
  if (!proposal) {
506
- this.log.verbose(`Failed to create block proposal, skipping`);
543
+ this.log.warn(`Failed to create block proposal, skipping collecting attestations`);
507
544
  return undefined;
508
545
  }
509
546
  const slotNumber = block.header.globalVariables.slotNumber.toBigInt();
510
547
  this.setState(SequencerState.PUBLISHING_BLOCK_TO_PEERS, slotNumber);
511
- this.log.info('Broadcasting block proposal to validators');
548
+ this.log.debug('Broadcasting block proposal to validators');
512
549
  this.validatorClient.broadcastBlockProposal(proposal);
513
550
  this.setState(SequencerState.WAITING_FOR_ATTESTATIONS, slotNumber);
514
551
  const attestations = await this.validatorClient.collectAttestations(proposal, numberOfRequiredAttestations);
515
- this.log.info(`Collected attestations from validators, number of attestations: ${attestations.length}`);
516
552
  // note: the smart contract requires that the signatures are provided in the order of the committee
517
553
  return orderAttestations(attestations, committee);
518
554
  }
@@ -521,15 +557,16 @@ let Sequencer = (() => {
521
557
  // Find out which epoch we are currently in
522
558
  const epochToProve = await this.publisher.getClaimableEpoch();
523
559
  if (epochToProve === undefined) {
524
- this.log.verbose(`No epoch to prove`);
560
+ this.log.debug(`No epoch to prove`);
525
561
  return undefined;
526
562
  }
527
563
  // Get quotes for the epoch to be proven
528
564
  const quotes = await this.p2pClient.getEpochProofQuotes(epochToProve);
529
- this.log.info(`Retrieved ${quotes.length} quotes, slot: ${slotNumber}, epoch to prove: ${epochToProve}`);
530
- for (const quote of quotes) {
531
- this.log.verbose(inspect(quote.payload));
532
- }
565
+ this.log.verbose(`Retrieved ${quotes.length} quotes for slot ${slotNumber} epoch ${epochToProve}`, {
566
+ epochToProve,
567
+ slotNumber,
568
+ quotes: quotes.map(q => q.payload),
569
+ });
533
570
  // ensure these quotes are still valid for the slot and have the contract validate them
534
571
  const validQuotesPromise = Promise.all(quotes.filter(x => x.payload.validUntilSlot >= slotNumber).map(x => this.publisher.validateProofQuote(x)));
535
572
  const validQuotes = (await validQuotesPromise).filter((q) => !!q);
@@ -539,10 +576,12 @@ let Sequencer = (() => {
539
576
  }
540
577
  // pick the quote with the lowest fee
541
578
  const sortedQuotes = validQuotes.sort((a, b) => a.payload.basisPointFee - b.payload.basisPointFee);
542
- return sortedQuotes[0];
579
+ const quote = sortedQuotes[0];
580
+ this.log.info(`Selected proof quote for proof claim`, quote.payload);
581
+ return quote;
543
582
  }
544
583
  catch (err) {
545
- this.log.error(`Failed to create proof claim for previous epoch: ${err}`);
584
+ this.log.error(`Failed to create proof claim for previous epoch`, err, { slotNumber });
546
585
  return undefined;
547
586
  }
548
587
  }
@@ -573,7 +612,7 @@ let Sequencer = (() => {
573
612
  for (const tx of txs) {
574
613
  const txSize = tx.getSize() - tx.clientIvcProof.clientIvcProofBuffer.length;
575
614
  if (totalSize + txSize > maxSize) {
576
- this.log.warn(`Dropping tx ${tx.getTxHash()} with estimated size ${txSize} due to exceeding ${maxSize} block size limit (currently at ${totalSize})`);
615
+ this.log.debug(`Dropping tx ${tx.getTxHash()} with estimated size ${txSize} due to exceeding ${maxSize} block size limit (currently at ${totalSize})`);
577
616
  continue;
578
617
  }
579
618
  toReturn.push(tx);
@@ -605,7 +644,7 @@ let Sequencer = (() => {
605
644
  // just the archiver under a different name
606
645
  p2p >= l2BlockSource.number &&
607
646
  l1ToL2MessageSource >= l2BlockSource.number;
608
- this.log.verbose(`Sequencer sync check ${result ? 'succeeded' : 'failed'}`, {
647
+ this.log.debug(`Sequencer sync check ${result ? 'succeeded' : 'failed'}`, {
609
648
  worldStateNumber: worldState.number,
610
649
  worldStateHash: worldState.hash,
611
650
  l2BlockSourceNumber: l2BlockSource.number,
@@ -646,4 +685,4 @@ export { Sequencer };
646
685
  /**
647
686
  * State of the sequencer.
648
687
  */
649
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFNTCxFQUFFLEdBSUgsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixvQkFBb0IsRUFFcEIsTUFBTSxFQUNOLGNBQWMsR0FDZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXpELE9BQU8sRUFBRSxVQUFVLEVBQXFDLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFRbkYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDOUMsWUFDa0IsWUFBNEIsRUFDNUIsYUFBNkIsRUFDN0IsY0FBc0IsRUFDdEIsV0FBbUI7UUFFbkMsS0FBSyxDQUNILHNDQUFzQyxhQUFhLGtCQUFrQixjQUFj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
688
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFNTCxxQkFBcUIsRUFDckIsRUFBRSxHQUlILE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUVwQixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsVUFBVSxFQUFxQyxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUtuRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQVFuRixNQUFNLE9BQU8scUJBQXNCLFNBQVEsS0FBSztJQUM5QyxZQUNrQixZQUE0QixFQUM1QixhQUE2QixFQUM3Qixj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
@@ -2,13 +2,13 @@ var _GasTxValidator_instances, _GasTxValidator_log, _GasTxValidator_publicDataSo
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { TxExecutionPhase } from '@aztec/circuit-types';
4
4
  import { FunctionSelector } from '@aztec/circuits.js';
5
- import { createDebugLogger } from '@aztec/foundation/log';
5
+ import { createLogger } from '@aztec/foundation/log';
6
6
  import { computeFeePayerBalanceStorageSlot, getExecutionRequestsByPhase } from '@aztec/simulator';
7
7
  export class GasTxValidator {
8
8
  constructor(publicDataSource, feeJuiceAddress, enforceFees) {
9
9
  _GasTxValidator_instances.add(this);
10
10
  this.enforceFees = enforceFees;
11
- _GasTxValidator_log.set(this, createDebugLogger('aztec:sequencer:tx_validator:tx_gas'));
11
+ _GasTxValidator_log.set(this, createLogger('sequencer:tx_validator:tx_gas'));
12
12
  _GasTxValidator_publicDataSource.set(this, void 0);
13
13
  _GasTxValidator_feeJuiceAddress.set(this, void 0);
14
14
  __classPrivateFieldSet(this, _GasTxValidator_publicDataSource, publicDataSource, "f");
@@ -66,4 +66,4 @@ _GasTxValidator_log = new WeakMap(), _GasTxValidator_publicDataSource = new Weak
66
66
  }
67
67
  return true;
68
68
  };
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZ2FzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBVyxnQkFBZ0IsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRixPQUFPLEVBQThCLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPbEcsTUFBTSxPQUFPLGNBQWM7SUFLekIsWUFBWSxnQkFBbUMsRUFBRSxlQUE2QixFQUFTLFdBQW9COztRQUFwQixnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUozRyw4QkFBTyxpQkFBaUIsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFDO1FBQ2hFLG1EQUFxQztRQUNyQyxrREFBK0I7UUFHN0IsdUJBQUEsSUFBSSxvQ0FBcUIsZ0JBQWdCLE1BQUEsQ0FBQztRQUMxQyx1QkFBQSxJQUFJLG1DQUFvQixlQUFlLE1BQUEsQ0FBQztJQUMxQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFTO1FBQ3pCLE1BQU0sUUFBUSxHQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLFVBQVUsR0FBUyxFQUFFLENBQUM7UUFFNUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLE1BQU0sdUJBQUEsSUFBSSxnRUFBZSxNQUFuQixJQUFJLEVBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNILENB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
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZ2FzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBVyxnQkFBZ0IsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRixPQUFPLEVBQThCLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBT2xHLE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQVksZ0JBQW1DLEVBQUUsZUFBNkIsRUFBUyxXQUFvQjs7UUFBcEIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFKM0csOEJBQU8sWUFBWSxDQUFDLCtCQUErQixDQUFDLEVBQUM7UUFDckQsbURBQXFDO1FBQ3JDLGtEQUErQjtRQUc3Qix1QkFBQSxJQUFJLG9DQUFxQixnQkFBZ0IsTUFBQSxDQUFDO1FBQzFDLHVCQUFBLElBQUksbUNBQW9CLGVBQWUsTUFBQSxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVM7UUFDekIsTUFBTSxRQUFRLEdBQVMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sVUFBVSxHQUFTLEVBQUUsQ0FBQztRQUU1QixLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksTUFBTSx1QkFBQSxJQUFJLGdFQUFlLE1BQW5CLElBQUksRUFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztR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