@aztec/sequencer-client 0.7.0 → 0.7.2

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 (111) hide show
  1. package/Dockerfile +21 -0
  2. package/package.json +10 -10
  3. package/src/block_builder/solo_block_builder.test.ts +4 -4
  4. package/src/block_builder/solo_block_builder.ts +80 -24
  5. package/src/publisher/viem-tx-sender.ts +4 -1
  6. package/src/sequencer/sequencer.ts +15 -4
  7. package/src/simulator/public_executor.ts +2 -16
  8. package/src/simulator/rollup.ts +7 -4
  9. package/.tsbuildinfo +0 -1
  10. package/dest/block_builder/index.d.ts +0 -19
  11. package/dest/block_builder/index.d.ts.map +0 -1
  12. package/dest/block_builder/index.js +0 -2
  13. package/dest/block_builder/solo_block_builder.d.ts +0 -77
  14. package/dest/block_builder/solo_block_builder.d.ts.map +0 -1
  15. package/dest/block_builder/solo_block_builder.js +0 -454
  16. package/dest/block_builder/solo_block_builder.test.d.ts +0 -3
  17. package/dest/block_builder/solo_block_builder.test.d.ts.map +0 -1
  18. package/dest/block_builder/solo_block_builder.test.js +0 -277
  19. package/dest/block_builder/types.d.ts +0 -12
  20. package/dest/block_builder/types.d.ts.map +0 -1
  21. package/dest/block_builder/types.js +0 -2
  22. package/dest/client/index.d.ts +0 -2
  23. package/dest/client/index.d.ts.map +0 -1
  24. package/dest/client/index.js +0 -2
  25. package/dest/client/sequencer-client.d.ts +0 -32
  26. package/dest/client/sequencer-client.d.ts.map +0 -1
  27. package/dest/client/sequencer-client.js +0 -47
  28. package/dest/config.d.ts +0 -12
  29. package/dest/config.d.ts.map +0 -1
  30. package/dest/config.js +0 -28
  31. package/dest/global_variable_builder/config.d.ts +0 -19
  32. package/dest/global_variable_builder/config.d.ts.map +0 -1
  33. package/dest/global_variable_builder/config.js +0 -2
  34. package/dest/global_variable_builder/global_builder.d.ts +0 -58
  35. package/dest/global_variable_builder/global_builder.d.ts.map +0 -1
  36. package/dest/global_variable_builder/global_builder.js +0 -36
  37. package/dest/global_variable_builder/index.d.ts +0 -12
  38. package/dest/global_variable_builder/index.d.ts.map +0 -1
  39. package/dest/global_variable_builder/index.js +0 -12
  40. package/dest/global_variable_builder/viem-reader.d.ts +0 -16
  41. package/dest/global_variable_builder/viem-reader.d.ts.map +0 -1
  42. package/dest/global_variable_builder/viem-reader.js +0 -37
  43. package/dest/index.d.ts +0 -12
  44. package/dest/index.d.ts.map +0 -1
  45. package/dest/index.js +0 -14
  46. package/dest/mocks/verification_keys.d.ts +0 -28
  47. package/dest/mocks/verification_keys.d.ts.map +0 -1
  48. package/dest/mocks/verification_keys.js +0 -14
  49. package/dest/prover/empty.d.ts +0 -41
  50. package/dest/prover/empty.d.ts.map +0 -1
  51. package/dest/prover/empty.js +0 -57
  52. package/dest/prover/index.d.ts +0 -40
  53. package/dest/prover/index.d.ts.map +0 -1
  54. package/dest/prover/index.js +0 -2
  55. package/dest/publisher/config.d.ts +0 -32
  56. package/dest/publisher/config.d.ts.map +0 -1
  57. package/dest/publisher/config.js +0 -2
  58. package/dest/publisher/index.d.ts +0 -10
  59. package/dest/publisher/index.d.ts.map +0 -1
  60. package/dest/publisher/index.js +0 -11
  61. package/dest/publisher/l1-publisher.d.ts +0 -105
  62. package/dest/publisher/l1-publisher.d.ts.map +0 -1
  63. package/dest/publisher/l1-publisher.js +0 -156
  64. package/dest/publisher/l1-publisher.test.d.ts +0 -2
  65. package/dest/publisher/l1-publisher.test.d.ts.map +0 -1
  66. package/dest/publisher/l1-publisher.test.js +0 -58
  67. package/dest/publisher/viem-tx-sender.d.ts +0 -42
  68. package/dest/publisher/viem-tx-sender.d.ts.map +0 -1
  69. package/dest/publisher/viem-tx-sender.js +0 -118
  70. package/dest/receiver.d.ts +0 -13
  71. package/dest/receiver.d.ts.map +0 -1
  72. package/dest/receiver.js +0 -2
  73. package/dest/sequencer/config.d.ts +0 -26
  74. package/dest/sequencer/config.d.ts.map +0 -1
  75. package/dest/sequencer/config.js +0 -2
  76. package/dest/sequencer/index.d.ts +0 -4
  77. package/dest/sequencer/index.d.ts.map +0 -1
  78. package/dest/sequencer/index.js +0 -4
  79. package/dest/sequencer/processed_tx.d.ts +0 -51
  80. package/dest/sequencer/processed_tx.d.ts.map +0 -1
  81. package/dest/sequencer/processed_tx.js +0 -40
  82. package/dest/sequencer/public_processor.d.ts +0 -75
  83. package/dest/sequencer/public_processor.d.ts.map +0 -1
  84. package/dest/sequencer/public_processor.js +0 -269
  85. package/dest/sequencer/public_processor.test.d.ts +0 -2
  86. package/dest/sequencer/public_processor.test.d.ts.map +0 -1
  87. package/dest/sequencer/public_processor.test.js +0 -164
  88. package/dest/sequencer/sequencer.d.ts +0 -133
  89. package/dest/sequencer/sequencer.d.ts.map +0 -1
  90. package/dest/sequencer/sequencer.js +0 -297
  91. package/dest/sequencer/sequencer.test.d.ts +0 -2
  92. package/dest/sequencer/sequencer.test.d.ts.map +0 -1
  93. package/dest/sequencer/sequencer.test.js +0 -99
  94. package/dest/sequencer/utils.d.ts +0 -7
  95. package/dest/sequencer/utils.d.ts.map +0 -1
  96. package/dest/sequencer/utils.js +0 -12
  97. package/dest/simulator/index.d.ts +0 -43
  98. package/dest/simulator/index.d.ts.map +0 -1
  99. package/dest/simulator/index.js +0 -2
  100. package/dest/simulator/public_executor.d.ts +0 -22
  101. package/dest/simulator/public_executor.d.ts.map +0 -1
  102. package/dest/simulator/public_executor.js +0 -99
  103. package/dest/simulator/public_kernel.d.ts +0 -20
  104. package/dest/simulator/public_kernel.d.ts.map +0 -1
  105. package/dest/simulator/public_kernel.js +0 -27
  106. package/dest/simulator/rollup.d.ts +0 -34
  107. package/dest/simulator/rollup.d.ts.map +0 -1
  108. package/dest/simulator/rollup.js +0 -50
  109. package/dest/utils.d.ts +0 -12
  110. package/dest/utils.d.ts.map +0 -1
  111. package/dest/utils.js +0 -16
@@ -1,133 +0,0 @@
1
- import { GlobalVariables } from '@aztec/circuits.js';
2
- import { Fr } from '@aztec/foundation/fields';
3
- import { P2P } from '@aztec/p2p';
4
- import { L1ToL2MessageSource, L2Block, L2BlockSource, Tx } from '@aztec/types';
5
- import { WorldStateSynchroniser } from '@aztec/world-state';
6
- import { BlockBuilder } from '../block_builder/index.js';
7
- import { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
8
- import { L1Publisher } from '../publisher/l1-publisher.js';
9
- import { SequencerConfig } from './config.js';
10
- import { ProcessedTx } from './processed_tx.js';
11
- import { PublicProcessorFactory } from './public_processor.js';
12
- /**
13
- * Sequencer client
14
- * - Wins a period of time to become the sequencer (depending on finalised protocol).
15
- * - Chooses a set of txs from the tx pool to be in the rollup.
16
- * - Simulate the rollup of txs.
17
- * - Adds proof requests to the request pool (not for this milestone).
18
- * - Receives results to those proofs from the network (repeats as necessary) (not for this milestone).
19
- * - Publishes L1 tx(s) to the rollup contract via RollupPublisher.
20
- */
21
- export declare class Sequencer {
22
- private publisher;
23
- private globalsBuilder;
24
- private p2pClient;
25
- private worldState;
26
- private blockBuilder;
27
- private l2BlockSource;
28
- private l1ToL2MessageSource;
29
- private publicProcessorFactory;
30
- private log;
31
- private runningPromise?;
32
- private pollingIntervalMs;
33
- private maxTxsPerBlock;
34
- private minTxsPerBLock;
35
- private lastPublishedBlock;
36
- private state;
37
- private chainId;
38
- private version;
39
- constructor(publisher: L1Publisher, globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchroniser, blockBuilder: BlockBuilder, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, publicProcessorFactory: PublicProcessorFactory, config: SequencerConfig, log?: import("@aztec/foundation/log").DebugLogger);
40
- /**
41
- * Starts the sequencer and moves to IDLE state. Blocks until the initial sync is complete.
42
- */
43
- start(): Promise<void>;
44
- /**
45
- * Stops the sequencer from processing txs and moves to STOPPED state.
46
- */
47
- stop(): Promise<void>;
48
- /**
49
- * Starts a previously stopped sequencer.
50
- */
51
- restart(): void;
52
- /**
53
- * Returns the current state of the sequencer.
54
- * @returns An object with a state entry with one of SequencerState.
55
- */
56
- status(): {
57
- state: SequencerState;
58
- };
59
- protected initialSync(): Promise<void>;
60
- /**
61
- * Grabs up to maxTxsPerBlock from the p2p client, constructs a block, and pushes it to L1.
62
- */
63
- protected work(): Promise<void>;
64
- /**
65
- * Gets new extended contract data from the txs and publishes it on chain.
66
- * @param validTxs - The set of real transactions being published as part of the block.
67
- * @param block - The L2Block to be published.
68
- */
69
- protected publishExtendedContractData(validTxs: Tx[], block: L2Block): Promise<void>;
70
- /**
71
- * Publishes the L2Block to the rollup contract.
72
- * @param block - The L2Block to be published.
73
- */
74
- protected publishL2Block(block: L2Block): Promise<void>;
75
- protected takeValidTxs(txs: Tx[]): Promise<Tx[]>;
76
- /**
77
- * Returns whether the previous block sent has been mined, and all dependencies have caught up with it.
78
- * @returns Boolean indicating if our dependencies are synced to the latest block.
79
- */
80
- protected isBlockSynced(): Promise<boolean>;
81
- /**
82
- * Pads the set of txs to a power of two and assembles a block by calling the block builder.
83
- * @param txs - Processed txs to include in the next block.
84
- * @param newL1ToL2Messages - L1 to L2 messages to be part of the block.
85
- * @param emptyTx - Empty tx to repeat at the end of the block to pad to a power of two.
86
- * @param globalVariables - Global variables to use in the block.
87
- * @returns The new block.
88
- */
89
- protected buildBlock(txs: ProcessedTx[], newL1ToL2Messages: Fr[], emptyTx: ProcessedTx, globalVariables: GlobalVariables): Promise<L2Block>;
90
- /**
91
- * Calls the archiver to pull upto `NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP` message keys
92
- * (archiver returns the top messages sorted by fees)
93
- * @returns An array of L1 to L2 messages' messageKeys
94
- */
95
- protected getPendingL1ToL2Messages(): Promise<Fr[]>;
96
- /**
97
- * Returns true if one of the transaction nullifiers exist.
98
- * Nullifiers prevent double spends in a private context.
99
- * @param tx - The transaction.
100
- * @returns Whether this is a problematic double spend that the L1 contract would reject.
101
- */
102
- protected isTxDoubleSpend(tx: Tx): Promise<boolean>;
103
- }
104
- /**
105
- * State of the sequencer.
106
- */
107
- export declare enum SequencerState {
108
- /**
109
- * Will move to WAITING_FOR_TXS after a configured amount of time.
110
- */
111
- IDLE = 0,
112
- /**
113
- * 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.
114
- */
115
- WAITING_FOR_TXS = 1,
116
- /**
117
- * Creating a new L2 block. Includes processing public function calls and running rollup circuits. Will move to PUBLISHING_CONTRACT_DATA.
118
- */
119
- CREATING_BLOCK = 2,
120
- /**
121
- * Sending the tx to L1 with encrypted logs and awaiting it to be mined. Will move back to PUBLISHING_BLOCK once finished.
122
- */
123
- PUBLISHING_CONTRACT_DATA = 3,
124
- /**
125
- * Sending the tx to L1 with the L2 block data and awaiting it to be mined. Will move to IDLE.
126
- */
127
- PUBLISHING_BLOCK = 4,
128
- /**
129
- * Sequencer is stopped and not processing any txs from the pool.
130
- */
131
- STOPPED = 5
132
- }
133
- //# sourceMappingURL=sequencer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,EAAgB,EAAE,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAoB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAI9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;;;;;GAQG;AACH,qBAAa,SAAS;IAWlB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,sBAAsB;IAE9B,OAAO,CAAC,GAAG;IAnBb,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;gBAGV,SAAS,EAAE,WAAW,EACtB,cAAc,EAAE,qBAAqB,EACrC,SAAS,EAAE,GAAG,EACd,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,sBAAsB,EAAE,sBAAsB,EACtD,MAAM,EAAE,eAAe,EACf,GAAG,8CAAuC;IAapD;;OAEG;IACU,KAAK;IASlB;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC;;OAEG;IACI,OAAO;IAMd;;;OAGG;IACI,MAAM;;;cAIG,WAAW;IAK3B;;OAEG;cACa,IAAI;IAsEpB;;;;OAIG;cACa,2BAA2B,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO;IAwB1E;;;OAGG;cACa,cAAc,CAAC,KAAK,EAAE,OAAO;cAa7B,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE;IA4BtC;;;OAGG;cACa,aAAa;IAS7B;;;;;;;OAOG;cACa,UAAU,CACxB,GAAG,EAAE,WAAW,EAAE,EAClB,iBAAiB,EAAE,EAAE,EAAE,EACvB,OAAO,EAAE,WAAW,EACpB,eAAe,EAAE,eAAe;IAalC;;;;OAIG;cACa,wBAAwB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAIzD;;;;;OAKG;cACa,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAgB1D;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB;;OAEG;IACH,IAAI,IAAA;IACJ;;OAEG;IACH,eAAe,IAAA;IACf;;OAEG;IACH,cAAc,IAAA;IACd;;OAEG;IACH,wBAAwB,IAAA;IACxB;;OAEG;IACH,gBAAgB,IAAA;IAChB;;OAEG;IACH,OAAO,IAAA;CACR"}
@@ -1,297 +0,0 @@
1
- import { GlobalVariables } from '@aztec/circuits.js';
2
- import { Fr } from '@aztec/foundation/fields';
3
- import { createDebugLogger } from '@aztec/foundation/log';
4
- import { RunningPromise } from '@aztec/foundation/running-promise';
5
- import { MerkleTreeId, Tx } from '@aztec/types';
6
- import times from 'lodash.times';
7
- import { ceilPowerOfTwo } from '../utils.js';
8
- /**
9
- * Sequencer client
10
- * - Wins a period of time to become the sequencer (depending on finalised protocol).
11
- * - Chooses a set of txs from the tx pool to be in the rollup.
12
- * - Simulate the rollup of txs.
13
- * - Adds proof requests to the request pool (not for this milestone).
14
- * - Receives results to those proofs from the network (repeats as necessary) (not for this milestone).
15
- * - Publishes L1 tx(s) to the rollup contract via RollupPublisher.
16
- */
17
- export class Sequencer {
18
- constructor(publisher, globalsBuilder, p2pClient, worldState, blockBuilder, l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, config, log = createDebugLogger('aztec:sequencer')) {
19
- this.publisher = publisher;
20
- this.globalsBuilder = globalsBuilder;
21
- this.p2pClient = p2pClient;
22
- this.worldState = worldState;
23
- this.blockBuilder = blockBuilder;
24
- this.l2BlockSource = l2BlockSource;
25
- this.l1ToL2MessageSource = l1ToL2MessageSource;
26
- this.publicProcessorFactory = publicProcessorFactory;
27
- this.log = log;
28
- this.maxTxsPerBlock = 32;
29
- this.minTxsPerBLock = 1;
30
- this.lastPublishedBlock = 0;
31
- this.state = SequencerState.STOPPED;
32
- this.pollingIntervalMs = config.transactionPollingIntervalMS ?? 1000;
33
- if (config.maxTxsPerBlock) {
34
- this.maxTxsPerBlock = config.maxTxsPerBlock;
35
- }
36
- if (config.minTxsPerBlock) {
37
- this.minTxsPerBLock = config.minTxsPerBlock;
38
- }
39
- this.chainId = new Fr(config.chainId);
40
- this.version = new Fr(config.version);
41
- }
42
- /**
43
- * Starts the sequencer and moves to IDLE state. Blocks until the initial sync is complete.
44
- */
45
- async start() {
46
- await this.initialSync();
47
- this.runningPromise = new RunningPromise(this.work.bind(this), this.pollingIntervalMs);
48
- this.runningPromise.start();
49
- this.state = SequencerState.IDLE;
50
- this.log('Sequencer started');
51
- }
52
- /**
53
- * Stops the sequencer from processing txs and moves to STOPPED state.
54
- */
55
- async stop() {
56
- await this.runningPromise?.stop();
57
- this.publisher.interrupt();
58
- this.state = SequencerState.STOPPED;
59
- this.log('Stopped sequencer');
60
- }
61
- /**
62
- * Starts a previously stopped sequencer.
63
- */
64
- restart() {
65
- this.log('Restarting sequencer');
66
- this.runningPromise.start();
67
- this.state = SequencerState.IDLE;
68
- }
69
- /**
70
- * Returns the current state of the sequencer.
71
- * @returns An object with a state entry with one of SequencerState.
72
- */
73
- status() {
74
- return { state: this.state };
75
- }
76
- async initialSync() {
77
- // TODO: Should we wait for worldstate to be ready, or is the caller expected to run await start?
78
- this.lastPublishedBlock = await this.worldState.status().then((s) => s.syncedToL2Block);
79
- }
80
- /**
81
- * Grabs up to maxTxsPerBlock from the p2p client, constructs a block, and pushes it to L1.
82
- */
83
- async work() {
84
- try {
85
- // Update state when the previous block has been synced
86
- const prevBlockSynced = await this.isBlockSynced();
87
- if (prevBlockSynced && this.state === SequencerState.PUBLISHING_BLOCK) {
88
- this.log(`Block has been synced`);
89
- this.state = SequencerState.IDLE;
90
- }
91
- // Do not go forward with new block if the previous one has not been mined and processed
92
- if (!prevBlockSynced)
93
- return;
94
- this.state = SequencerState.WAITING_FOR_TXS;
95
- // Get txs to build the new block
96
- const pendingTxs = await this.p2pClient.getTxs();
97
- if (pendingTxs.length < this.minTxsPerBLock)
98
- return;
99
- // Filter out invalid txs
100
- const validTxs = await this.takeValidTxs(pendingTxs);
101
- if (validTxs.length < this.minTxsPerBLock) {
102
- return;
103
- }
104
- const blockNumber = (await this.l2BlockSource.getBlockNumber()) + 1;
105
- this.log.info(`Building block ${blockNumber} with ${validTxs.length} transactions...`);
106
- this.state = SequencerState.CREATING_BLOCK;
107
- const newGlobalVariables = await this.globalsBuilder.buildGlobalVariables(new Fr(blockNumber));
108
- const prevGlobalVariables = (await this.l2BlockSource.getL2Block(-1))?.globalVariables ?? GlobalVariables.empty();
109
- // Process txs and drop the ones that fail processing
110
- // We create a fresh processor each time to reset any cached state (eg storage writes)
111
- const processor = await this.publicProcessorFactory.create(prevGlobalVariables, newGlobalVariables);
112
- const [processedTxs, failedTxs] = await processor.process(validTxs);
113
- if (failedTxs.length > 0) {
114
- const failedTxData = failedTxs.map(fail => fail.tx);
115
- this.log(`Dropping failed txs ${(await Tx.getHashes(failedTxData)).join(', ')}`);
116
- await this.p2pClient.deleteTxs(await Tx.getHashes(failedTxData));
117
- }
118
- if (processedTxs.length === 0) {
119
- this.log('No txs processed correctly to build block. Exiting');
120
- return;
121
- }
122
- // Get l1 to l2 messages from the contract
123
- this.log('Requesting L1 to L2 messages from contract');
124
- const l1ToL2Messages = await this.getPendingL1ToL2Messages();
125
- this.log('Successfully retrieved L1 to L2 messages from contract');
126
- // Build the new block by running the rollup circuits
127
- this.log(`Assembling block with txs ${processedTxs.map(tx => tx.hash).join(', ')}`);
128
- const emptyTx = await processor.makeEmptyProcessedTx();
129
- const block = await this.buildBlock(processedTxs, l1ToL2Messages, emptyTx, newGlobalVariables);
130
- this.log(`Assembled block ${block.number}`);
131
- await this.publishExtendedContractData(validTxs, block);
132
- await this.publishL2Block(block);
133
- this.log.info(`Submitted rollup block ${block.number} with ${processedTxs.length} transactions`);
134
- }
135
- catch (err) {
136
- this.log.error(err);
137
- this.log.error(`Rolling back world state DB`);
138
- await this.worldState.getLatest().rollback();
139
- }
140
- }
141
- /**
142
- * Gets new extended contract data from the txs and publishes it on chain.
143
- * @param validTxs - The set of real transactions being published as part of the block.
144
- * @param block - The L2Block to be published.
145
- */
146
- async publishExtendedContractData(validTxs, block) {
147
- // Publishes contract data for txs to the network and awaits the tx to be mined
148
- this.state = SequencerState.PUBLISHING_CONTRACT_DATA;
149
- const newContractData = validTxs
150
- .map(tx => {
151
- // Currently can only have 1 new contract per tx
152
- const newContract = tx.data?.end.newContracts[0];
153
- if (newContract) {
154
- return tx.newContracts[0];
155
- }
156
- })
157
- .filter((cd) => cd !== undefined);
158
- const blockHash = block.getCalldataHash();
159
- this.log(`Publishing extended contract data with block hash ${blockHash.toString('hex')}`);
160
- const publishedContractData = await this.publisher.processNewContractData(block.number, blockHash, newContractData);
161
- if (publishedContractData) {
162
- this.log(`Successfully published new contract data for block ${block.number}`);
163
- }
164
- else if (!publishedContractData && newContractData.length) {
165
- this.log(`Failed to publish new contract data for block ${block.number}`);
166
- }
167
- }
168
- /**
169
- * Publishes the L2Block to the rollup contract.
170
- * @param block - The L2Block to be published.
171
- */
172
- async publishL2Block(block) {
173
- // Publishes new block to the network and awaits the tx to be mined
174
- this.state = SequencerState.PUBLISHING_BLOCK;
175
- const publishedL2Block = await this.publisher.processL2Block(block);
176
- if (publishedL2Block) {
177
- this.log(`Successfully published block ${block.number}`);
178
- this.lastPublishedBlock = block.number;
179
- }
180
- else {
181
- throw new Error(`Failed to publish block`);
182
- }
183
- }
184
- // TODO: It should be responsibility of the P2P layer to validate txs before passing them on here
185
- async takeValidTxs(txs) {
186
- const validTxs = [];
187
- const doubleSpendTxs = [];
188
- // Process txs until we get to maxTxsPerBlock, rejecting double spends in the process
189
- for (const tx of txs) {
190
- // TODO(AD) - eventually we should add a limit to how many transactions we
191
- // skip in this manner and do something more DDOS-proof (like letting the transaction fail and pay a fee).
192
- if (await this.isTxDoubleSpend(tx)) {
193
- this.log(`Deleting double spend tx ${await tx.getTxHash()}`);
194
- doubleSpendTxs.push(tx);
195
- continue;
196
- }
197
- validTxs.push(tx);
198
- if (validTxs.length >= this.maxTxsPerBlock) {
199
- break;
200
- }
201
- }
202
- // Make sure we remove these from the tx pool so we do not consider it again
203
- if (doubleSpendTxs.length > 0) {
204
- await this.p2pClient.deleteTxs(await Tx.getHashes([...doubleSpendTxs]));
205
- }
206
- return validTxs;
207
- }
208
- /**
209
- * Returns whether the previous block sent has been mined, and all dependencies have caught up with it.
210
- * @returns Boolean indicating if our dependencies are synced to the latest block.
211
- */
212
- async isBlockSynced() {
213
- const syncedBlocks = await Promise.all([
214
- this.worldState.status().then((s) => s.syncedToL2Block),
215
- this.p2pClient.getStatus().then(s => s.syncedToL2Block),
216
- ]);
217
- const min = Math.min(...syncedBlocks);
218
- return min >= this.lastPublishedBlock;
219
- }
220
- /**
221
- * Pads the set of txs to a power of two and assembles a block by calling the block builder.
222
- * @param txs - Processed txs to include in the next block.
223
- * @param newL1ToL2Messages - L1 to L2 messages to be part of the block.
224
- * @param emptyTx - Empty tx to repeat at the end of the block to pad to a power of two.
225
- * @param globalVariables - Global variables to use in the block.
226
- * @returns The new block.
227
- */
228
- async buildBlock(txs, newL1ToL2Messages, emptyTx, globalVariables) {
229
- // Pad the txs array with empty txs to be a power of two, at least 4
230
- const txsTargetSize = Math.max(ceilPowerOfTwo(txs.length), 4);
231
- const emptyTxCount = txsTargetSize - txs.length;
232
- const allTxs = [...txs, ...times(emptyTxCount, () => emptyTx)];
233
- this.log(`Building block ${globalVariables.blockNumber}`);
234
- const [block] = await this.blockBuilder.buildL2Block(globalVariables, allTxs, newL1ToL2Messages);
235
- return block;
236
- }
237
- /**
238
- * Calls the archiver to pull upto `NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP` message keys
239
- * (archiver returns the top messages sorted by fees)
240
- * @returns An array of L1 to L2 messages' messageKeys
241
- */
242
- async getPendingL1ToL2Messages() {
243
- return await this.l1ToL2MessageSource.getPendingL1ToL2Messages();
244
- }
245
- /**
246
- * Returns true if one of the transaction nullifiers exist.
247
- * Nullifiers prevent double spends in a private context.
248
- * @param tx - The transaction.
249
- * @returns Whether this is a problematic double spend that the L1 contract would reject.
250
- */
251
- async isTxDoubleSpend(tx) {
252
- // eslint-disable-next-line @typescript-eslint/await-thenable
253
- for (const nullifier of tx.data.end.newNullifiers) {
254
- // Skip nullifier if it's empty
255
- if (nullifier.isZero())
256
- continue;
257
- // TODO(AD): this is an exhaustive search currently
258
- if ((await this.worldState.getLatest().findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer())) !==
259
- undefined) {
260
- // Our nullifier tree has this nullifier already - this transaction is a double spend / not well-formed
261
- return true;
262
- }
263
- }
264
- return false;
265
- }
266
- }
267
- /**
268
- * State of the sequencer.
269
- */
270
- export var SequencerState;
271
- (function (SequencerState) {
272
- /**
273
- * Will move to WAITING_FOR_TXS after a configured amount of time.
274
- */
275
- SequencerState[SequencerState["IDLE"] = 0] = "IDLE";
276
- /**
277
- * 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.
278
- */
279
- SequencerState[SequencerState["WAITING_FOR_TXS"] = 1] = "WAITING_FOR_TXS";
280
- /**
281
- * Creating a new L2 block. Includes processing public function calls and running rollup circuits. Will move to PUBLISHING_CONTRACT_DATA.
282
- */
283
- SequencerState[SequencerState["CREATING_BLOCK"] = 2] = "CREATING_BLOCK";
284
- /**
285
- * Sending the tx to L1 with encrypted logs and awaiting it to be mined. Will move back to PUBLISHING_BLOCK once finished.
286
- */
287
- SequencerState[SequencerState["PUBLISHING_CONTRACT_DATA"] = 3] = "PUBLISHING_CONTRACT_DATA";
288
- /**
289
- * Sending the tx to L1 with the L2 block data and awaiting it to be mined. Will move to IDLE.
290
- */
291
- SequencerState[SequencerState["PUBLISHING_BLOCK"] = 4] = "PUBLISHING_BLOCK";
292
- /**
293
- * Sequencer is stopped and not processing any txs from the pool.
294
- */
295
- SequencerState[SequencerState["STOPPED"] = 5] = "STOPPED";
296
- })(SequencerState || (SequencerState = {}));
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbkUsT0FBTyxFQUErQyxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzdGLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUtqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzdDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFVcEIsWUFDVSxTQUFzQixFQUN0QixjQUFxQyxFQUNyQyxTQUFjLEVBQ2QsVUFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLHNCQUE4QyxFQUN0RCxNQUF1QixFQUNmLE1BQU0saUJBQWlCLENBQUMsaUJBQWlCLENBQUM7UUFUMUMsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUNkLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5QyxRQUFHLEdBQUgsR0FBRyxDQUF1QztRQWpCNUMsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsbUJBQWMsR0FBRyxD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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=sequencer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sequencer.test.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.test.ts"],"names":[],"mappings":""}
@@ -1,99 +0,0 @@
1
- import { Fr, GlobalVariables, HistoricBlockData, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, makeEmptyProof, } from '@aztec/circuits.js';
2
- import { P2PClientState } from '@aztec/p2p';
3
- import { L2Block, MerkleTreeId, Tx, TxHash, mockTx } from '@aztec/types';
4
- import { WorldStateRunningState } from '@aztec/world-state';
5
- import { mock } from 'jest-mock-extended';
6
- import times from 'lodash.times';
7
- import { makeEmptyProcessedTx, makeProcessedTx } from './processed_tx.js';
8
- import { Sequencer } from './sequencer.js';
9
- describe('sequencer', () => {
10
- let publisher;
11
- let globalVariableBuilder;
12
- let p2p;
13
- let worldState;
14
- let blockBuilder;
15
- let merkleTreeOps;
16
- let publicProcessor;
17
- let l2BlockSource;
18
- let l1ToL2MessageSource;
19
- let publicProcessorFactory;
20
- let lastBlockNumber;
21
- let sequencer;
22
- const chainId = Fr.ZERO;
23
- const version = Fr.ZERO;
24
- beforeEach(() => {
25
- lastBlockNumber = 0;
26
- publisher = mock();
27
- globalVariableBuilder = mock();
28
- merkleTreeOps = mock();
29
- blockBuilder = mock();
30
- p2p = mock({
31
- getStatus: () => Promise.resolve({ state: P2PClientState.IDLE, syncedToL2Block: lastBlockNumber }),
32
- });
33
- worldState = mock({
34
- getLatest: () => merkleTreeOps,
35
- status: () => Promise.resolve({ state: WorldStateRunningState.IDLE, syncedToL2Block: lastBlockNumber }),
36
- });
37
- publicProcessor = mock({
38
- process: async (txs) => [await Promise.all(txs.map(tx => makeProcessedTx(tx))), []],
39
- makeEmptyProcessedTx: () => makeEmptyProcessedTx(HistoricBlockData.empty(), chainId, version),
40
- });
41
- publicProcessorFactory = mock({
42
- create: (_, __) => Promise.resolve(publicProcessor),
43
- });
44
- l2BlockSource = mock({
45
- getBlockNumber: () => Promise.resolve(lastBlockNumber),
46
- });
47
- l1ToL2MessageSource = mock({
48
- getPendingL1ToL2Messages: () => Promise.resolve(Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(Fr.ZERO)),
49
- });
50
- sequencer = new TestSubject(publisher, globalVariableBuilder, p2p, worldState, blockBuilder, l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, {
51
- chainId: Number(chainId.value),
52
- version: Number(version.value),
53
- });
54
- });
55
- it('builds a block out of a single tx', async () => {
56
- const tx = mockTx();
57
- const block = L2Block.random(lastBlockNumber + 1);
58
- const proof = makeEmptyProof();
59
- p2p.getTxs.mockResolvedValueOnce([tx]);
60
- blockBuilder.buildL2Block.mockResolvedValueOnce([block, proof]);
61
- publisher.processL2Block.mockResolvedValueOnce(true);
62
- globalVariableBuilder.buildGlobalVariables.mockResolvedValueOnce(new GlobalVariables(chainId, version, new Fr(lastBlockNumber + 1), Fr.ZERO));
63
- await sequencer.initialSync();
64
- await sequencer.work();
65
- const expectedTxHashes = [...(await Tx.getHashes([tx])), ...times(3, () => TxHash.ZERO)];
66
- expect(blockBuilder.buildL2Block).toHaveBeenCalledWith(new GlobalVariables(chainId, version, new Fr(lastBlockNumber + 1), Fr.ZERO), expectedTxHashes.map(hash => expect.objectContaining({ hash })), Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(0n)));
67
- expect(publisher.processL2Block).toHaveBeenCalledWith(block);
68
- });
69
- it('builds a block out of several txs rejecting double spends', async () => {
70
- const txs = [mockTx(0x10000), mockTx(0x20000), mockTx(0x30000)];
71
- const doubleSpendTx = txs[1];
72
- const block = L2Block.random(lastBlockNumber + 1);
73
- const proof = makeEmptyProof();
74
- p2p.getTxs.mockResolvedValueOnce(txs);
75
- blockBuilder.buildL2Block.mockResolvedValueOnce([block, proof]);
76
- publisher.processL2Block.mockResolvedValueOnce(true);
77
- globalVariableBuilder.buildGlobalVariables.mockResolvedValueOnce(new GlobalVariables(chainId, version, new Fr(lastBlockNumber + 1), Fr.ZERO));
78
- // We make a nullifier from tx1 a part of the nullifier tree, so it gets rejected as double spend
79
- const doubleSpendNullifier = doubleSpendTx.data.end.newNullifiers[0].toBuffer();
80
- merkleTreeOps.findLeafIndex.mockImplementation((treeId, value) => {
81
- return Promise.resolve(treeId === MerkleTreeId.NULLIFIER_TREE && value.equals(doubleSpendNullifier) ? 1n : undefined);
82
- });
83
- await sequencer.initialSync();
84
- await sequencer.work();
85
- const expectedTxHashes = [...(await Tx.getHashes([txs[0], txs[2]])), TxHash.ZERO, TxHash.ZERO];
86
- expect(blockBuilder.buildL2Block).toHaveBeenCalledWith(new GlobalVariables(chainId, version, new Fr(lastBlockNumber + 1), Fr.ZERO), expectedTxHashes.map(hash => expect.objectContaining({ hash })), Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(0n)));
87
- expect(publisher.processL2Block).toHaveBeenCalledWith(block);
88
- expect(p2p.deleteTxs).toHaveBeenCalledWith([await doubleSpendTx.getTxHash()]);
89
- });
90
- });
91
- class TestSubject extends Sequencer {
92
- work() {
93
- return super.work();
94
- }
95
- initialSync() {
96
- return super.initialSync();
97
- }
98
- }
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxFQUFFLEVBQ0YsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixtQ0FBbUMsRUFDbkMsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFPLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRCxPQUFPLEVBQXVCLE9BQU8sRUFBaUIsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdHLE9BQU8sRUFBd0Isc0JBQXNCLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFFMUcsT0FBTyxFQUFhLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUtqQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQ3pCLElBQUksU0FBaUMsQ0FBQztJQUN0QyxJQUFJLHFCQUF1RCxDQUFDO0lBQzVELElBQUksR0FBbUIsQ0FBQztJQUN4QixJQUFJLFVBQTZDLENBQUM7SUFDbEQsSUFBSSxZQUFxQyxDQUFDO0lBQzFDLElBQUksYUFBOEMsQ0FBQztJQUNuRCxJQUFJLGVBQTJDLENBQUM7SUFDaEQsSUFBSSxhQUF1QyxDQUFDO0lBQzVDLElBQUksbUJBQW1ELENBQUM7SUFDeEQsSUFBSSxzQkFBeUQsQ0FBQztJQUU5RCxJQUFJLGVBQXVCLENBQUM7SUFFNUIsSUFBSSxTQUFzQixDQUFDO0lBRTNCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDeEIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUV4QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUVwQixTQUFTLEdBQUcsSUFBSSxFQUFlLENBQUM7UUFDaEMscUJBQXFCLEdBQUcsSUFBSSxFQUF5QixDQUFDO1FBQ3RELGFBQWEsR0FBRyxJQUFJLEVBQXdCLENBQUM7UUFDN0MsWUFBWSxHQUFHLElBQUksRUFBZ0IsQ0FBQztRQUVwQyxHQUFHLEdBQUcsSUFBSSxDQUFNO1lBQ2QsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLENBQUM7U0FDbkcsQ0FBQyxDQUFDO1FBRUgsVUFBVSxHQUFHLElBQUksQ0FBeUI7WUFDeEMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWE7WUFDOUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsQ0FBQztTQUN4RyxDQUFDLENBQUM7UUFFSCxlQUFlLEdBQUcsSUFBSSxDQUFrQjtZQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pGLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7U0FDOUYsQ0FBQyxDQUFDO1FBRUgsc0JBQXNCLEdBQUcsSUFBSSxDQUF5QjtZQUNwRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUNwRCxDQUFDLENBQUM7UUFFSCxhQUFhLEdBQUcsSUFBSSxDQUFnQjtZQUNsQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7U0FDdkQsQ0FBQyxDQUFDO1FBRUgsbUJBQW1CLEdBQUcsSUFBSSxDQUFzQjtZQUM5Qyx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUcsQ0FBQyxDQUFDO1FBRUgsU0FBUyxHQUFHLElBQUksV0FBVyxDQUN6QixTQUFTLEVBQ1QscUJBQXFCLEVBQ3JCLEdBQUcsRUFDSCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCO1lBQ0UsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzlCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUMvQixDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRCxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUNwQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUvQixHQUFHLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxZQUFZLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEUsU0FBUyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FDOUQsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUM1RSxDQUFDO1FBRUYsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFdkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXpGLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsb0JBQW9CLENBQ3BELElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDM0UsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvRCxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDNUQsQ0FBQztRQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUvQixHQUFHLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLFlBQVksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRSxTQUFTLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUM5RCxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQzVFLENBQUM7UUFFRixpR0FBaUc7UUFDakcsTUFBTSxvQkFBb0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEYsYUFBYSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQW9CLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDckYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUNwQixNQUFNLEtBQUssWUFBWSxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUM5RixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV2QixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0YsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxvQkFBb0IsQ0FDcEQsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUMzRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQy9ELEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM1RCxDQUFDO1FBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLFdBQVksU0FBUSxTQUFTO0lBQzFCLElBQUk7UUFDVCxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0YifQ==
@@ -1,7 +0,0 @@
1
- import { GlobalVariables, HistoricBlockData } from '@aztec/circuits.js';
2
- import { MerkleTreeOperations } from '@aztec/world-state';
3
- /**
4
- * Fetches the private, nullifier, contract tree and l1 to l2 messages tree roots from a given db and assembles a CombinedHistoricTreeRoots object.
5
- */
6
- export declare function getHistoricBlockData(db: MerkleTreeOperations, prevBlockGlobalVariables?: GlobalVariables): Promise<HistoricBlockData>;
7
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/sequencer/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,oBAAoB,EACxB,wBAAwB,GAAE,eAAyC,8BAgBpE"}
@@ -1,12 +0,0 @@
1
- import { CircuitsWasm, Fr, GlobalVariables, HistoricBlockData } from '@aztec/circuits.js';
2
- import { computeGlobalsHash } from '@aztec/circuits.js/abis';
3
- /**
4
- * Fetches the private, nullifier, contract tree and l1 to l2 messages tree roots from a given db and assembles a CombinedHistoricTreeRoots object.
5
- */
6
- export async function getHistoricBlockData(db, prevBlockGlobalVariables = GlobalVariables.empty()) {
7
- const wasm = await CircuitsWasm.get();
8
- const prevGlobalsHash = computeGlobalsHash(wasm, prevBlockGlobalVariables);
9
- const roots = await db.getTreeRoots();
10
- return new HistoricBlockData(Fr.fromBuffer(roots.privateDataTreeRoot), Fr.fromBuffer(roots.nullifierTreeRoot), Fr.fromBuffer(roots.contractDataTreeRoot), Fr.fromBuffer(roots.l1Tol2MessagesTreeRoot), Fr.fromBuffer(roots.blocksTreeRoot), Fr.ZERO, Fr.fromBuffer(roots.publicDataTreeRoot), prevGlobalsHash);
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsRUFBd0IsRUFDeEIsMkJBQTRDLGVBQWUsQ0FBQyxLQUFLLEVBQUU7SUFFbkUsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEMsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDM0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEMsT0FBTyxJQUFJLGlCQUFpQixDQUMxQixFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUN4QyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUN0QyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUN6QyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxFQUMzQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFDbkMsRUFBRSxDQUFDLElBQUksRUFDUCxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUN2QyxlQUFlLENBQ2hCLENBQUM7QUFDSixDQUFDIn0=
@@ -1,43 +0,0 @@
1
- import { BaseOrMergeRollupPublicInputs, BaseRollupInputs, MergeRollupInputs, PublicKernelInputs, PublicKernelPublicInputs, RootRollupInputs, RootRollupPublicInputs } from '@aztec/circuits.js';
2
- export { getPublicExecutor } from './public_executor.js';
3
- /**
4
- * Circuit simulator for the rollup circuits.
5
- */
6
- export interface RollupSimulator {
7
- /**
8
- * Simulates the base rollup circuit from its inputs.
9
- * @param input - Inputs to the circuit.
10
- * @returns The public inputs as outputs of the simulation.
11
- */
12
- baseRollupCircuit(input: BaseRollupInputs): Promise<BaseOrMergeRollupPublicInputs>;
13
- /**
14
- * Simulates the merge rollup circuit from its inputs.
15
- * @param input - Inputs to the circuit.
16
- * @returns The public inputs as outputs of the simulation.
17
- */
18
- mergeRollupCircuit(input: MergeRollupInputs): Promise<BaseOrMergeRollupPublicInputs>;
19
- /**
20
- * Simulates the root rollup circuit from its inputs.
21
- * @param input - Inputs to the circuit.
22
- * @returns The public inputs as outputs of the simulation.
23
- */
24
- rootRollupCircuit(input: RootRollupInputs): Promise<RootRollupPublicInputs>;
25
- }
26
- /**
27
- * Circuit simulator for the public kernel circuits.
28
- */
29
- export interface PublicKernelCircuitSimulator {
30
- /**
31
- * Simulates the public kernel circuit (with a previous private kernel circuit run) from its inputs.
32
- * @param inputs - Inputs to the circuit.
33
- * @returns The public inputs as outputs of the simulation.
34
- */
35
- publicKernelCircuitPrivateInput(inputs: PublicKernelInputs): Promise<PublicKernelPublicInputs>;
36
- /**
37
- * Simulates the public kernel circuit (with no previous public kernel circuit run) from its inputs.
38
- * @param inputs - Inputs to the circuit.
39
- * @returns The public inputs as outputs of the simulation.
40
- */
41
- publicKernelCircuitNonFirstIteration(inputs: PublicKernelInputs): Promise<PublicKernelPublicInputs>;
42
- }
43
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simulator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACnF;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACrF;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,+BAA+B,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC/F;;;;OAIG;IACH,oCAAoC,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACrG"}