@aztec/sequencer-client 0.6.7 → 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 (112) hide show
  1. package/Dockerfile +21 -0
  2. package/package.json +10 -10
  3. package/src/block_builder/solo_block_builder.test.ts +8 -8
  4. package/src/block_builder/solo_block_builder.ts +114 -44
  5. package/src/block_builder/types.ts +1 -1
  6. package/src/publisher/viem-tx-sender.ts +4 -1
  7. package/src/sequencer/sequencer.ts +18 -6
  8. package/src/simulator/public_executor.ts +2 -16
  9. package/src/simulator/rollup.ts +25 -6
  10. package/.tsbuildinfo +0 -1
  11. package/dest/block_builder/index.d.ts +0 -19
  12. package/dest/block_builder/index.d.ts.map +0 -1
  13. package/dest/block_builder/index.js +0 -2
  14. package/dest/block_builder/solo_block_builder.d.ts +0 -76
  15. package/dest/block_builder/solo_block_builder.d.ts.map +0 -1
  16. package/dest/block_builder/solo_block_builder.js +0 -452
  17. package/dest/block_builder/solo_block_builder.test.d.ts +0 -3
  18. package/dest/block_builder/solo_block_builder.test.d.ts.map +0 -1
  19. package/dest/block_builder/solo_block_builder.test.js +0 -277
  20. package/dest/block_builder/types.d.ts +0 -12
  21. package/dest/block_builder/types.d.ts.map +0 -1
  22. package/dest/block_builder/types.js +0 -2
  23. package/dest/client/index.d.ts +0 -2
  24. package/dest/client/index.d.ts.map +0 -1
  25. package/dest/client/index.js +0 -2
  26. package/dest/client/sequencer-client.d.ts +0 -32
  27. package/dest/client/sequencer-client.d.ts.map +0 -1
  28. package/dest/client/sequencer-client.js +0 -47
  29. package/dest/config.d.ts +0 -12
  30. package/dest/config.d.ts.map +0 -1
  31. package/dest/config.js +0 -28
  32. package/dest/global_variable_builder/config.d.ts +0 -19
  33. package/dest/global_variable_builder/config.d.ts.map +0 -1
  34. package/dest/global_variable_builder/config.js +0 -2
  35. package/dest/global_variable_builder/global_builder.d.ts +0 -58
  36. package/dest/global_variable_builder/global_builder.d.ts.map +0 -1
  37. package/dest/global_variable_builder/global_builder.js +0 -36
  38. package/dest/global_variable_builder/index.d.ts +0 -12
  39. package/dest/global_variable_builder/index.d.ts.map +0 -1
  40. package/dest/global_variable_builder/index.js +0 -12
  41. package/dest/global_variable_builder/viem-reader.d.ts +0 -16
  42. package/dest/global_variable_builder/viem-reader.d.ts.map +0 -1
  43. package/dest/global_variable_builder/viem-reader.js +0 -37
  44. package/dest/index.d.ts +0 -12
  45. package/dest/index.d.ts.map +0 -1
  46. package/dest/index.js +0 -14
  47. package/dest/mocks/verification_keys.d.ts +0 -28
  48. package/dest/mocks/verification_keys.d.ts.map +0 -1
  49. package/dest/mocks/verification_keys.js +0 -14
  50. package/dest/prover/empty.d.ts +0 -41
  51. package/dest/prover/empty.d.ts.map +0 -1
  52. package/dest/prover/empty.js +0 -57
  53. package/dest/prover/index.d.ts +0 -40
  54. package/dest/prover/index.d.ts.map +0 -1
  55. package/dest/prover/index.js +0 -2
  56. package/dest/publisher/config.d.ts +0 -32
  57. package/dest/publisher/config.d.ts.map +0 -1
  58. package/dest/publisher/config.js +0 -2
  59. package/dest/publisher/index.d.ts +0 -10
  60. package/dest/publisher/index.d.ts.map +0 -1
  61. package/dest/publisher/index.js +0 -11
  62. package/dest/publisher/l1-publisher.d.ts +0 -105
  63. package/dest/publisher/l1-publisher.d.ts.map +0 -1
  64. package/dest/publisher/l1-publisher.js +0 -156
  65. package/dest/publisher/l1-publisher.test.d.ts +0 -2
  66. package/dest/publisher/l1-publisher.test.d.ts.map +0 -1
  67. package/dest/publisher/l1-publisher.test.js +0 -58
  68. package/dest/publisher/viem-tx-sender.d.ts +0 -42
  69. package/dest/publisher/viem-tx-sender.d.ts.map +0 -1
  70. package/dest/publisher/viem-tx-sender.js +0 -118
  71. package/dest/receiver.d.ts +0 -13
  72. package/dest/receiver.d.ts.map +0 -1
  73. package/dest/receiver.js +0 -2
  74. package/dest/sequencer/config.d.ts +0 -26
  75. package/dest/sequencer/config.d.ts.map +0 -1
  76. package/dest/sequencer/config.js +0 -2
  77. package/dest/sequencer/index.d.ts +0 -4
  78. package/dest/sequencer/index.d.ts.map +0 -1
  79. package/dest/sequencer/index.js +0 -4
  80. package/dest/sequencer/processed_tx.d.ts +0 -51
  81. package/dest/sequencer/processed_tx.d.ts.map +0 -1
  82. package/dest/sequencer/processed_tx.js +0 -40
  83. package/dest/sequencer/public_processor.d.ts +0 -75
  84. package/dest/sequencer/public_processor.d.ts.map +0 -1
  85. package/dest/sequencer/public_processor.js +0 -269
  86. package/dest/sequencer/public_processor.test.d.ts +0 -2
  87. package/dest/sequencer/public_processor.test.d.ts.map +0 -1
  88. package/dest/sequencer/public_processor.test.js +0 -164
  89. package/dest/sequencer/sequencer.d.ts +0 -133
  90. package/dest/sequencer/sequencer.d.ts.map +0 -1
  91. package/dest/sequencer/sequencer.js +0 -297
  92. package/dest/sequencer/sequencer.test.d.ts +0 -2
  93. package/dest/sequencer/sequencer.test.d.ts.map +0 -1
  94. package/dest/sequencer/sequencer.test.js +0 -99
  95. package/dest/sequencer/utils.d.ts +0 -7
  96. package/dest/sequencer/utils.d.ts.map +0 -1
  97. package/dest/sequencer/utils.js +0 -12
  98. package/dest/simulator/index.d.ts +0 -43
  99. package/dest/simulator/index.d.ts.map +0 -1
  100. package/dest/simulator/index.js +0 -2
  101. package/dest/simulator/public_executor.d.ts +0 -22
  102. package/dest/simulator/public_executor.d.ts.map +0 -1
  103. package/dest/simulator/public_executor.js +0 -99
  104. package/dest/simulator/public_kernel.d.ts +0 -20
  105. package/dest/simulator/public_kernel.d.ts.map +0 -1
  106. package/dest/simulator/public_kernel.js +0 -27
  107. package/dest/simulator/rollup.d.ts +0 -33
  108. package/dest/simulator/rollup.d.ts.map +0 -1
  109. package/dest/simulator/rollup.js +0 -41
  110. package/dest/utils.d.ts +0 -12
  111. package/dest/utils.d.ts.map +0 -1
  112. package/dest/utils.js +0 -16
@@ -1,277 +0,0 @@
1
- import { AppendOnlyTreeSnapshot, BaseRollupInputs, CircuitsWasm, Fr, GlobalVariables, KernelCircuitPublicInputs, MAX_NEW_COMMITMENTS_PER_TX, MAX_NEW_L2_TO_L1_MSGS_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, Proof, PublicDataUpdateRequest, makeTuple, range, } from '@aztec/circuits.js';
2
- import { computeBlockHashWithGlobals, computeContractLeaf } from '@aztec/circuits.js/abis';
3
- import { fr, makeBaseOrMergeRollupPublicInputs, makeNewContractData, makePrivateKernelPublicInputsFinal, makeProof, makePublicCallRequest, makeRootRollupPublicInputs, } from '@aztec/circuits.js/factories';
4
- import { toBufferBE } from '@aztec/foundation/bigint-buffer';
5
- import { to2Fields } from '@aztec/foundation/serialize';
6
- import { ContractData, ExtendedContractData, L2Block, L2BlockL2Logs, MerkleTreeId, PublicDataWrite, Tx, TxL2Logs, makeEmptyLogs, mockTx, } from '@aztec/types';
7
- import { MerkleTrees } from '@aztec/world-state';
8
- import { mock } from 'jest-mock-extended';
9
- import { default as levelup } from 'levelup';
10
- import flatMap from 'lodash.flatmap';
11
- import times from 'lodash.times';
12
- import { default as memdown } from 'memdown';
13
- import { getVerificationKeys } from '../mocks/verification_keys.js';
14
- import { EmptyRollupProver } from '../prover/empty.js';
15
- import { makeEmptyProcessedTx as makeEmptyProcessedTxFromHistoricTreeRoots, makeProcessedTx, } from '../sequencer/processed_tx.js';
16
- import { getHistoricBlockData } from '../sequencer/utils.js';
17
- import { WasmRollupCircuitSimulator } from '../simulator/rollup.js';
18
- import { SoloBlockBuilder } from './solo_block_builder.js';
19
- export const createMemDown = () => memdown();
20
- describe('sequencer/solo_block_builder', () => {
21
- let builder;
22
- let builderDb;
23
- let expectsDb;
24
- let vks;
25
- let simulator;
26
- let prover;
27
- let blockNumber;
28
- let baseRollupOutputLeft;
29
- let baseRollupOutputRight;
30
- let rootRollupOutput;
31
- let mockL1ToL2Messages;
32
- let wasm;
33
- let globalVariables;
34
- const emptyProof = new Proof(Buffer.alloc(32, 0));
35
- const chainId = Fr.ZERO;
36
- const version = Fr.ZERO;
37
- beforeAll(async () => {
38
- wasm = await CircuitsWasm.get();
39
- });
40
- beforeEach(async () => {
41
- blockNumber = 3;
42
- globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO);
43
- builderDb = await MerkleTrees.new(levelup(createMemDown())).then(t => t.asLatest());
44
- expectsDb = await MerkleTrees.new(levelup(createMemDown())).then(t => t.asLatest());
45
- vks = getVerificationKeys();
46
- simulator = mock();
47
- prover = mock();
48
- builder = new SoloBlockBuilder(builderDb, vks, simulator, prover);
49
- // Create mock l1 to L2 messages
50
- mockL1ToL2Messages = new Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(0n));
51
- // Create mock outputs for simulator
52
- baseRollupOutputLeft = makeBaseOrMergeRollupPublicInputs(0, globalVariables);
53
- baseRollupOutputRight = makeBaseOrMergeRollupPublicInputs(0, globalVariables);
54
- rootRollupOutput = makeRootRollupPublicInputs(0, globalVariables);
55
- // Set up mocks
56
- prover.getBaseRollupProof.mockResolvedValue(emptyProof);
57
- prover.getRootRollupProof.mockResolvedValue(emptyProof);
58
- simulator.baseRollupCircuit
59
- .mockResolvedValueOnce(baseRollupOutputLeft)
60
- .mockResolvedValueOnce(baseRollupOutputRight);
61
- simulator.rootRollupCircuit.mockResolvedValue(rootRollupOutput);
62
- }, 20000);
63
- const makeEmptyProcessedTx = async () => {
64
- const historicTreeRoots = await getHistoricBlockData(builderDb);
65
- return makeEmptyProcessedTxFromHistoricTreeRoots(historicTreeRoots, chainId, version);
66
- };
67
- // Updates the expectedDb trees based on the new commitments, contracts, and nullifiers from these txs
68
- const updateExpectedTreesFromTxs = async (txs) => {
69
- const newContracts = flatMap(txs, tx => tx.data.end.newContracts.map(n => computeContractLeaf(wasm, n)));
70
- for (const [tree, leaves] of [
71
- [MerkleTreeId.PRIVATE_DATA_TREE, flatMap(txs, tx => tx.data.end.newCommitments.map(l => l.toBuffer()))],
72
- [MerkleTreeId.CONTRACT_TREE, newContracts.map(x => x.toBuffer())],
73
- ]) {
74
- await expectsDb.appendLeaves(tree, leaves);
75
- }
76
- await expectsDb.batchInsert(MerkleTreeId.NULLIFIER_TREE, flatMap(txs, tx => tx.data.end.newNullifiers.map(x => x.toBuffer())), BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT);
77
- for (const write of txs.flatMap(tx => tx.data.end.publicDataUpdateRequests)) {
78
- await expectsDb.updateLeaf(MerkleTreeId.PUBLIC_DATA_TREE, write.newValue.toBuffer(), write.leafIndex.value);
79
- }
80
- };
81
- const updateL1ToL2MessagesTree = async (l1ToL2Messages) => {
82
- const asBuffer = l1ToL2Messages.map(m => m.toBuffer());
83
- await expectsDb.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGES_TREE, asBuffer);
84
- };
85
- const updateHistoricBlocksTree = async () => {
86
- const blockHash = computeBlockHashWithGlobals(wasm, globalVariables, rootRollupOutput.endPrivateDataTreeSnapshot.root, rootRollupOutput.endNullifierTreeSnapshot.root, rootRollupOutput.endContractTreeSnapshot.root, rootRollupOutput.endL1ToL2MessageTreeSnapshot.root, rootRollupOutput.endPublicDataTreeRoot);
87
- await expectsDb.appendLeaves(MerkleTreeId.BLOCKS_TREE, [blockHash.toBuffer()]);
88
- };
89
- const getTreeSnapshot = async (tree) => {
90
- const treeInfo = await expectsDb.getTreeInfo(tree);
91
- return new AppendOnlyTreeSnapshot(Fr.fromBuffer(treeInfo.root), Number(treeInfo.size));
92
- };
93
- const buildMockSimulatorInputs = async () => {
94
- const kernelOutput = makePrivateKernelPublicInputsFinal();
95
- kernelOutput.constants.blockData = await getHistoricBlockData(expectsDb);
96
- const tx = await makeProcessedTx(new Tx(kernelOutput, emptyProof, makeEmptyLogs(), makeEmptyLogs(), times(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, makePublicCallRequest), [ExtendedContractData.random()]));
97
- const txsLeft = [tx, await makeEmptyProcessedTx()];
98
- const txsRight = [await makeEmptyProcessedTx(), await makeEmptyProcessedTx()];
99
- // Calculate what would be the tree roots after the txs from the first base rollup land and update mock circuit output
100
- await updateExpectedTreesFromTxs(txsLeft);
101
- baseRollupOutputLeft.endContractTreeSnapshot = await getTreeSnapshot(MerkleTreeId.CONTRACT_TREE);
102
- baseRollupOutputLeft.endNullifierTreeSnapshot = await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE);
103
- baseRollupOutputLeft.endPrivateDataTreeSnapshot = await getTreeSnapshot(MerkleTreeId.PRIVATE_DATA_TREE);
104
- baseRollupOutputLeft.endPublicDataTreeRoot = (await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE)).root;
105
- // Same for the two txs on the right
106
- await updateExpectedTreesFromTxs(txsRight);
107
- baseRollupOutputRight.endContractTreeSnapshot = await getTreeSnapshot(MerkleTreeId.CONTRACT_TREE);
108
- baseRollupOutputRight.endNullifierTreeSnapshot = await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE);
109
- baseRollupOutputRight.endPrivateDataTreeSnapshot = await getTreeSnapshot(MerkleTreeId.PRIVATE_DATA_TREE);
110
- baseRollupOutputRight.endPublicDataTreeRoot = (await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE)).root;
111
- // Update l1 to l2 data tree
112
- // And update the root trees now to create proper output to the root rollup circuit
113
- await updateL1ToL2MessagesTree(mockL1ToL2Messages);
114
- rootRollupOutput.endContractTreeSnapshot = await getTreeSnapshot(MerkleTreeId.CONTRACT_TREE);
115
- rootRollupOutput.endNullifierTreeSnapshot = await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE);
116
- rootRollupOutput.endPrivateDataTreeSnapshot = await getTreeSnapshot(MerkleTreeId.PRIVATE_DATA_TREE);
117
- rootRollupOutput.endPublicDataTreeRoot = (await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE)).root;
118
- rootRollupOutput.endL1ToL2MessageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGES_TREE);
119
- // Calculate block hash
120
- rootRollupOutput.globalVariables = globalVariables;
121
- await updateHistoricBlocksTree();
122
- rootRollupOutput.endHistoricBlocksTreeSnapshot = await getTreeSnapshot(MerkleTreeId.BLOCKS_TREE);
123
- const txs = [...txsLeft, ...txsRight];
124
- const newNullifiers = flatMap(txs, tx => tx.data.end.newNullifiers);
125
- const newCommitments = flatMap(txs, tx => tx.data.end.newCommitments);
126
- const newContracts = flatMap(txs, tx => tx.data.end.newContracts).map(cd => computeContractLeaf(wasm, cd));
127
- const newContractData = flatMap(txs, tx => tx.data.end.newContracts).map(n => new ContractData(n.contractAddress, n.portalContractAddress));
128
- const newPublicDataWrites = flatMap(txs, tx => tx.data.end.publicDataUpdateRequests.map(t => new PublicDataWrite(t.leafIndex, t.newValue)));
129
- const newL2ToL1Msgs = flatMap(txs, tx => tx.data.end.newL2ToL1Msgs);
130
- const newEncryptedLogs = new L2BlockL2Logs(txs.map(tx => tx.encryptedLogs || new TxL2Logs([])));
131
- const newUnencryptedLogs = new L2BlockL2Logs(txs.map(tx => tx.unencryptedLogs || new TxL2Logs([])));
132
- const l2Block = L2Block.fromFields({
133
- number: blockNumber,
134
- globalVariables,
135
- startPrivateDataTreeSnapshot: rootRollupOutput.startPrivateDataTreeSnapshot,
136
- endPrivateDataTreeSnapshot: rootRollupOutput.endPrivateDataTreeSnapshot,
137
- startNullifierTreeSnapshot: rootRollupOutput.startNullifierTreeSnapshot,
138
- endNullifierTreeSnapshot: rootRollupOutput.endNullifierTreeSnapshot,
139
- startContractTreeSnapshot: rootRollupOutput.startContractTreeSnapshot,
140
- endContractTreeSnapshot: rootRollupOutput.endContractTreeSnapshot,
141
- startPublicDataTreeRoot: rootRollupOutput.startPublicDataTreeRoot,
142
- endPublicDataTreeRoot: rootRollupOutput.endPublicDataTreeRoot,
143
- startL1ToL2MessageTreeSnapshot: rootRollupOutput.startL1ToL2MessageTreeSnapshot,
144
- endL1ToL2MessageTreeSnapshot: rootRollupOutput.endL1ToL2MessageTreeSnapshot,
145
- startHistoricBlocksTreeSnapshot: rootRollupOutput.startHistoricBlocksTreeSnapshot,
146
- endHistoricBlocksTreeSnapshot: rootRollupOutput.endHistoricBlocksTreeSnapshot,
147
- newCommitments,
148
- newNullifiers,
149
- newContracts,
150
- newContractData,
151
- newPublicDataWrites,
152
- newL1ToL2Messages: mockL1ToL2Messages,
153
- newL2ToL1Msgs,
154
- newEncryptedLogs,
155
- newUnencryptedLogs,
156
- });
157
- const callDataHash = l2Block.getCalldataHash();
158
- const high = Fr.fromBuffer(callDataHash.slice(0, 16));
159
- const low = Fr.fromBuffer(callDataHash.slice(16, 32));
160
- rootRollupOutput.calldataHash = [high, low];
161
- return txs;
162
- };
163
- describe('mock simulator', () => {
164
- beforeEach(() => {
165
- // Create instance to test
166
- builder = new SoloBlockBuilder(builderDb, vks, simulator, prover);
167
- });
168
- it('builds an L2 block using mock simulator', async () => {
169
- // Assemble a fake transaction
170
- const txs = await buildMockSimulatorInputs();
171
- // Actually build a block!
172
- const [l2Block, proof] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages);
173
- expect(l2Block.number).toEqual(blockNumber);
174
- expect(proof).toEqual(emptyProof);
175
- }, 20000);
176
- it('rejects if too many l1 to l2 messages are provided', async () => {
177
- // Assemble a fake transaction
178
- const txs = await buildMockSimulatorInputs();
179
- const l1ToL2Messages = new Array(100).fill(new Fr(0n));
180
- await expect(builder.buildL2Block(globalVariables, txs, l1ToL2Messages)).rejects.toThrow();
181
- });
182
- });
183
- describe('circuits simulator', () => {
184
- beforeEach(async () => {
185
- const simulator = await WasmRollupCircuitSimulator.new();
186
- const prover = new EmptyRollupProver();
187
- builder = new SoloBlockBuilder(builderDb, vks, simulator, prover);
188
- });
189
- const makeContractDeployProcessedTx = async (seed = 0x1) => {
190
- const tx = await makeEmptyProcessedTx();
191
- tx.data.end.newContracts = [makeNewContractData(seed + 0x1000)];
192
- return tx;
193
- };
194
- const makeBloatedProcessedTx = async (seed = 0x1) => {
195
- const tx = mockTx(seed);
196
- const kernelOutput = KernelCircuitPublicInputs.empty();
197
- kernelOutput.constants.blockData = await getHistoricBlockData(builderDb);
198
- kernelOutput.end.publicDataUpdateRequests = makeTuple(MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, i => new PublicDataUpdateRequest(fr(i), fr(0), fr(i + 10)), seed + 0x500);
199
- const processedTx = await makeProcessedTx(tx, kernelOutput, makeProof());
200
- processedTx.data.end.newCommitments = makeTuple(MAX_NEW_COMMITMENTS_PER_TX, fr, seed + 0x100);
201
- processedTx.data.end.newNullifiers = makeTuple(MAX_NEW_NULLIFIERS_PER_TX, fr, seed + 0x200);
202
- processedTx.data.end.newNullifiers[tx.data.end.newNullifiers.length - 1] = Fr.ZERO;
203
- processedTx.data.end.newL2ToL1Msgs = makeTuple(MAX_NEW_L2_TO_L1_MSGS_PER_TX, fr, seed + 0x300);
204
- processedTx.data.end.newContracts = [makeNewContractData(seed + 0x1000)];
205
- processedTx.data.end.encryptedLogsHash = to2Fields(L2Block.computeKernelLogsHash(processedTx.encryptedLogs));
206
- processedTx.data.end.unencryptedLogsHash = to2Fields(L2Block.computeKernelLogsHash(processedTx.unencryptedLogs));
207
- return processedTx;
208
- };
209
- it.each([
210
- [0, 4],
211
- [1, 4],
212
- [4, 4],
213
- [0, 16],
214
- [16, 16],
215
- ])('builds an L2 block with %i contract deploy txs and %i txs total', async (deployCount, totalCount) => {
216
- const contractTreeBefore = await builderDb.getTreeInfo(MerkleTreeId.CONTRACT_TREE);
217
- const txs = [
218
- ...(await Promise.all(times(deployCount, makeContractDeployProcessedTx))),
219
- ...(await Promise.all(times(totalCount - deployCount, makeEmptyProcessedTx))),
220
- ];
221
- const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages);
222
- expect(l2Block.number).toEqual(blockNumber);
223
- await updateExpectedTreesFromTxs(txs);
224
- const contractTreeAfter = await builderDb.getTreeInfo(MerkleTreeId.CONTRACT_TREE);
225
- if (deployCount > 0) {
226
- expect(contractTreeAfter.root).not.toEqual(contractTreeBefore.root);
227
- }
228
- const expectedContractTreeAfter = await expectsDb.getTreeInfo(MerkleTreeId.CONTRACT_TREE).then(t => t.root);
229
- expect(contractTreeAfter.root).toEqual(expectedContractTreeAfter);
230
- expect(contractTreeAfter.size).toEqual(BigInt(totalCount));
231
- }, 30000);
232
- it('builds an empty L2 block', async () => {
233
- const txs = await Promise.all([
234
- makeEmptyProcessedTx(),
235
- makeEmptyProcessedTx(),
236
- makeEmptyProcessedTx(),
237
- makeEmptyProcessedTx(),
238
- ]);
239
- const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages);
240
- expect(l2Block.number).toEqual(blockNumber);
241
- }, 10000);
242
- it('builds a mixed L2 block', async () => {
243
- // Ensure that each transaction has unique (non-intersecting nullifier values)
244
- const txs = await Promise.all([
245
- makeBloatedProcessedTx(1 * MAX_NEW_NULLIFIERS_PER_TX),
246
- makeBloatedProcessedTx(2 * MAX_NEW_NULLIFIERS_PER_TX),
247
- makeBloatedProcessedTx(3 * MAX_NEW_NULLIFIERS_PER_TX),
248
- makeBloatedProcessedTx(4 * MAX_NEW_NULLIFIERS_PER_TX),
249
- ]);
250
- const l1ToL2Messages = range(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 1 + 0x400).map(fr);
251
- const [l2Block] = await builder.buildL2Block(globalVariables, txs, l1ToL2Messages);
252
- expect(l2Block.number).toEqual(blockNumber);
253
- }, 20000);
254
- // This test specifically tests nullifier values which previously caused e2e_private_token test to fail
255
- it('e2e_private_token edge case regression test on nullifier values', async () => {
256
- const simulator = await WasmRollupCircuitSimulator.new();
257
- const prover = new EmptyRollupProver();
258
- builder = new SoloBlockBuilder(builderDb, vks, simulator, prover);
259
- // update the starting tree
260
- const updateVals = Array(4 * MAX_NEW_NULLIFIERS_PER_TX).fill(0n);
261
- updateVals[0] = 19777494491628650244807463906174285795660759352776418619064841306523677458742n;
262
- updateVals[1] = 10246291467305176436335175657884940686778521321101740385288169037814567547848n;
263
- // new added values
264
- const tx = await makeEmptyProcessedTx();
265
- tx.data.end.newNullifiers[0] = new Fr(10336601644835972678500657502133589897705389664587188571002640950065546264856n);
266
- tx.data.end.newNullifiers[1] = new Fr(17490072961923661940560522096125238013953043065748521735636170028491723851741n);
267
- const txs = [tx, await makeEmptyProcessedTx(), await makeEmptyProcessedTx(), await makeEmptyProcessedTx()];
268
- // Must be built after the txs are created
269
- await builderDb.batchInsert(MerkleTreeId.NULLIFIER_TREE, updateVals.map(v => toBufferBE(v, 32)), BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT);
270
- const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages);
271
- expect(l2Block.number).toEqual(blockNumber);
272
- }, 10000);
273
- });
274
- // describe("Input guard tests", () => {
275
- // })
276
- });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sb19ibG9ja19idWlsZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2tfYnVpbGRlci9zb2xvX2Jsb2NrX2J1aWxkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsc0JBQXNCLEVBRXRCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osRUFBRSxFQUNGLGVBQWUsRUFDZix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLDRCQUE0QixFQUM1Qix5QkFBeUIsRUFDekIsbUNBQW1DLEVBQ25DLHNDQUFzQyxFQUN0QyxtQ0FBbUMsRUFDbkMsS0FBSyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0YsT0FBTyxFQUNMLEVBQUUsRUFDRixpQ0FBaUMsRUFDakMsbUJBQW1CLEVBQ25CLGtDQUFrQyxFQUNsQyxTQUFTLEVBQ1QscUJBQXFCLEVBQ3JCLDBCQUEwQixHQUMzQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixRQUFRLEVBQ1IsYUFBYSxFQUNiLE1BQU0sR0FDUCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZFLE9BQU8sRUFBYSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxNQUFNLFNB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
@@ -1,12 +0,0 @@
1
- import { AppendOnlyTreeSnapshot, BaseOrMergeRollupPublicInputs, RootRollupPublicInputs } from '@aztec/circuits.js';
2
- /**
3
- * Type to assert that only the correct trees are checked when validating rollup tree outputs.
4
- */
5
- export type AllowedTreeNames<T extends BaseOrMergeRollupPublicInputs | RootRollupPublicInputs> = T extends RootRollupPublicInputs ? 'PrivateData' | 'Contract' | 'Nullifier' | 'L1ToL2Message' | 'HistoricBlocks' : 'PrivateData' | 'Contract' | 'Nullifier';
6
- /**
7
- * Type to assert the correct object field is indexed when validating rollup tree outputs.
8
- */
9
- export type OutputWithTreeSnapshot<T extends BaseOrMergeRollupPublicInputs | RootRollupPublicInputs> = {
10
- [K in `end${AllowedTreeNames<T>}TreeSnapshot`]: AppendOnlyTreeSnapshot;
11
- };
12
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/block_builder/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnH;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,6BAA6B,GAAG,sBAAsB,IAC3F,CAAC,SAAS,sBAAsB,GAC5B,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAC7E,aAAa,GAAG,UAAU,GAAG,WAAW,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,6BAA6B,GAAG,sBAAsB,IAAI;KACpG,CAAC,IAAI,MAAM,gBAAgB,CAAC,CAAC,CAAC,cAAc,GAAG,sBAAsB;CACvE,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2tfYnVpbGRlci90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -1,2 +0,0 @@
1
- export * from './sequencer-client.js';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './sequencer-client.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUMifQ==
@@ -1,32 +0,0 @@
1
- import { P2P } from '@aztec/p2p';
2
- import { ContractDataSource, L1ToL2MessageSource, L2BlockSource } from '@aztec/types';
3
- import { WorldStateSynchroniser } from '@aztec/world-state';
4
- import { SequencerClientConfig } from '../config.js';
5
- import { Sequencer } from '../index.js';
6
- /**
7
- * Encapsulates the full sequencer and publisher.
8
- */
9
- export declare class SequencerClient {
10
- private sequencer;
11
- constructor(sequencer: Sequencer);
12
- /**
13
- * Initializes and starts a new instance.
14
- * @param config - Configuration for the sequencer, publisher, and L1 tx sender.
15
- * @param p2pClient - P2P client that provides the txs to be sequenced.
16
- * @param worldStateSynchroniser - Provides access to world state.
17
- * @param contractDataSource - Provides access to contract bytecode for public executions.
18
- * @param l2BlockSource - Provides information about the previously published blocks.
19
- * @param l1ToL2MessageSource - Provides access to L1 to L2 messages.
20
- * @returns A new running instance.
21
- */
22
- static new(config: SequencerClientConfig, p2pClient: P2P, worldStateSynchroniser: WorldStateSynchroniser, contractDataSource: ContractDataSource, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource): Promise<SequencerClient>;
23
- /**
24
- * Stops the sequencer from processing new txs.
25
- */
26
- stop(): Promise<void>;
27
- /**
28
- * Restarts the sequencer after being stopped.
29
- */
30
- restart(): void;
31
- }
32
- //# sourceMappingURL=sequencer-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,SAAS,EAAuC,MAAM,aAAa,CAAC;AAK7E;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC;;;;;;;;;OASG;WACiB,GAAG,CACrB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,GAAG,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB;IA+B1C;;OAEG;IACU,IAAI;IAIjB;;OAEG;IACI,OAAO;CAGf"}
@@ -1,47 +0,0 @@
1
- import { SoloBlockBuilder } from '../block_builder/solo_block_builder.js';
2
- import { getGlobalVariableBuilder } from '../global_variable_builder/index.js';
3
- import { Sequencer, getL1Publisher, getVerificationKeys } from '../index.js';
4
- import { EmptyRollupProver } from '../prover/empty.js';
5
- import { PublicProcessorFactory } from '../sequencer/public_processor.js';
6
- import { WasmRollupCircuitSimulator } from '../simulator/rollup.js';
7
- /**
8
- * Encapsulates the full sequencer and publisher.
9
- */
10
- export class SequencerClient {
11
- constructor(sequencer) {
12
- this.sequencer = sequencer;
13
- }
14
- /**
15
- * Initializes and starts a new instance.
16
- * @param config - Configuration for the sequencer, publisher, and L1 tx sender.
17
- * @param p2pClient - P2P client that provides the txs to be sequenced.
18
- * @param worldStateSynchroniser - Provides access to world state.
19
- * @param contractDataSource - Provides access to contract bytecode for public executions.
20
- * @param l2BlockSource - Provides information about the previously published blocks.
21
- * @param l1ToL2MessageSource - Provides access to L1 to L2 messages.
22
- * @returns A new running instance.
23
- */
24
- static async new(config, p2pClient, worldStateSynchroniser, contractDataSource, l2BlockSource, l1ToL2MessageSource) {
25
- const publisher = getL1Publisher(config);
26
- const globalsBuilder = getGlobalVariableBuilder(config);
27
- const merkleTreeDb = worldStateSynchroniser.getLatest();
28
- const blockBuilder = new SoloBlockBuilder(merkleTreeDb, getVerificationKeys(), await WasmRollupCircuitSimulator.new(), new EmptyRollupProver());
29
- const publicProcessorFactory = new PublicProcessorFactory(merkleTreeDb, contractDataSource, l1ToL2MessageSource);
30
- const sequencer = new Sequencer(publisher, globalsBuilder, p2pClient, worldStateSynchroniser, blockBuilder, l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, config);
31
- await sequencer.start();
32
- return new SequencerClient(sequencer);
33
- }
34
- /**
35
- * Stops the sequencer from processing new txs.
36
- */
37
- async stop() {
38
- await this.sequencer.stop();
39
- }
40
- /**
41
- * Restarts the sequencer after being stopped.
42
- */
43
- restart() {
44
- this.sequencer.restart();
45
- }
46
- }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvc2VxdWVuY2VyLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQW9CLFNBQW9CO1FBQXBCLGNBQVMsR0FBVCxTQUFTLENBQVc7SUFBRyxDQUFDO0lBRTVDOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNyQixNQUE2QixFQUM3QixTQUFjLEVBQ2Qsc0JBQThDLEVBQzlDLGtCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixtQkFBd0M7UUFFeEMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXhELE1BQU0sWUFBWSxHQUFHLElBQUksZ0JBQWdCLENBQ3ZDLFlBQVksRUFDWixtQkFBbUIsRUFBRSxFQUNyQixNQUFNLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxFQUN0QyxJQUFJLGlCQUFpQixFQUFFLENBQ3hCLENBQUM7UUFFRixNQUFNLHNCQUFzQixHQUFHLElBQUksc0JBQXNCLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFakgsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQzdCLFNBQVMsRUFDVCxjQUFjLEVBQ2QsU0FBUyxFQUNULHNCQUFzQixFQUN0QixZQUFZLEVBQ1osYUFBYSxFQUNiLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsTUFBTSxDQUNQLENBQUM7UUFFRixNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiJ9
package/dest/config.d.ts DELETED
@@ -1,12 +0,0 @@
1
- import { GlobalReaderConfig } from './global_variable_builder/index.js';
2
- import { PublisherConfig, TxSenderConfig } from './publisher/config.js';
3
- import { SequencerConfig } from './sequencer/config.js';
4
- /**
5
- * Configuration settings for the SequencerClient.
6
- */
7
- export type SequencerClientConfig = PublisherConfig & TxSenderConfig & SequencerConfig & GlobalReaderConfig;
8
- /**
9
- * Creates an instance of SequencerClientConfig out of environment variables using sensible defaults for integration testing if not set.
10
- */
11
- export declare function getConfigEnvVars(): SequencerClientConfig;
12
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAE5G;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAwCxD"}
package/dest/config.js DELETED
@@ -1,28 +0,0 @@
1
- import { EthAddress } from '@aztec/foundation/eth-address';
2
- /**
3
- * Creates an instance of SequencerClientConfig out of environment variables using sensible defaults for integration testing if not set.
4
- */
5
- export function getConfigEnvVars() {
6
- const { SEQ_PUBLISHER_PRIVATE_KEY, ETHEREUM_HOST, CHAIN_ID, VERSION, API_KEY, SEQ_REQUIRED_CONFS, SEQ_PUBLISH_RETRY_INTERVAL_MS, SEQ_TX_POLLING_INTERVAL_MS, SEQ_MAX_TX_PER_BLOCK, SEQ_MIN_TX_PER_BLOCK, ROLLUP_CONTRACT_ADDRESS, INBOX_CONTRACT_ADDRESS, CONTRACT_DEPLOYMENT_EMITTER_ADDRESS, } = process.env;
7
- const publisherPrivateKey = `0x${SEQ_PUBLISHER_PRIVATE_KEY
8
- ? SEQ_PUBLISHER_PRIVATE_KEY.replace('0x', '')
9
- : '0000000000000000000000000000000000000000000000000000000000000000'}`;
10
- return {
11
- rpcUrl: ETHEREUM_HOST ? ETHEREUM_HOST : '',
12
- chainId: CHAIN_ID ? +CHAIN_ID : 31337,
13
- version: VERSION ? +VERSION : 1,
14
- apiKey: API_KEY,
15
- requiredConfirmations: SEQ_REQUIRED_CONFS ? +SEQ_REQUIRED_CONFS : 1,
16
- l1BlockPublishRetryIntervalMS: SEQ_PUBLISH_RETRY_INTERVAL_MS ? +SEQ_PUBLISH_RETRY_INTERVAL_MS : 1000,
17
- transactionPollingIntervalMS: SEQ_TX_POLLING_INTERVAL_MS ? +SEQ_TX_POLLING_INTERVAL_MS : 1000,
18
- rollupContract: ROLLUP_CONTRACT_ADDRESS ? EthAddress.fromString(ROLLUP_CONTRACT_ADDRESS) : EthAddress.ZERO,
19
- inboxContract: INBOX_CONTRACT_ADDRESS ? EthAddress.fromString(INBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
20
- contractDeploymentEmitterContract: CONTRACT_DEPLOYMENT_EMITTER_ADDRESS
21
- ? EthAddress.fromString(CONTRACT_DEPLOYMENT_EMITTER_ADDRESS)
22
- : EthAddress.ZERO,
23
- publisherPrivateKey,
24
- maxTxsPerBlock: SEQ_MAX_TX_PER_BLOCK ? +SEQ_MAX_TX_PER_BLOCK : 32,
25
- minTxsPerBlock: SEQ_MIN_TX_PER_BLOCK ? +SEQ_MIN_TX_PER_BLOCK : 1,
26
- };
27
- }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFXM0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE1BQU0sRUFDSix5QkFBeUIsRUFDekIsYUFBYSxFQUNiLFFBQVEsRUFDUixPQUFPLEVBQ1AsT0FBTyxFQUNQLGtCQUFrQixFQUNsQiw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixtQ0FBbUMsR0FDcEMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBRWhCLE1BQU0sbUJBQW1CLEdBQWtCLEtBQ3pDLHlCQUF5QjtRQUN2QixDQUFDLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDN0MsQ0FBQyxDQUFDLGtFQUNOLEVBQUUsQ0FBQztJQUVILE9BQU87UUFDTCxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDMUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDckMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxFQUFFLE9BQU87UUFDZixxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSw2QkFBNkIsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsSUFBSztRQUNyRyw0QkFBNEIsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsSUFBSztRQUM5RixjQUFjLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7UUFDMUcsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQ3ZHLGlDQUFpQyxFQUFFLG1DQUFtQztZQUNwRSxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQ0FBbUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7UUFDbkIsbUJBQW1CO1FBQ25CLGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNqRSxjQUFjLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakUsQ0FBQztBQUNKLENBQUMifQ==
@@ -1,19 +0,0 @@
1
- import { EthAddress } from '@aztec/circuits.js';
2
- /**
3
- * Configuration of the L1GlobalReader.
4
- */
5
- export interface GlobalReaderConfig {
6
- /**
7
- * Rollup contract address.
8
- */
9
- rollupContract: EthAddress;
10
- /**
11
- * The RPC Url of the ethereum host.
12
- */
13
- rpcUrl: string;
14
- /**
15
- * The API key of the ethereum host.
16
- */
17
- apiKey?: string;
18
- }
19
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,cAAc,EAAE,UAAU,CAAC;IAC3B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dsb2JhbF92YXJpYWJsZV9idWlsZGVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -1,58 +0,0 @@
1
- import { Fr, GlobalVariables } from '@aztec/circuits.js';
2
- /**
3
- * Reads values from L1 state that is used for the global values.
4
- */
5
- export interface L1GlobalReader {
6
- /**
7
- * Fetches the last timestamp that a block was processed by the contract.
8
- * @returns The last timestamp that a block was processed by the contract.
9
- */
10
- getLastTimestamp(): Promise<bigint>;
11
- /**
12
- * Fetches the version of the rollup contract.
13
- * @returns The version of the rollup contract.
14
- */
15
- getVersion(): Promise<bigint>;
16
- /**
17
- * Gets the chain id.
18
- * @returns The chain id.
19
- */
20
- getChainId(): Promise<bigint>;
21
- /**
22
- * Gets the current L1 time.
23
- * @returns The current L1 time.
24
- */
25
- getL1CurrentTime(): Promise<bigint>;
26
- /**
27
- * Gets the last time L2 was warped as tracked by the rollup contract.
28
- * @returns The warped time.
29
- */
30
- getLastWarpedBlockTs(): Promise<bigint>;
31
- }
32
- /**
33
- * Builds global variables from L1 state.
34
- */
35
- export interface GlobalVariableBuilder {
36
- /**
37
- * Builds global variables.
38
- * @param blockNumber - The block number to build global variables for.
39
- * @returns The global variables for the given block number.
40
- */
41
- buildGlobalVariables(blockNumber: Fr): Promise<GlobalVariables>;
42
- }
43
- /**
44
- * Simple test implementation of a builder that uses the minimum time possible for the global variables.
45
- * Also uses a "hack" to make use of the warp cheatcode that manipulates time on Aztec.
46
- */
47
- export declare class SimpleTestGlobalVariableBuilder implements GlobalVariableBuilder {
48
- private readonly reader;
49
- private log;
50
- constructor(reader: L1GlobalReader);
51
- /**
52
- * Simple builder of global variables that use the minimum time possible.
53
- * @param blockNumber - The block number to build global variables for.
54
- * @returns The global variables for the given block number.
55
- */
56
- buildGlobalVariables(blockNumber: Fr): Promise<GlobalVariables>;
57
- }
58
- //# sourceMappingURL=global_builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global_builder.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/global_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9B;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC;;;OAGG;IACH,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,oBAAoB,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACjE;AAED;;;GAGG;AACH,qBAAa,+BAAgC,YAAW,qBAAqB;IAE/D,OAAO,CAAC,QAAQ,CAAC,MAAM;IADnC,OAAO,CAAC,GAAG,CAA4E;gBAC1D,MAAM,EAAE,cAAc;IAEnD;;;;OAIG;IACU,oBAAoB,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;CAwB7E"}
@@ -1,36 +0,0 @@
1
- import { Fr, GlobalVariables } from '@aztec/circuits.js';
2
- import { createDebugLogger } from '@aztec/foundation/log';
3
- /**
4
- * Simple test implementation of a builder that uses the minimum time possible for the global variables.
5
- * Also uses a "hack" to make use of the warp cheatcode that manipulates time on Aztec.
6
- */
7
- export class SimpleTestGlobalVariableBuilder {
8
- constructor(reader) {
9
- this.reader = reader;
10
- this.log = createDebugLogger('aztec:sequencer:simple_test_global_variable_builder');
11
- }
12
- /**
13
- * Simple builder of global variables that use the minimum time possible.
14
- * @param blockNumber - The block number to build global variables for.
15
- * @returns The global variables for the given block number.
16
- */
17
- async buildGlobalVariables(blockNumber) {
18
- let lastTimestamp = new Fr(await this.reader.getLastTimestamp());
19
- const version = new Fr(await this.reader.getVersion());
20
- const chainId = new Fr(await this.reader.getChainId());
21
- // TODO(rahul) - fix #1614. By using the cheatcode warp to modify L2 time,
22
- // txs in the next rollup would have same time as the txs in the current rollup (i.e. the rollup that was warped).
23
- // So, for now you check if L2 time was warped and if so, serve warpedTime + 1 to txs in the new rollup.
24
- // Check if L2 time was warped in the last rollup by checking if current L1 time is same as the warpedTime (stored on the rollup contract).
25
- // more details at https://github.com/AztecProtocol/aztec-packages/issues/1614
26
- const currTimestamp = await this.reader.getL1CurrentTime();
27
- const rollupWarpTime = await this.reader.getLastWarpedBlockTs();
28
- const isLastBlockWarped = rollupWarpTime === currTimestamp;
29
- if (isLastBlockWarped) {
30
- lastTimestamp = new Fr(lastTimestamp.value + 1n);
31
- }
32
- this.log(`Built global variables for block ${blockNumber}: (${chainId}, ${version}, ${blockNumber}, ${lastTimestamp})`);
33
- return new GlobalVariables(chainId, version, blockNumber, lastTimestamp);
34
- }
35
- }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX2J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmFsX3ZhcmlhYmxlX2J1aWxkZXIvZ2xvYmFsX2J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQStDMUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLCtCQUErQjtJQUUxQyxZQUE2QixNQUFzQjtRQUF0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUQzQyxRQUFHLEdBQUcsaUJBQWlCLENBQUMscURBQXFELENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRXZEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsV0FBZTtRQUMvQyxJQUFJLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRXZELDBFQUEwRTtRQUMxRSxrSEFBa0g7UUFDbEgsd0dBQXdHO1FBQ3hHLDJJQUEySTtRQUMzSSw4RUFBOEU7UUFFOUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0QsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDaEUsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLEtBQUssYUFBYSxDQUFDO1FBQzNELElBQUksaUJBQWlCLEVBQUU7WUFDckIsYUFBYSxHQUFHLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUNOLG9DQUFvQyxXQUFXLE1BQU0sT0FBTyxLQUFLLE9BQU8sS0FBSyxXQUFXLEtBQUssYUFBYSxHQUFHLENBQzlHLENBQUM7UUFFRixPQUFPLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FDRiJ9