@aztec/sequencer-client 0.62.0 → 0.63.0

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 (40) hide show
  1. package/dest/block_builder/light.d.ts.map +1 -1
  2. package/dest/block_builder/light.js +3 -5
  3. package/dest/client/sequencer-client.d.ts +1 -1
  4. package/dest/client/sequencer-client.d.ts.map +1 -1
  5. package/dest/client/sequencer-client.js +9 -4
  6. package/dest/config.d.ts +2 -2
  7. package/dest/config.d.ts.map +1 -1
  8. package/dest/config.js +14 -10
  9. package/dest/global_variable_builder/global_builder.d.ts +3 -2
  10. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  11. package/dest/global_variable_builder/global_builder.js +4 -3
  12. package/dest/publisher/l1-publisher.d.ts +6 -4
  13. package/dest/publisher/l1-publisher.d.ts.map +1 -1
  14. package/dest/publisher/l1-publisher.js +22 -18
  15. package/dest/sequencer/metrics.d.ts +3 -2
  16. package/dest/sequencer/metrics.d.ts.map +1 -1
  17. package/dest/sequencer/metrics.js +16 -2
  18. package/dest/sequencer/sequencer.d.ts +23 -38
  19. package/dest/sequencer/sequencer.d.ts.map +1 -1
  20. package/dest/sequencer/sequencer.js +104 -94
  21. package/dest/sequencer/utils.d.ts +52 -0
  22. package/dest/sequencer/utils.d.ts.map +1 -0
  23. package/dest/sequencer/utils.js +70 -0
  24. package/dest/tx_validator/gas_validator.d.ts.map +1 -1
  25. package/dest/tx_validator/gas_validator.js +5 -5
  26. package/dest/tx_validator/phases_validator.d.ts.map +1 -1
  27. package/dest/tx_validator/phases_validator.js +4 -4
  28. package/dest/tx_validator/test_utils.js +9 -7
  29. package/package.json +19 -19
  30. package/src/block_builder/light.ts +1 -4
  31. package/src/client/sequencer-client.ts +10 -2
  32. package/src/config.ts +24 -10
  33. package/src/global_variable_builder/global_builder.ts +7 -10
  34. package/src/publisher/l1-publisher.ts +29 -21
  35. package/src/sequencer/metrics.ts +18 -2
  36. package/src/sequencer/sequencer.ts +130 -100
  37. package/src/sequencer/utils.ts +78 -0
  38. package/src/tx_validator/gas_validator.ts +4 -4
  39. package/src/tx_validator/phases_validator.ts +3 -3
  40. package/src/tx_validator/test_utils.ts +9 -7
@@ -1,10 +1,8 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { Tx, } from '@aztec/circuit-types';
3
- import { BlockProofError, } from '@aztec/circuit-types/interfaces';
4
3
  import { AppendOnlyTreeSnapshot, ContentCommitment, GENESIS_ARCHIVE_ROOT, Header, StateReference, } from '@aztec/circuits.js';
5
4
  import { AztecAddress } from '@aztec/foundation/aztec-address';
6
5
  import { EthAddress } from '@aztec/foundation/eth-address';
7
- import { Signature } from '@aztec/foundation/eth-signature';
8
6
  import { Fr } from '@aztec/foundation/fields';
9
7
  import { createDebugLogger } from '@aztec/foundation/log';
10
8
  import { RunningPromise } from '@aztec/foundation/running-promise';
@@ -13,6 +11,17 @@ import { Attributes, trackSpan } from '@aztec/telemetry-client';
13
11
  import { inspect } from 'util';
14
12
  import { prettyLogViemErrorMsg } from '../publisher/utils.js';
15
13
  import { SequencerMetrics } from './metrics.js';
14
+ import { SequencerState, getSecondsIntoSlot, orderAttestations } from './utils.js';
15
+ export class SequencerTooSlowError extends Error {
16
+ constructor(currentState, proposedState, maxAllowedTime, currentTime) {
17
+ super(`Too far into slot to transition to ${proposedState}. max allowed: ${maxAllowedTime}s, time into slot: ${currentTime}s`);
18
+ this.currentState = currentState;
19
+ this.proposedState = proposedState;
20
+ this.maxAllowedTime = maxAllowedTime;
21
+ this.currentTime = currentTime;
22
+ this.name = 'SequencerTooSlowError';
23
+ }
24
+ }
16
25
  /**
17
26
  * Sequencer client
18
27
  * - Wins a period of time to become the sequencer (depending on finalized protocol).
@@ -30,7 +39,7 @@ let Sequencer = (() => {
30
39
  let _publishL2Block_decorators;
31
40
  return _a = class Sequencer {
32
41
  constructor(publisher, validatorClient, // During migration the validator client can be inactive
33
- globalsBuilder, p2pClient, worldState, blockBuilderFactory, l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, txValidatorFactory, telemetry, config = {}, log = createDebugLogger('aztec:sequencer')) {
42
+ globalsBuilder, p2pClient, worldState, blockBuilderFactory, l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, txValidatorFactory, l1GenesisTime, aztecSlotDuration, telemetry, config = {}, log = createDebugLogger('aztec:sequencer')) {
34
43
  this.publisher = (__runInitializers(this, _instanceExtraInitializers), publisher);
35
44
  this.validatorClient = validatorClient;
36
45
  this.globalsBuilder = globalsBuilder;
@@ -41,6 +50,8 @@ let Sequencer = (() => {
41
50
  this.l1ToL2MessageSource = l1ToL2MessageSource;
42
51
  this.publicProcessorFactory = publicProcessorFactory;
43
52
  this.txValidatorFactory = txValidatorFactory;
53
+ this.l1GenesisTime = l1GenesisTime;
54
+ this.aztecSlotDuration = aztecSlotDuration;
44
55
  this.config = config;
45
56
  this.log = log;
46
57
  this.pollingIntervalMs = 1000;
@@ -53,9 +64,9 @@ let Sequencer = (() => {
53
64
  this._feeRecipient = AztecAddress.ZERO;
54
65
  this.state = SequencerState.STOPPED;
55
66
  this.allowedInSetup = [];
56
- this.allowedInTeardown = [];
57
67
  this.maxBlockSizeInBytes = 1024 * 1024;
58
68
  this.isFlushing = false;
69
+ this.enforceTimeTable = false;
59
70
  this.updateConfig(config);
60
71
  this.metrics = new SequencerMetrics(telemetry, () => this.state, 'Sequencer');
61
72
  this.log.verbose(`Initialized sequencer with ${this.minTxsPerBLock}-${this.maxTxsPerBlock} txs per block.`);
@@ -95,23 +106,38 @@ let Sequencer = (() => {
95
106
  if (config.maxBlockSizeInBytes !== undefined) {
96
107
  this.maxBlockSizeInBytes = config.maxBlockSizeInBytes;
97
108
  }
98
- // TODO(#5917) remove this. it is no longer needed since we don't need to whitelist functions in teardown
99
- if (config.allowedInTeardown) {
100
- this.allowedInTeardown = config.allowedInTeardown;
101
- }
102
- if (config.gerousiaPayload) {
103
- this.publisher.setPayload(config.gerousiaPayload);
109
+ if (config.governanceProposerPayload) {
110
+ this.publisher.setPayload(config.governanceProposerPayload);
104
111
  }
112
+ this.enforceTimeTable = config.enforceTimeTable === true;
113
+ this.setTimeTable();
105
114
  // TODO: Just read everything from the config object as needed instead of copying everything into local vars.
106
115
  this.config = config;
107
116
  }
117
+ setTimeTable() {
118
+ const newTimeTable = {
119
+ [SequencerState.STOPPED]: this.aztecSlotDuration,
120
+ [SequencerState.IDLE]: this.aztecSlotDuration,
121
+ [SequencerState.SYNCHRONIZING]: this.aztecSlotDuration,
122
+ [SequencerState.PROPOSER_CHECK]: this.aztecSlotDuration, // We always want to allow the full slot to check if we are the proposer
123
+ [SequencerState.WAITING_FOR_TXS]: 3,
124
+ [SequencerState.CREATING_BLOCK]: 5,
125
+ [SequencerState.PUBLISHING_BLOCK_TO_PEERS]: 5 + this.maxTxsPerBlock * 2, // if we take 5 seconds to create block, then 4 transactions at 2 seconds each
126
+ [SequencerState.WAITING_FOR_ATTESTATIONS]: 5 + this.maxTxsPerBlock * 2 + 3, // it shouldn't take 3 seconds to publish to peers
127
+ [SequencerState.PUBLISHING_BLOCK]: 5 + this.maxTxsPerBlock * 2 + 3 + 5, // wait 5 seconds for attestations
128
+ };
129
+ if (this.enforceTimeTable && newTimeTable[SequencerState.PUBLISHING_BLOCK] > this.aztecSlotDuration) {
130
+ throw new Error('Sequencer cannot publish block in less than a slot');
131
+ }
132
+ this.timeTable = newTimeTable;
133
+ }
108
134
  /**
109
- * Starts the sequencer and moves to IDLE state. Blocks until the initial sync is complete.
135
+ * Starts the sequencer and moves to IDLE state.
110
136
  */
111
137
  start() {
112
138
  this.runningPromise = new RunningPromise(this.work.bind(this), this.pollingIntervalMs);
113
139
  this.runningPromise.start();
114
- this.state = SequencerState.IDLE;
140
+ this.setState(SequencerState.IDLE, true /** force */);
115
141
  this.log.info('Sequencer started');
116
142
  return Promise.resolve();
117
143
  }
@@ -122,7 +148,7 @@ let Sequencer = (() => {
122
148
  this.log.debug(`Stopping sequencer`);
123
149
  await this.runningPromise?.stop();
124
150
  this.publisher.interrupt();
125
- this.state = SequencerState.STOPPED;
151
+ this.setState(SequencerState.STOPPED, true /** force */);
126
152
  this.log.info('Stopped sequencer');
127
153
  }
128
154
  /**
@@ -132,7 +158,7 @@ let Sequencer = (() => {
132
158
  this.log.info('Restarting sequencer');
133
159
  this.publisher.restart();
134
160
  this.runningPromise.start();
135
- this.state = SequencerState.IDLE;
161
+ this.setState(SequencerState.IDLE, true /** force */);
136
162
  }
137
163
  /**
138
164
  * Returns the current state of the sequencer.
@@ -149,7 +175,8 @@ let Sequencer = (() => {
149
175
  * - Submit block
150
176
  * - If our block for some reason is not included, revert the state
151
177
  */
152
- async work() {
178
+ async doRealWork() {
179
+ this.setState(SequencerState.SYNCHRONIZING);
153
180
  // Update state when the previous block has been synced
154
181
  const prevBlockSynced = await this.isBlockSynced();
155
182
  // Do not go forward with new block if the previous one has not been mined and processed
@@ -157,10 +184,8 @@ let Sequencer = (() => {
157
184
  this.log.debug('Previous block has not been mined and processed yet');
158
185
  return;
159
186
  }
160
- if (prevBlockSynced && this.state === SequencerState.PUBLISHING_BLOCK) {
161
- this.log.debug(`Block has been synced`);
162
- this.state = SequencerState.IDLE;
163
- }
187
+ this.log.debug('Previous block has been mined and processed');
188
+ this.setState(SequencerState.PROPOSER_CHECK);
164
189
  const chainTip = await this.l2BlockSource.getBlock(-1);
165
190
  const historicalHeader = chainTip?.header;
166
191
  const newBlockNumber = (historicalHeader === undefined
@@ -181,7 +206,7 @@ let Sequencer = (() => {
181
206
  if (!this.shouldProposeBlock(historicalHeader, {})) {
182
207
  return;
183
208
  }
184
- this.state = SequencerState.WAITING_FOR_TXS;
209
+ this.setState(SequencerState.WAITING_FOR_TXS);
185
210
  // Get txs to build the new block.
186
211
  const pendingTxs = this.p2pClient.getTxs('pending');
187
212
  if (!this.shouldProposeBlock(historicalHeader, { pendingTxsCount: pendingTxs.length })) {
@@ -209,13 +234,26 @@ let Sequencer = (() => {
209
234
  await this.buildBlockAndAttemptToPublish(validTxs, proposalHeader, historicalHeader);
210
235
  }
211
236
  catch (err) {
212
- if (BlockProofError.isBlockProofError(err)) {
213
- const txHashes = err.txHashes.filter(h => !h.isZero());
214
- this.log.warn(`Proving block failed, removing ${txHashes.length} txs from pool`);
215
- await this.p2pClient.deleteTxs(txHashes);
216
- }
217
237
  this.log.error(`Error assembling block`, err.stack);
218
238
  }
239
+ this.setState(SequencerState.IDLE);
240
+ }
241
+ async work() {
242
+ try {
243
+ await this.doRealWork();
244
+ }
245
+ catch (err) {
246
+ if (err instanceof SequencerTooSlowError) {
247
+ this.log.warn(err.message);
248
+ }
249
+ else {
250
+ // Re-throw other errors
251
+ throw err;
252
+ }
253
+ }
254
+ finally {
255
+ this.setState(SequencerState.IDLE);
256
+ }
219
257
  }
220
258
  /** Whether to skip the check of min txs per block if more than maxSecondsBetweenBlocks has passed since the previous block. */
221
259
  skipMinTxsPerBlockCheck(historicalHeader) {
@@ -233,7 +271,7 @@ let Sequencer = (() => {
233
271
  this.log.debug(msg);
234
272
  throw new Error(msg);
235
273
  }
236
- this.log.debug(`Can propose block ${proposalBlockNumber} at slot ${slot}`);
274
+ this.log.verbose(`Can propose block ${proposalBlockNumber} at slot ${slot}`);
237
275
  return slot;
238
276
  }
239
277
  catch (err) {
@@ -242,6 +280,33 @@ let Sequencer = (() => {
242
280
  throw err;
243
281
  }
244
282
  }
283
+ doIHaveEnoughTimeLeft(proposedState, secondsIntoSlot) {
284
+ if (!this.enforceTimeTable) {
285
+ return true;
286
+ }
287
+ if (this.timeTable[proposedState] === this.aztecSlotDuration) {
288
+ return true;
289
+ }
290
+ const bufferSeconds = this.timeTable[proposedState] - secondsIntoSlot;
291
+ this.metrics.recordStateTransitionBufferMs(bufferSeconds * 1000, proposedState);
292
+ if (bufferSeconds < 0) {
293
+ this.log.warn(`Too far into slot to transition to ${proposedState}. max allowed: ${this.timeTable[proposedState]}s, time into slot: ${secondsIntoSlot}s`);
294
+ return false;
295
+ }
296
+ this.log.debug(`Enough time to transition to ${proposedState}, max allowed: ${this.timeTable[proposedState]}s, time into slot: ${secondsIntoSlot}s`);
297
+ return true;
298
+ }
299
+ setState(proposedState, force = false) {
300
+ if (this.state === SequencerState.STOPPED && force !== true) {
301
+ this.log.warn(`Cannot set sequencer from ${this.state} to ${proposedState} as it is stopped. Set force=true to override.`);
302
+ return;
303
+ }
304
+ const secondsIntoSlot = getSecondsIntoSlot(this.l1GenesisTime, this.aztecSlotDuration);
305
+ if (!this.doIHaveEnoughTimeLeft(proposedState, secondsIntoSlot)) {
306
+ throw new SequencerTooSlowError(this.state, proposedState, this.timeTable[proposedState], secondsIntoSlot);
307
+ }
308
+ this.state = proposedState;
309
+ }
245
310
  shouldProposeBlock(historicalHeader, args) {
246
311
  if (this.isFlushing) {
247
312
  this.log.verbose(`Flushing all pending txs in new block`);
@@ -306,7 +371,7 @@ let Sequencer = (() => {
306
371
  const newGlobalVariables = proposalHeader.globalVariables;
307
372
  this.metrics.recordNewBlock(newGlobalVariables.blockNumber.toNumber(), validTxs.length);
308
373
  const workTimer = new Timer();
309
- this.state = SequencerState.CREATING_BLOCK;
374
+ this.setState(SequencerState.CREATING_BLOCK);
310
375
  this.log.info(`Building blockNumber=${newGlobalVariables.blockNumber.toNumber()} txCount=${validTxs.length} slotNumber=${newGlobalVariables.slotNumber.toNumber()}`);
311
376
  // Get l1 to l2 messages from the contract
312
377
  this.log.debug('Requesting L1 to L2 messages from contract');
@@ -314,14 +379,16 @@ let Sequencer = (() => {
314
379
  this.log.verbose(`Retrieved ${l1ToL2Messages.length} L1 to L2 messages for block ${newGlobalVariables.blockNumber.toNumber()}`);
315
380
  const numRealTxs = validTxs.length;
316
381
  const blockSize = Math.max(2, numRealTxs);
317
- const fork = await this.worldState.fork();
382
+ // NB: separating the dbs because both should update the state
383
+ const publicProcessorFork = await this.worldState.fork();
384
+ const orchestratorFork = await this.worldState.fork();
318
385
  try {
319
386
  // We create a fresh processor each time to reset any cached state (eg storage writes)
320
- const processor = this.publicProcessorFactory.create(fork, historicalHeader, newGlobalVariables);
387
+ const processor = this.publicProcessorFactory.create(publicProcessorFork, historicalHeader, newGlobalVariables);
321
388
  const blockBuildingTimer = new Timer();
322
- const blockBuilder = this.blockBuilderFactory.create(fork);
389
+ const blockBuilder = this.blockBuilderFactory.create(orchestratorFork);
323
390
  await blockBuilder.startNewBlock(blockSize, newGlobalVariables, l1ToL2Messages);
324
- const [publicProcessorDuration, [processedTxs, failedTxs]] = await elapsed(() => processor.process(validTxs, blockSize, blockBuilder, this.txValidatorFactory.validatorForProcessedTxs(fork)));
391
+ const [publicProcessorDuration, [processedTxs, failedTxs]] = await elapsed(() => processor.process(validTxs, blockSize, blockBuilder, this.txValidatorFactory.validatorForProcessedTxs(publicProcessorFork)));
325
392
  if (failedTxs.length > 0) {
326
393
  const failedTxData = failedTxs.map(fail => fail.tx);
327
394
  this.log.debug(`Dropping failed txs ${Tx.getHashes(failedTxData).join(', ')}`);
@@ -371,7 +438,8 @@ let Sequencer = (() => {
371
438
  }
372
439
  }
373
440
  finally {
374
- await fork.close();
441
+ await publicProcessorFork.close();
442
+ await orchestratorFork.close();
375
443
  }
376
444
  }
377
445
  /** Forces the sequencer to bypass all time and tx count checks for the next block and build anyway. */
@@ -394,10 +462,10 @@ let Sequencer = (() => {
394
462
  const numberOfRequiredAttestations = Math.floor((committee.length * 2) / 3) + 1;
395
463
  this.log.verbose('Creating block proposal');
396
464
  const proposal = await this.validatorClient.createBlockProposal(block.header, block.archive.root, txHashes);
397
- this.state = SequencerState.PUBLISHING_BLOCK_TO_PEERS;
465
+ this.setState(SequencerState.PUBLISHING_BLOCK_TO_PEERS);
398
466
  this.log.verbose('Broadcasting block proposal to validators');
399
467
  this.validatorClient.broadcastBlockProposal(proposal);
400
- this.state = SequencerState.WAITING_FOR_ATTESTATIONS;
468
+ this.setState(SequencerState.WAITING_FOR_ATTESTATIONS);
401
469
  const attestations = await this.validatorClient.collectAttestations(proposal, numberOfRequiredAttestations);
402
470
  this.log.verbose(`Collected attestations from validators, number of attestations: ${attestations.length}`);
403
471
  // note: the smart contract requires that the signatures are provided in the order of the committee
@@ -439,7 +507,7 @@ let Sequencer = (() => {
439
507
  */
440
508
  async publishL2Block(block, attestations, txHashes, proofQuote) {
441
509
  // Publishes new block to the network and awaits the tx to be mined
442
- this.state = SequencerState.PUBLISHING_BLOCK;
510
+ this.setState(SequencerState.PUBLISHING_BLOCK);
443
511
  const publishedL2Block = await this.publisher.proposeL2Block(block, attestations, txHashes, proofQuote);
444
512
  if (!publishedL2Block) {
445
513
  throw new Error(`Failed to publish block ${block.number}`);
@@ -533,62 +601,4 @@ export { Sequencer };
533
601
  /**
534
602
  * State of the sequencer.
535
603
  */
536
- export var SequencerState;
537
- (function (SequencerState) {
538
- /**
539
- * Will move to WAITING_FOR_TXS after a configured amount of time.
540
- */
541
- SequencerState[SequencerState["IDLE"] = 0] = "IDLE";
542
- /**
543
- * Polling the P2P module for txs to include in a block. Will move to CREATING_BLOCK if there are valid txs to include, or back to IDLE otherwise.
544
- */
545
- SequencerState[SequencerState["WAITING_FOR_TXS"] = 1] = "WAITING_FOR_TXS";
546
- /**
547
- * Creating a new L2 block. Includes processing public function calls and running rollup circuits. Will move to PUBLISHING_CONTRACT_DATA.
548
- */
549
- SequencerState[SequencerState["CREATING_BLOCK"] = 2] = "CREATING_BLOCK";
550
- /**
551
- * Publishing blocks to validator peers. Will move to WAITING_FOR_ATTESTATIONS.
552
- */
553
- SequencerState[SequencerState["PUBLISHING_BLOCK_TO_PEERS"] = 3] = "PUBLISHING_BLOCK_TO_PEERS";
554
- /**
555
- * The block has been published to peers, and we are waiting for attestations. Will move to PUBLISHING_CONTRACT_DATA.
556
- */
557
- SequencerState[SequencerState["WAITING_FOR_ATTESTATIONS"] = 4] = "WAITING_FOR_ATTESTATIONS";
558
- /**
559
- * Sending the tx to L1 with encrypted logs and awaiting it to be mined. Will move back to PUBLISHING_BLOCK once finished.
560
- */
561
- SequencerState[SequencerState["PUBLISHING_CONTRACT_DATA"] = 5] = "PUBLISHING_CONTRACT_DATA";
562
- /**
563
- * Sending the tx to L1 with the L2 block data and awaiting it to be mined. Will move to IDLE.
564
- */
565
- SequencerState[SequencerState["PUBLISHING_BLOCK"] = 6] = "PUBLISHING_BLOCK";
566
- /**
567
- * Sequencer is stopped and not processing any txs from the pool.
568
- */
569
- SequencerState[SequencerState["STOPPED"] = 7] = "STOPPED";
570
- })(SequencerState || (SequencerState = {}));
571
- /** Order Attestations
572
- *
573
- * Returns attestation signatures in the order of a series of provided ethereum addresses
574
- * The rollup smart contract expects attestations to appear in the order of the committee
575
- *
576
- * @todo: perform this logic within the memory attestation store instead?
577
- */
578
- function orderAttestations(attestations, orderAddresses) {
579
- // Create a map of sender addresses to BlockAttestations
580
- const attestationMap = new Map();
581
- for (const attestation of attestations) {
582
- const sender = attestation.getSender();
583
- if (sender) {
584
- attestationMap.set(sender.toString(), attestation);
585
- }
586
- }
587
- // Create the ordered array based on the orderAddresses, else return an empty signature
588
- const orderedAttestations = orderAddresses.map(address => {
589
- const addressString = address.toString();
590
- return attestationMap.get(addressString)?.signature || Signature.empty();
591
- });
592
- return orderedAttestations;
593
- }
594
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFPTCxFQUFFLEdBSUgsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsZUFBZSxHQUVoQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxVQUFVLEVBQXFDLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBUWhEOzs7Ozs7OztHQVFHO0lBQ1UsU0FBUzs7Ozs7O3NCQUFULFNBQVM7WUFpQnBCLFlBQ1UsU0FBc0IsRUFDdEIsZUFBNEMsRUFBRSx3REFBd0Q7WUFDdEcsY0FBcUMsRUFDckMs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
604
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFNTCxFQUFFLEdBSUgsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLGNBQWMsR0FDZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxVQUFVLEVBQXFDLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFRbkYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDOUMsWUFDa0IsWUFBNEIsRUFDNUIsYUFBNkIsRUFDN0IsY0FBc0IsRUFDdEIsV0FBbUI7UUFFbkMsS0FBSyxDQUNILHNDQUFzQyxhQUFhLGtCQUFrQixjQUFj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
@@ -0,0 +1,52 @@
1
+ import type { BlockAttestation, EthAddress } from '@aztec/circuit-types';
2
+ import { Signature } from '@aztec/foundation/eth-signature';
3
+ export declare enum SequencerState {
4
+ /**
5
+ * Sequencer is stopped and not processing any txs from the pool.
6
+ */
7
+ STOPPED = "STOPPED",
8
+ /**
9
+ * Sequencer is awaiting the next call to work().
10
+ */
11
+ IDLE = "IDLE",
12
+ /**
13
+ * Synchronizing with the L2 chain.
14
+ */
15
+ SYNCHRONIZING = "SYNCHRONIZING",
16
+ /**
17
+ * Checking if we are the proposer for the current slot.
18
+ */
19
+ PROPOSER_CHECK = "PROPOSER_CHECK",
20
+ /**
21
+ * Polling the P2P module for txs to include in a block. Will move to CREATING_BLOCK if there are valid txs to include, or back to SYNCHRONIZING otherwise.
22
+ */
23
+ WAITING_FOR_TXS = "WAITING_FOR_TXS",
24
+ /**
25
+ * Creating a new L2 block. Includes processing public function calls and running rollup circuits. Will move to PUBLISHING_CONTRACT_DATA.
26
+ */
27
+ CREATING_BLOCK = "CREATING_BLOCK",
28
+ /**
29
+ * Publishing blocks to validator peers. Will move to WAITING_FOR_ATTESTATIONS.
30
+ */
31
+ PUBLISHING_BLOCK_TO_PEERS = "PUBLISHING_BLOCK_TO_PEERS",
32
+ /**
33
+ * The block has been published to peers, and we are waiting for attestations. Will move to PUBLISHING_CONTRACT_DATA.
34
+ */
35
+ WAITING_FOR_ATTESTATIONS = "WAITING_FOR_ATTESTATIONS",
36
+ /**
37
+ * Sending the tx to L1 with the L2 block data and awaiting it to be mined. Will move to SYNCHRONIZING.
38
+ */
39
+ PUBLISHING_BLOCK = "PUBLISHING_BLOCK"
40
+ }
41
+ export type SequencerStateCallback = () => SequencerState;
42
+ export declare function sequencerStateToNumber(state: SequencerState): number;
43
+ /** Order Attestations
44
+ *
45
+ * Returns attestation signatures in the order of a series of provided ethereum addresses
46
+ * The rollup smart contract expects attestations to appear in the order of the committee
47
+ *
48
+ * @todo: perform this logic within the memory attestation store instead?
49
+ */
50
+ export declare function orderAttestations(attestations: BlockAttestation[], orderAddresses: EthAddress[]): Signature[];
51
+ export declare function getSecondsIntoSlot(l1GenesisTime: number, aztecSlotDuration: number): number;
52
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/sequencer/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,oBAAY,cAAc;IACxB;;OAEG;IACH,OAAO,YAAY;IACnB;;OAEG;IACH,IAAI,SAAS;IACb;;OAEG;IACH,aAAa,kBAAkB;IAC/B;;OAEG;IACH,cAAc,mBAAmB;IACjC;;OAEG;IACH,eAAe,oBAAoB;IACnC;;OAEG;IACH,cAAc,mBAAmB;IACjC;;OAEG;IACH,yBAAyB,8BAA8B;IACvD;;OAEG;IACH,wBAAwB,6BAA6B;IACrD;;OAEG;IACH,gBAAgB,qBAAqB;CACtC;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,cAAc,CAAC;AAE1D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAkB7G;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAE3F"}
@@ -0,0 +1,70 @@
1
+ import { Signature } from '@aztec/foundation/eth-signature';
2
+ export var SequencerState;
3
+ (function (SequencerState) {
4
+ /**
5
+ * Sequencer is stopped and not processing any txs from the pool.
6
+ */
7
+ SequencerState["STOPPED"] = "STOPPED";
8
+ /**
9
+ * Sequencer is awaiting the next call to work().
10
+ */
11
+ SequencerState["IDLE"] = "IDLE";
12
+ /**
13
+ * Synchronizing with the L2 chain.
14
+ */
15
+ SequencerState["SYNCHRONIZING"] = "SYNCHRONIZING";
16
+ /**
17
+ * Checking if we are the proposer for the current slot.
18
+ */
19
+ SequencerState["PROPOSER_CHECK"] = "PROPOSER_CHECK";
20
+ /**
21
+ * Polling the P2P module for txs to include in a block. Will move to CREATING_BLOCK if there are valid txs to include, or back to SYNCHRONIZING otherwise.
22
+ */
23
+ SequencerState["WAITING_FOR_TXS"] = "WAITING_FOR_TXS";
24
+ /**
25
+ * Creating a new L2 block. Includes processing public function calls and running rollup circuits. Will move to PUBLISHING_CONTRACT_DATA.
26
+ */
27
+ SequencerState["CREATING_BLOCK"] = "CREATING_BLOCK";
28
+ /**
29
+ * Publishing blocks to validator peers. Will move to WAITING_FOR_ATTESTATIONS.
30
+ */
31
+ SequencerState["PUBLISHING_BLOCK_TO_PEERS"] = "PUBLISHING_BLOCK_TO_PEERS";
32
+ /**
33
+ * The block has been published to peers, and we are waiting for attestations. Will move to PUBLISHING_CONTRACT_DATA.
34
+ */
35
+ SequencerState["WAITING_FOR_ATTESTATIONS"] = "WAITING_FOR_ATTESTATIONS";
36
+ /**
37
+ * Sending the tx to L1 with the L2 block data and awaiting it to be mined. Will move to SYNCHRONIZING.
38
+ */
39
+ SequencerState["PUBLISHING_BLOCK"] = "PUBLISHING_BLOCK";
40
+ })(SequencerState || (SequencerState = {}));
41
+ export function sequencerStateToNumber(state) {
42
+ return Object.values(SequencerState).indexOf(state);
43
+ }
44
+ /** Order Attestations
45
+ *
46
+ * Returns attestation signatures in the order of a series of provided ethereum addresses
47
+ * The rollup smart contract expects attestations to appear in the order of the committee
48
+ *
49
+ * @todo: perform this logic within the memory attestation store instead?
50
+ */
51
+ export function orderAttestations(attestations, orderAddresses) {
52
+ // Create a map of sender addresses to BlockAttestations
53
+ const attestationMap = new Map();
54
+ for (const attestation of attestations) {
55
+ const sender = attestation.getSender();
56
+ if (sender) {
57
+ attestationMap.set(sender.toString(), attestation);
58
+ }
59
+ }
60
+ // Create the ordered array based on the orderAddresses, else return an empty signature
61
+ const orderedAttestations = orderAddresses.map(address => {
62
+ const addressString = address.toString();
63
+ return attestationMap.get(addressString)?.signature || Signature.empty();
64
+ });
65
+ return orderedAttestations;
66
+ }
67
+ export function getSecondsIntoSlot(l1GenesisTime, aztecSlotDuration) {
68
+ return (Date.now() / 1000 - l1GenesisTime) % aztecSlotDuration;
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RCxNQUFNLENBQU4sSUFBWSxjQXFDWDtBQXJDRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCxxQ0FBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILCtCQUFhLENBQUE7SUFDYjs7T0FFRztJQUNILGlEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsbURBQWlDLENBQUE7SUFDakM7O09BRUc7SUFDSCxxREFBbUMsQ0FBQTtJQUNuQzs7T0FFRztJQUNILG1EQUFpQyxDQUFBO0lBQ2pDOztPQUVHO0lBQ0gseUVBQXVELENBQUE7SUFDdkQ7O09BRUc7SUFDSCx1RUFBcUQsQ0FBQTtJQUNyRDs7T0FFRztJQUNILHVEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFyQ1csY0FBYyxLQUFkLGNBQWMsUUFxQ3pCO0FBSUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQXFCO0lBQzFELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxZQUFnQyxFQUFFLGNBQTRCO0lBQzlGLHdEQUF3RDtJQUN4RCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUUzRCxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRCx1RkFBdUY7SUFDdkYsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxhQUFxQixFQUFFLGlCQUF5QjtJQUNqRixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUNqRSxDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,EAAoB,MAAM,oBAAoB,CAAC;AAIlF,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;CACvE;AAED,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAKmC,WAAW,EAAE,OAAO;gBAA/F,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAS,WAAW,EAAE,OAAO;IAKrG,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAezE,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CA4CrC"}
1
+ {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAoB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,EAAoB,MAAM,oBAAoB,CAAC;AAIlF,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;CACvE;AAED,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAKmC,WAAW,EAAE,OAAO;gBAA/F,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAS,WAAW,EAAE,OAAO;IAKrG,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAezE,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CA4CrC"}