@aztec/sequencer-client 0.7.10 → 0.8.7

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 (73) hide show
  1. package/README.md +1 -1
  2. package/dest/client/sequencer-client.d.ts +3 -3
  3. package/dest/client/sequencer-client.d.ts.map +1 -1
  4. package/dest/client/sequencer-client.js +6 -6
  5. package/dest/config.d.ts.map +1 -1
  6. package/dest/config.js +14 -7
  7. package/dest/global_variable_builder/config.d.ts +5 -5
  8. package/dest/global_variable_builder/config.d.ts.map +1 -1
  9. package/dest/global_variable_builder/viem-reader.js +3 -3
  10. package/dest/publisher/config.d.ts +6 -2
  11. package/dest/publisher/config.d.ts.map +1 -1
  12. package/dest/publisher/index.d.ts +27 -0
  13. package/dest/publisher/index.d.ts.map +1 -1
  14. package/dest/publisher/index.js +1 -1
  15. package/dest/publisher/l1-publisher.d.ts +26 -11
  16. package/dest/publisher/l1-publisher.d.ts.map +1 -1
  17. package/dest/publisher/l1-publisher.js +18 -4
  18. package/dest/publisher/viem-tx-sender.d.ts +2 -1
  19. package/dest/publisher/viem-tx-sender.d.ts.map +1 -1
  20. package/dest/publisher/viem-tx-sender.js +27 -7
  21. package/dest/sequencer/public_processor.d.ts +4 -2
  22. package/dest/sequencer/public_processor.d.ts.map +1 -1
  23. package/dest/sequencer/public_processor.js +11 -5
  24. package/dest/sequencer/sequencer.d.ts +13 -9
  25. package/dest/sequencer/sequencer.d.ts.map +1 -1
  26. package/dest/sequencer/sequencer.js +53 -34
  27. package/dest/simulator/index.d.ts +0 -1
  28. package/dest/simulator/index.d.ts.map +1 -1
  29. package/dest/simulator/index.js +2 -2
  30. package/dest/simulator/public_executor.d.ts +28 -4
  31. package/dest/simulator/public_executor.d.ts.map +1 -1
  32. package/dest/simulator/public_executor.js +46 -7
  33. package/dest/simulator/public_kernel.d.ts +1 -0
  34. package/dest/simulator/public_kernel.d.ts.map +1 -1
  35. package/dest/simulator/public_kernel.js +26 -5
  36. package/dest/simulator/rollup.d.ts +2 -8
  37. package/dest/simulator/rollup.d.ts.map +1 -1
  38. package/dest/simulator/rollup.js +37 -18
  39. package/package.json +70 -11
  40. package/src/client/sequencer-client.ts +7 -6
  41. package/src/config.ts +14 -5
  42. package/src/global_variable_builder/config.ts +6 -5
  43. package/src/global_variable_builder/viem-reader.ts +2 -2
  44. package/src/publisher/config.ts +7 -2
  45. package/src/publisher/index.ts +28 -0
  46. package/src/publisher/l1-publisher.ts +46 -13
  47. package/src/publisher/viem-tx-sender.ts +33 -13
  48. package/src/sequencer/public_processor.ts +13 -4
  49. package/src/sequencer/sequencer.ts +59 -45
  50. package/src/simulator/index.ts +0 -2
  51. package/src/simulator/public_executor.ts +53 -7
  52. package/src/simulator/public_kernel.ts +24 -4
  53. package/src/simulator/rollup.ts +38 -21
  54. package/.eslintrc.cjs +0 -1
  55. package/.tsbuildinfo +0 -1
  56. package/dest/block_builder/solo_block_builder.test.d.ts +0 -3
  57. package/dest/block_builder/solo_block_builder.test.d.ts.map +0 -1
  58. package/dest/block_builder/solo_block_builder.test.js +0 -277
  59. package/dest/publisher/l1-publisher.test.d.ts +0 -2
  60. package/dest/publisher/l1-publisher.test.d.ts.map +0 -1
  61. package/dest/publisher/l1-publisher.test.js +0 -58
  62. package/dest/sequencer/public_processor.test.d.ts +0 -2
  63. package/dest/sequencer/public_processor.test.d.ts.map +0 -1
  64. package/dest/sequencer/public_processor.test.js +0 -164
  65. package/dest/sequencer/sequencer.test.d.ts +0 -2
  66. package/dest/sequencer/sequencer.test.d.ts.map +0 -1
  67. package/dest/sequencer/sequencer.test.js +0 -99
  68. package/jest.integration.config.json +0 -13
  69. package/src/block_builder/solo_block_builder.test.ts +0 -425
  70. package/src/publisher/l1-publisher.test.ts +0 -79
  71. package/src/sequencer/public_processor.test.ts +0 -265
  72. package/src/sequencer/sequencer.test.ts +0 -160
  73. package/tsconfig.json +0 -38
@@ -1,277 +0,0 @@
1
- import { AppendOnlyTreeSnapshot, 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, NULLIFIER_SUBTREE_HEIGHT, 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())), 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.endL1ToL2MessagesTreeSnapshot.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.endL1ToL2MessagesTreeSnapshot = 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
- startL1ToL2MessagesTreeSnapshot: rootRollupOutput.startL1ToL2MessagesTreeSnapshot,
144
- endL1ToL2MessagesTreeSnapshot: rootRollupOutput.endL1ToL2MessagesTreeSnapshot,
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
- }, 40000);
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)), 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sb19ibG9ja19idWlsZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2tfYnVpbGRlci9zb2xvX2Jsb2NrX2J1aWxkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsc0JBQXNCLEVBRXRCLFlBQVksRUFDWixFQUFFLEVBQ0YsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6QixtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMsS0FBSyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0YsT0FBTyxFQUNMLEVBQUUsRUFDRixpQ0FBaUMsRUFDakMsbUJBQW1CLEVBQ25CLGtDQUFrQyxFQUNsQyxTQUFTLEVBQ1QscUJBQXFCLEVBQ3JCLDBCQUEwQixHQUMzQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixRQUFRLEVBQ1IsYUFBYSxFQUNiLE1BQU0sR0FDUCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZFLE9BQU8sRUFBYSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxNQUFNLFNB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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=l1-publisher.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"l1-publisher.test.d.ts","sourceRoot":"","sources":["../../src/publisher/l1-publisher.test.ts"],"names":[],"mappings":""}
@@ -1,58 +0,0 @@
1
- import { L2Block } from '@aztec/types';
2
- import { mock } from 'jest-mock-extended';
3
- import { sleep } from '../utils.js';
4
- import { L1Publisher } from './l1-publisher.js';
5
- describe('L1Publisher', () => {
6
- let txSender;
7
- let txHash;
8
- let txReceipt;
9
- let l2Block;
10
- let l2Inputs;
11
- let l2Proof;
12
- let publisher;
13
- beforeEach(() => {
14
- l2Block = L2Block.random(42);
15
- l2Inputs = l2Block.encode();
16
- l2Proof = Buffer.alloc(0);
17
- txSender = mock();
18
- txHash = `0x${Buffer.from('txHash').toString('hex')}`; // random tx hash
19
- txReceipt = { transactionHash: txHash, status: true };
20
- txSender.sendProcessTx.mockResolvedValueOnce(txHash);
21
- txSender.getTransactionReceipt.mockResolvedValueOnce(txReceipt);
22
- publisher = new L1Publisher(txSender, { l1BlockPublishRetryIntervalMS: 1 });
23
- });
24
- it('publishes l2 block to l1', async () => {
25
- const result = await publisher.processL2Block(l2Block);
26
- expect(result).toEqual(true);
27
- expect(txSender.sendProcessTx).toHaveBeenCalledWith({ proof: l2Proof, inputs: l2Inputs });
28
- expect(txSender.getTransactionReceipt).toHaveBeenCalledWith(txHash);
29
- });
30
- it('does not retry if sending a tx fails', async () => {
31
- txSender.sendProcessTx.mockReset().mockRejectedValueOnce(new Error()).mockResolvedValueOnce(txHash);
32
- const result = await publisher.processL2Block(l2Block);
33
- expect(result).toEqual(false);
34
- expect(txSender.sendProcessTx).toHaveBeenCalledTimes(1);
35
- });
36
- it('retries if fetching the receipt fails', async () => {
37
- txSender.getTransactionReceipt.mockReset().mockRejectedValueOnce(new Error()).mockResolvedValueOnce(txReceipt);
38
- const result = await publisher.processL2Block(l2Block);
39
- expect(result).toEqual(true);
40
- expect(txSender.getTransactionReceipt).toHaveBeenCalledTimes(2);
41
- });
42
- it('returns false if tx reverts', async () => {
43
- txSender.getTransactionReceipt.mockReset().mockResolvedValueOnce({ ...txReceipt, status: false });
44
- const result = await publisher.processL2Block(l2Block);
45
- expect(result).toEqual(false);
46
- });
47
- it('returns false if interrupted', async () => {
48
- txSender.sendProcessTx.mockReset().mockImplementationOnce(() => sleep(10, txHash));
49
- const resultPromise = publisher.processL2Block(l2Block);
50
- publisher.interrupt();
51
- const result = await resultPromise;
52
- expect(result).toEqual(false);
53
- expect(txSender.getTransactionReceipt).not.toHaveBeenCalled();
54
- });
55
- it.skip('waits for fee distributor balance', () => { });
56
- it.skip('fails if contract is changed underfoot', () => { });
57
- });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEtcHVibGlzaGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGlzaGVyL2wxLXB1Ymxpc2hlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkMsT0FBTyxFQUFhLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBa0QsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixJQUFJLFFBQXdDLENBQUM7SUFDN0MsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxTQUFvQyxDQUFDO0lBQ3pDLElBQUksT0FBZ0IsQ0FBQztJQUNyQixJQUFJLFFBQWdCLENBQUM7SUFDckIsSUFBSSxPQUFlLENBQUM7SUFDcEIsSUFBSSxTQUFzQixDQUFDO0lBRTNCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFCLFFBQVEsR0FBRyxJQUFJLEVBQXVCLENBQUM7UUFDdkMsTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtRQUN4RSxTQUFTLEdBQUcsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RCxRQUFRLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLE1BQU0s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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=public_processor.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public_processor.test.d.ts","sourceRoot":"","sources":["../../src/sequencer/public_processor.test.ts"],"names":[],"mappings":""}
@@ -1,164 +0,0 @@
1
- import { ARGS_LENGTH, CallContext, CircuitsWasm, CombinedAccumulatedData, EthAddress, Fr, FunctionData, GlobalVariables, HistoricBlockData, MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, PUBLIC_DATA_TREE_HEIGHT, PublicKernelPublicInputs, makeEmptyProof, makeTuple, } from '@aztec/circuits.js';
2
- import { computeCallStackItemHash } from '@aztec/circuits.js/abis';
3
- import { makeAztecAddress, makePrivateKernelPublicInputsFinal, makePublicCallRequest, makeSelector, } from '@aztec/circuits.js/factories';
4
- import { padArrayEnd } from '@aztec/foundation/collection';
5
- import { EncodedContractFunction, ExtendedContractData, FunctionL2Logs, SiblingPath, Tx, TxL2Logs, mockTx, } from '@aztec/types';
6
- import { mock } from 'jest-mock-extended';
7
- import times from 'lodash.times';
8
- import { WasmPublicKernelCircuitSimulator } from '../simulator/public_kernel.js';
9
- import { PublicProcessor } from './public_processor.js';
10
- describe('public_processor', () => {
11
- let db;
12
- let publicExecutor;
13
- let publicProver;
14
- let contractDataSource;
15
- let publicFunction;
16
- let contractData;
17
- let proof;
18
- let root;
19
- let processor;
20
- beforeEach(() => {
21
- db = mock();
22
- publicExecutor = mock();
23
- publicProver = mock();
24
- contractDataSource = mock();
25
- contractData = ExtendedContractData.random();
26
- publicFunction = EncodedContractFunction.random();
27
- proof = makeEmptyProof();
28
- root = Buffer.alloc(32, 5);
29
- publicProver.getPublicCircuitProof.mockResolvedValue(proof);
30
- publicProver.getPublicKernelCircuitProof.mockResolvedValue(proof);
31
- db.getTreeInfo.mockResolvedValue({ root });
32
- contractDataSource.getExtendedContractData.mockResolvedValue(contractData);
33
- contractDataSource.getPublicFunction.mockResolvedValue(publicFunction);
34
- });
35
- describe('with mock circuits', () => {
36
- let publicKernel;
37
- beforeEach(() => {
38
- publicKernel = mock();
39
- processor = new PublicProcessor(db, publicExecutor, publicKernel, publicProver, contractDataSource, GlobalVariables.empty(), HistoricBlockData.empty());
40
- });
41
- it('skips txs without public execution requests', async function () {
42
- const tx = mockTx();
43
- tx.data.end.publicCallStack = makeTuple(MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, Fr.zero);
44
- const hash = await tx.getTxHash();
45
- const [processed, failed] = await processor.process([tx]);
46
- expect(processed).toEqual([
47
- {
48
- isEmpty: false,
49
- hash,
50
- data: new PublicKernelPublicInputs(CombinedAccumulatedData.fromFinalAccumulatedData(tx.data.end), tx.data.constants),
51
- proof: tx.proof,
52
- encryptedLogs: tx.encryptedLogs,
53
- unencryptedLogs: tx.unencryptedLogs,
54
- },
55
- ]);
56
- expect(failed).toEqual([]);
57
- });
58
- it('returns failed txs without aborting entire operation', async function () {
59
- publicExecutor.simulate.mockRejectedValue(new Error(`Failed`));
60
- const tx = mockTx();
61
- const [processed, failed] = await processor.process([tx]);
62
- expect(processed).toEqual([]);
63
- expect(failed[0].tx).toEqual(tx);
64
- });
65
- });
66
- describe('with actual circuits', () => {
67
- let publicKernel;
68
- let wasm;
69
- beforeAll(async () => {
70
- wasm = await CircuitsWasm.get();
71
- });
72
- beforeEach(() => {
73
- const path = times(PUBLIC_DATA_TREE_HEIGHT, i => Buffer.alloc(32, i));
74
- db.getSiblingPath.mockResolvedValue(new SiblingPath(PUBLIC_DATA_TREE_HEIGHT, path));
75
- publicKernel = new WasmPublicKernelCircuitSimulator();
76
- processor = new PublicProcessor(db, publicExecutor, publicKernel, publicProver, contractDataSource, GlobalVariables.empty(), HistoricBlockData.empty());
77
- });
78
- const expectedTxByHash = async (tx) => expect.objectContaining({
79
- hash: await tx.getTxHash(),
80
- proof,
81
- });
82
- it('runs a tx with enqueued public calls', async function () {
83
- const callRequests = [makePublicCallRequest(0x100), makePublicCallRequest(0x100)];
84
- const callStackItems = await Promise.all(callRequests.map(call => call.toPublicCallStackItem()));
85
- const callStackHashes = callStackItems.map(call => computeCallStackItemHash(wasm, call));
86
- const kernelOutput = makePrivateKernelPublicInputsFinal(0x10);
87
- kernelOutput.end.publicCallStack = padArrayEnd(callStackHashes, Fr.ZERO, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX);
88
- kernelOutput.end.privateCallStack = padArrayEnd([], Fr.ZERO, MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX);
89
- const tx = new Tx(kernelOutput, proof, TxL2Logs.random(2, 3), TxL2Logs.random(3, 2), callRequests, [
90
- ExtendedContractData.random(),
91
- ]);
92
- publicExecutor.simulate.mockImplementation(execution => {
93
- for (const request of callRequests) {
94
- if (execution.contractAddress.equals(request.contractAddress)) {
95
- return Promise.resolve(makePublicExecutionResultFromRequest(request));
96
- }
97
- }
98
- throw new Error(`Unexpected execution request: ${execution}`);
99
- });
100
- const [processed, failed] = await processor.process([tx]);
101
- expect(processed).toHaveLength(1);
102
- expect(processed).toEqual([await expectedTxByHash(tx)]);
103
- expect(failed).toHaveLength(0);
104
- expect(publicExecutor.simulate).toHaveBeenCalledTimes(2);
105
- });
106
- it('runs a tx with an enqueued public call with nested execution', async function () {
107
- const callRequest = makePublicCallRequest(0x100);
108
- const callStackItem = await callRequest.toPublicCallStackItem();
109
- const callStackHash = computeCallStackItemHash(wasm, callStackItem);
110
- const kernelOutput = makePrivateKernelPublicInputsFinal(0x10);
111
- kernelOutput.end.publicCallStack = padArrayEnd([callStackHash], Fr.ZERO, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX);
112
- kernelOutput.end.privateCallStack = padArrayEnd([], Fr.ZERO, MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX);
113
- const tx = new Tx(kernelOutput, proof, TxL2Logs.random(2, 3), TxL2Logs.random(3, 2), [callRequest], [ExtendedContractData.random()]);
114
- const publicExecutionResult = makePublicExecutionResultFromRequest(callRequest);
115
- publicExecutionResult.nestedExecutions = [
116
- makePublicExecutionResult(publicExecutionResult.execution.contractAddress, {
117
- to: makeAztecAddress(30),
118
- functionData: new FunctionData(makeSelector(5), false, false, false),
119
- args: new Array(ARGS_LENGTH).fill(Fr.ZERO),
120
- }),
121
- ];
122
- publicExecutor.simulate.mockResolvedValue(publicExecutionResult);
123
- const [processed, failed] = await processor.process([tx]);
124
- expect(processed).toHaveLength(1);
125
- expect(processed).toEqual([await expectedTxByHash(tx)]);
126
- expect(failed).toHaveLength(0);
127
- expect(publicExecutor.simulate).toHaveBeenCalledTimes(1);
128
- });
129
- });
130
- });
131
- function makePublicExecutionResultFromRequest(item) {
132
- return {
133
- execution: item,
134
- nestedExecutions: [],
135
- returnValues: [new Fr(1n)],
136
- newCommitments: [],
137
- newL2ToL1Messages: [],
138
- newNullifiers: [],
139
- contractStorageReads: [],
140
- contractStorageUpdateRequests: [],
141
- unencryptedLogs: new FunctionL2Logs([]),
142
- };
143
- }
144
- function makePublicExecutionResult(from, tx, nestedExecutions = []) {
145
- const callContext = new CallContext(from, tx.to, EthAddress.ZERO, false, false, false);
146
- const execution = {
147
- callContext,
148
- contractAddress: tx.to,
149
- functionData: tx.functionData,
150
- args: tx.args,
151
- };
152
- return {
153
- execution,
154
- nestedExecutions,
155
- returnValues: [],
156
- newCommitments: [],
157
- newNullifiers: [],
158
- newL2ToL1Messages: [],
159
- contractStorageReads: [],
160
- contractStorageUpdateRequests: [],
161
- unencryptedLogs: new FunctionL2Logs([]),
162
- };
163
- }
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9wdWJsaWNfcHJvY2Vzc29yLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFdBQVcsRUFFWCxXQUFXLEVBQ1gsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixVQUFVLEVBQ1YsRUFBRSxFQUNGLFlBQVksRUFDWixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLG9DQUFvQyxFQUNwQyxtQ0FBbUMsRUFDbkMsdUJBQXVCLEVBR3ZCLHdCQUF3QixFQUN4QixjQUFjLEVBQ2QsU0FBUyxHQUNWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQ0FBa0MsRUFDbEMscUJBQXFCLEVBQ3JCLFlBQVksR0FDYixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUVwQixjQUFjLEVBQ2QsV0FBVyxFQUNYLEVBQUUsRUFDRixRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sY0FBYyxDQUFDO0FBR3RCLE9BQU8sRUFBYSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFJakMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsSUFBSSxFQUFtQyxDQUFDO0lBQ3hDLElBQUksY0FBeUMsQ0FBQztJQUM5QyxJQUFJLFlBQXFDLENBQUM7SUFDMUMsSUFBSSxr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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":""}