@aztec/sequencer-client 0.16.1 → 0.16.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.
- package/dest/block_builder/solo_block_builder.d.ts +5 -6
- package/dest/block_builder/solo_block_builder.d.ts.map +1 -1
- package/dest/block_builder/solo_block_builder.js +38 -44
- package/dest/block_builder/types.d.ts +1 -1
- package/dest/block_builder/types.d.ts.map +1 -1
- package/dest/sequencer/processed_tx.d.ts +2 -2
- package/dest/sequencer/processed_tx.d.ts.map +1 -1
- package/dest/sequencer/processed_tx.js +3 -3
- package/dest/sequencer/public_processor.d.ts +3 -3
- package/dest/sequencer/public_processor.d.ts.map +1 -1
- package/dest/sequencer/public_processor.js +10 -10
- package/dest/sequencer/utils.d.ts +3 -3
- package/dest/sequencer/utils.d.ts.map +1 -1
- package/dest/sequencer/utils.js +5 -5
- package/package.json +11 -11
- package/src/block_builder/solo_block_builder.ts +46 -59
- package/src/block_builder/types.ts +1 -1
- package/src/sequencer/processed_tx.ts +3 -7
- package/src/sequencer/public_processor.ts +9 -9
- package/src/sequencer/utils.ts +4 -4
|
@@ -36,11 +36,10 @@ export declare class SoloBlockBuilder implements BlockBuilder {
|
|
|
36
36
|
protected mergeRollupCircuit(left: [BaseOrMergeRollupPublicInputs, Proof], right: [BaseOrMergeRollupPublicInputs, Proof]): Promise<[BaseOrMergeRollupPublicInputs, Proof]>;
|
|
37
37
|
protected getVerificationKey(type: RollupTypes): VerificationKey;
|
|
38
38
|
protected rootRollupCircuit(left: [BaseOrMergeRollupPublicInputs, Proof], right: [BaseOrMergeRollupPublicInputs, Proof], newL1ToL2Messages: Tuple<Fr, typeof NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP>): Promise<[RootRollupPublicInputs, Proof]>;
|
|
39
|
-
|
|
39
|
+
updateBlocksTree(globalVariables: GlobalVariables): Promise<void>;
|
|
40
40
|
protected calculateBlockHash(globals: GlobalVariables): Promise<Fr>;
|
|
41
41
|
protected validateTrees(rollupOutput: BaseOrMergeRollupPublicInputs | RootRollupPublicInputs): Promise<void>;
|
|
42
42
|
protected validateRootOutput(rootOutput: RootRollupPublicInputs): Promise<void>;
|
|
43
|
-
protected validateRootTree(rootOutput: RootRollupPublicInputs, treeId: MerkleTreeId, name: 'Contract' | 'NoteHash' | 'L1ToL2Messages'): Promise<void>;
|
|
44
43
|
/**
|
|
45
44
|
* Validates that the root of the public data tree matches the output of the circuit simulation.
|
|
46
45
|
* @param output - The output of the circuit simulation.
|
|
@@ -49,12 +48,12 @@ export declare class SoloBlockBuilder implements BlockBuilder {
|
|
|
49
48
|
*/
|
|
50
49
|
protected validatePublicDataTreeRoot(output: BaseOrMergeRollupPublicInputs | RootRollupPublicInputs): Promise<void>;
|
|
51
50
|
protected validateTree<T extends BaseOrMergeRollupPublicInputs | RootRollupPublicInputs>(output: T, treeId: MerkleTreeId, name: AllowedTreeNames<T>): Promise<void>;
|
|
52
|
-
protected validateSimulatedTree(localTree: AppendOnlyTreeSnapshot, simulatedTree: AppendOnlyTreeSnapshot, name: 'NoteHash' | 'Contract' | 'Nullifier' | 'L1ToL2Messages' | '
|
|
51
|
+
protected validateSimulatedTree(localTree: AppendOnlyTreeSnapshot, simulatedTree: AppendOnlyTreeSnapshot, name: 'NoteHash' | 'Contract' | 'Nullifier' | 'L1ToL2Messages' | 'Blocks', label?: string): void;
|
|
53
52
|
protected getRootRollupInput(rollupOutputLeft: BaseOrMergeRollupPublicInputs, rollupProofLeft: Proof, rollupOutputRight: BaseOrMergeRollupPublicInputs, rollupProofRight: Proof, newL1ToL2Messages: Tuple<Fr, typeof NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP>): Promise<RootRollupInputs>;
|
|
54
53
|
protected getPreviousRollupDataFromPublicInputs(rollupOutput: BaseOrMergeRollupPublicInputs, rollupProof: Proof, vk: VerificationKey): PreviousRollupData;
|
|
55
54
|
protected getKernelDataFor(tx: ProcessedTx): PreviousKernelData;
|
|
56
55
|
protected getMembershipWitnessFor<N extends number>(value: Fr, treeId: MerkleTreeId, height: N): Promise<MembershipWitness<N>>;
|
|
57
|
-
protected
|
|
56
|
+
protected getHistoricalTreesMembershipWitnessFor(tx: ProcessedTx): Promise<MembershipWitness<16>>;
|
|
58
57
|
protected getConstantRollupData(globalVariables: GlobalVariables): Promise<ConstantRollupData>;
|
|
59
58
|
protected getLowNullifierInfo(nullifier: Fr): Promise<{
|
|
60
59
|
index: number;
|
|
@@ -62,10 +61,10 @@ export declare class SoloBlockBuilder implements BlockBuilder {
|
|
|
62
61
|
witness: MembershipWitness<20>;
|
|
63
62
|
} | {
|
|
64
63
|
index: {
|
|
65
|
-
index:
|
|
64
|
+
index: bigint;
|
|
66
65
|
alreadyPresent: boolean;
|
|
67
66
|
};
|
|
68
|
-
leafPreimage:
|
|
67
|
+
leafPreimage: import("@aztec/foundation/trees").IndexedTreeLeafPreimage;
|
|
69
68
|
witness: MembershipWitness<20>;
|
|
70
69
|
}>;
|
|
71
70
|
protected getSubtreeSiblingPath(treeId: MerkleTreeId, subtreeHeight: number): Promise<Fr[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solo_block_builder.d.ts","sourceRoot":"","sources":["../../src/block_builder/solo_block_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,
|
|
1
|
+
{"version":3,"file":"solo_block_builder.d.ts","sourceRoot":"","sources":["../../src/block_builder/solo_block_builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AppendOnlyTreeSnapshot, BaseRollupInputs, CONTRACT_SUBTREE_HEIGHT, CONTRACT_SUBTREE_SIBLING_PATH_LENGTH, ConstantRollupData,
|
|
1
|
+
import { AppendOnlyTreeSnapshot, BLOCKS_TREE_HEIGHT, BaseRollupInputs, CONTRACT_SUBTREE_HEIGHT, CONTRACT_SUBTREE_SIBLING_PATH_LENGTH, ConstantRollupData, L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, MergeRollupInputs, NOTE_HASH_SUBTREE_HEIGHT, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NullifierLeafPreimage, PUBLIC_DATA_TREE_HEIGHT, PreviousKernelData, PreviousRollupData, ROLLUP_VK_TREE_HEIGHT, RollupTypes, RootRollupInputs, RootRollupPublicInputs, VK_TREE_HEIGHT, makeTuple, } from '@aztec/circuits.js';
|
|
2
2
|
import { computeBlockHash, computeBlockHashWithGlobals, computeContractLeaf, computeGlobalsHash, } from '@aztec/circuits.js/abis';
|
|
3
3
|
import { toFriendlyJSON } from '@aztec/circuits.js/utils';
|
|
4
4
|
import { toBigIntBE } from '@aztec/foundation/bigint-buffer';
|
|
@@ -10,8 +10,6 @@ import { ContractData, L2Block, L2BlockL2Logs, MerkleTreeId, PublicDataWrite, Tx
|
|
|
10
10
|
import chunk from 'lodash.chunk';
|
|
11
11
|
import flatMap from 'lodash.flatmap';
|
|
12
12
|
const frToBigInt = (fr) => toBigIntBE(fr.toBuffer());
|
|
13
|
-
const bigintToFr = (num) => new Fr(num);
|
|
14
|
-
const bigintToNum = (num) => Number(num);
|
|
15
13
|
// Denotes fields that are not used now, but will be in the future
|
|
16
14
|
const FUTURE_FR = new Fr(0n);
|
|
17
15
|
const FUTURE_NUM = 0;
|
|
@@ -38,7 +36,7 @@ export class SoloBlockBuilder {
|
|
|
38
36
|
* @returns The new L2 block and a correctness proof as returned by the root rollup circuit.
|
|
39
37
|
*/
|
|
40
38
|
async buildL2Block(globalVariables, txs, newL1ToL2Messages) {
|
|
41
|
-
const [startNoteHashTreeSnapshot, startNullifierTreeSnapshot, startContractTreeSnapshot, startPublicDataTreeSnapshot, startL1ToL2MessageTreeSnapshot,
|
|
39
|
+
const [startNoteHashTreeSnapshot, startNullifierTreeSnapshot, startContractTreeSnapshot, startPublicDataTreeSnapshot, startL1ToL2MessageTreeSnapshot, startBlocksTreeSnapshot,] = await Promise.all([
|
|
42
40
|
MerkleTreeId.NOTE_HASH_TREE,
|
|
43
41
|
MerkleTreeId.NULLIFIER_TREE,
|
|
44
42
|
MerkleTreeId.CONTRACT_TREE,
|
|
@@ -50,7 +48,7 @@ export class SoloBlockBuilder {
|
|
|
50
48
|
this.validateTxs(txs);
|
|
51
49
|
// We fill the tx batch with empty txs, we process only one tx at a time for now
|
|
52
50
|
const [circuitsOutput, proof] = await this.runCircuits(globalVariables, txs, newL1ToL2Messages);
|
|
53
|
-
const { endNoteHashTreeSnapshot, endNullifierTreeSnapshot, endContractTreeSnapshot, endPublicDataTreeRoot, endL1ToL2MessagesTreeSnapshot,
|
|
51
|
+
const { endNoteHashTreeSnapshot, endNullifierTreeSnapshot, endContractTreeSnapshot, endPublicDataTreeRoot, endL1ToL2MessagesTreeSnapshot, endBlocksTreeSnapshot, } = circuitsOutput;
|
|
54
52
|
// Collect all new nullifiers, commitments, and contracts from all txs in this block
|
|
55
53
|
const newNullifiers = flatMap(txs, tx => tx.data.end.newNullifiers);
|
|
56
54
|
const newCommitments = flatMap(txs, tx => tx.data.end.newCommitments);
|
|
@@ -82,8 +80,8 @@ export class SoloBlockBuilder {
|
|
|
82
80
|
endPublicDataTreeRoot,
|
|
83
81
|
startL1ToL2MessagesTreeSnapshot: startL1ToL2MessageTreeSnapshot,
|
|
84
82
|
endL1ToL2MessagesTreeSnapshot,
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
startBlocksTreeSnapshot,
|
|
84
|
+
endBlocksTreeSnapshot,
|
|
87
85
|
newCommitments,
|
|
88
86
|
newNullifiers,
|
|
89
87
|
newL2ToL1Msgs,
|
|
@@ -103,14 +101,14 @@ export class SoloBlockBuilder {
|
|
|
103
101
|
}
|
|
104
102
|
validateTxs(txs) {
|
|
105
103
|
for (const tx of txs) {
|
|
106
|
-
for (const
|
|
104
|
+
for (const historicalTreeRoot of [
|
|
107
105
|
'noteHashTreeRoot',
|
|
108
106
|
'contractTreeRoot',
|
|
109
107
|
'nullifierTreeRoot',
|
|
110
108
|
'l1ToL2MessagesTreeRoot',
|
|
111
109
|
]) {
|
|
112
|
-
if (tx.data.constants.
|
|
113
|
-
throw new Error(`Empty ${
|
|
110
|
+
if (tx.data.constants.blockHeader[historicalTreeRoot].isZero()) {
|
|
111
|
+
throw new Error(`Empty ${historicalTreeRoot} for tx: ${toFriendlyJSON(tx)}`);
|
|
114
112
|
}
|
|
115
113
|
}
|
|
116
114
|
}
|
|
@@ -190,12 +188,12 @@ export class SoloBlockBuilder {
|
|
|
190
188
|
this.debug(`Updating and validating root trees`);
|
|
191
189
|
const globalVariablesHash = computeGlobalsHash(left[0].constants.globalVariables);
|
|
192
190
|
await this.db.updateLatestGlobalVariablesHash(globalVariablesHash);
|
|
193
|
-
await this.db.
|
|
191
|
+
await this.db.updateBlocksTree(globalVariablesHash);
|
|
194
192
|
await this.validateRootOutput(rootOutput);
|
|
195
193
|
return [rootOutput, rootProof];
|
|
196
194
|
}
|
|
197
|
-
async
|
|
198
|
-
// Calculate the block hash and add it to the
|
|
195
|
+
async updateBlocksTree(globalVariables) {
|
|
196
|
+
// Calculate the block hash and add it to the historical block hashes tree
|
|
199
197
|
const blockHash = await this.calculateBlockHash(globalVariables);
|
|
200
198
|
await this.db.appendLeaves(MerkleTreeId.BLOCKS_TREE, [blockHash.toBuffer()]);
|
|
201
199
|
}
|
|
@@ -223,16 +221,10 @@ export class SoloBlockBuilder {
|
|
|
223
221
|
async validateRootOutput(rootOutput) {
|
|
224
222
|
await Promise.all([
|
|
225
223
|
this.validateTrees(rootOutput),
|
|
226
|
-
this.validateTree(rootOutput, MerkleTreeId.BLOCKS_TREE, '
|
|
224
|
+
this.validateTree(rootOutput, MerkleTreeId.BLOCKS_TREE, 'Blocks'),
|
|
227
225
|
this.validateTree(rootOutput, MerkleTreeId.L1_TO_L2_MESSAGES_TREE, 'L1ToL2Messages'),
|
|
228
226
|
]);
|
|
229
227
|
}
|
|
230
|
-
// Helper for validating a roots tree against a circuit simulation output
|
|
231
|
-
async validateRootTree(rootOutput, treeId, name) {
|
|
232
|
-
const localTree = await this.getTreeSnapshot(treeId);
|
|
233
|
-
const simulatedTree = rootOutput[`endTreeOfHistoric${name}TreeRootsSnapshot`];
|
|
234
|
-
this.validateSimulatedTree(localTree, simulatedTree, name, `Roots ${name}`);
|
|
235
|
-
}
|
|
236
228
|
/**
|
|
237
229
|
* Validates that the root of the public data tree matches the output of the circuit simulation.
|
|
238
230
|
* @param output - The output of the circuit simulation.
|
|
@@ -282,17 +274,17 @@ export class SoloBlockBuilder {
|
|
|
282
274
|
const newL1ToL2MessagesTreeRootSiblingPath = makeTuple(L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, i => i < newL1ToL2MessagesTreeRootSiblingPathArray.length ? newL1ToL2MessagesTreeRootSiblingPathArray[i] : Fr.ZERO, 0);
|
|
283
275
|
// Get tree snapshots
|
|
284
276
|
const startL1ToL2MessagesTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGES_TREE);
|
|
285
|
-
// Get
|
|
286
|
-
const
|
|
287
|
-
const
|
|
288
|
-
const
|
|
277
|
+
// Get blocks tree
|
|
278
|
+
const startBlocksTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.BLOCKS_TREE);
|
|
279
|
+
const newBlocksTreeSiblingPathArray = await getRootTreeSiblingPath(MerkleTreeId.BLOCKS_TREE);
|
|
280
|
+
const newBlocksTreeSiblingPath = makeTuple(BLOCKS_TREE_HEIGHT, i => (i < newBlocksTreeSiblingPathArray.length ? newBlocksTreeSiblingPathArray[i] : Fr.ZERO), 0);
|
|
289
281
|
return RootRollupInputs.from({
|
|
290
282
|
previousRollupData,
|
|
291
283
|
newL1ToL2Messages,
|
|
292
284
|
newL1ToL2MessagesTreeRootSiblingPath,
|
|
293
285
|
startL1ToL2MessagesTreeSnapshot,
|
|
294
|
-
|
|
295
|
-
|
|
286
|
+
startBlocksTreeSnapshot,
|
|
287
|
+
newBlocksTreeSiblingPath,
|
|
296
288
|
});
|
|
297
289
|
}
|
|
298
290
|
getPreviousRollupDataFromPublicInputs(rollupOutput, rollupProof, vk) {
|
|
@@ -320,11 +312,11 @@ export class SoloBlockBuilder {
|
|
|
320
312
|
const path = await this.db.getSiblingPath(treeId, index);
|
|
321
313
|
return new MembershipWitness(height, index, assertLength(path.toFieldArray(), height));
|
|
322
314
|
}
|
|
323
|
-
|
|
324
|
-
const
|
|
325
|
-
const { noteHashTreeRoot, nullifierTreeRoot, contractTreeRoot, l1ToL2MessagesTreeRoot, publicDataTreeRoot } =
|
|
326
|
-
const blockHash = computeBlockHash(
|
|
327
|
-
return this.getMembershipWitnessFor(blockHash, MerkleTreeId.BLOCKS_TREE,
|
|
315
|
+
getHistoricalTreesMembershipWitnessFor(tx) {
|
|
316
|
+
const blockHeader = tx.data.constants.blockHeader;
|
|
317
|
+
const { noteHashTreeRoot, nullifierTreeRoot, contractTreeRoot, l1ToL2MessagesTreeRoot, publicDataTreeRoot } = blockHeader;
|
|
318
|
+
const blockHash = computeBlockHash(blockHeader.globalVariablesHash, noteHashTreeRoot, nullifierTreeRoot, contractTreeRoot, l1ToL2MessagesTreeRoot, publicDataTreeRoot);
|
|
319
|
+
return this.getMembershipWitnessFor(blockHash, MerkleTreeId.BLOCKS_TREE, BLOCKS_TREE_HEIGHT);
|
|
328
320
|
}
|
|
329
321
|
async getConstantRollupData(globalVariables) {
|
|
330
322
|
return ConstantRollupData.from({
|
|
@@ -332,7 +324,7 @@ export class SoloBlockBuilder {
|
|
|
332
324
|
mergeRollupVkHash: DELETE_FR,
|
|
333
325
|
privateKernelVkTreeRoot: FUTURE_FR,
|
|
334
326
|
publicKernelVkTreeRoot: FUTURE_FR,
|
|
335
|
-
|
|
327
|
+
startBlocksTreeSnapshot: await this.getTreeSnapshot(MerkleTreeId.BLOCKS_TREE),
|
|
336
328
|
globalVariables,
|
|
337
329
|
});
|
|
338
330
|
}
|
|
@@ -347,14 +339,14 @@ export class SoloBlockBuilder {
|
|
|
347
339
|
}
|
|
348
340
|
const tree = MerkleTreeId.NULLIFIER_TREE;
|
|
349
341
|
const prevValueIndex = await this.db.getPreviousValueIndex(tree, frToBigInt(nullifier));
|
|
350
|
-
|
|
351
|
-
if (!prevValueInfo) {
|
|
342
|
+
if (!prevValueIndex) {
|
|
352
343
|
throw new Error(`Nullifier tree should have one initial leaf`);
|
|
353
344
|
}
|
|
345
|
+
const prevValuePreimage = (await this.db.getLeafPreimage(tree, prevValueIndex.index));
|
|
354
346
|
const prevValueSiblingPath = await this.db.getSiblingPath(tree, BigInt(prevValueIndex.index));
|
|
355
347
|
return {
|
|
356
348
|
index: prevValueIndex,
|
|
357
|
-
leafPreimage:
|
|
349
|
+
leafPreimage: prevValuePreimage,
|
|
358
350
|
witness: new MembershipWitness(NULLIFIER_TREE_HEIGHT, BigInt(prevValueIndex.index), assertLength(prevValueSiblingPath.toFieldArray(), NULLIFIER_TREE_HEIGHT)),
|
|
359
351
|
};
|
|
360
352
|
}
|
|
@@ -393,7 +385,7 @@ export class SoloBlockBuilder {
|
|
|
393
385
|
const startContractTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.CONTRACT_TREE);
|
|
394
386
|
const startNoteHashTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE);
|
|
395
387
|
const startPublicDataTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE);
|
|
396
|
-
const
|
|
388
|
+
const startBlocksTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.BLOCKS_TREE);
|
|
397
389
|
// Get the subtree sibling paths for the circuit
|
|
398
390
|
const newCommitmentsSubtreeSiblingPathArray = await this.getSubtreeSiblingPath(MerkleTreeId.NOTE_HASH_TREE, NOTE_HASH_SUBTREE_HEIGHT);
|
|
399
391
|
const newCommitmentsSubtreeSiblingPath = makeTuple(NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, i => i < newCommitmentsSubtreeSiblingPathArray.length ? newCommitmentsSubtreeSiblingPathArray[i] : Fr.ZERO);
|
|
@@ -422,7 +414,7 @@ export class SoloBlockBuilder {
|
|
|
422
414
|
: rightPublicDataUpdateRequestsSiblingPaths[i - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX]);
|
|
423
415
|
// Update the nullifier tree, capturing the low nullifier info for each individual operation
|
|
424
416
|
const newNullifiers = [...left.data.end.newNullifiers, ...right.data.end.newNullifiers];
|
|
425
|
-
const
|
|
417
|
+
const { lowLeavesWitnessData: nullifierWitnessLeaves, newSubtreeSiblingPath: newNullifiersSubtreeSiblingPath, sortedNewLeaves: sortedNewNullifiers, sortedNewLeavesIndexes: sortednewNullifiersIndexes, } = await this.db.batchInsert(MerkleTreeId.NULLIFIER_TREE, newNullifiers.map(fr => fr.toBuffer()), NULLIFIER_SUBTREE_HEIGHT);
|
|
426
418
|
if (nullifierWitnessLeaves === undefined) {
|
|
427
419
|
throw new Error(`Could not craft nullifier batch insertion proofs`);
|
|
428
420
|
}
|
|
@@ -435,22 +427,24 @@ export class SoloBlockBuilder {
|
|
|
435
427
|
startContractTreeSnapshot,
|
|
436
428
|
startNoteHashTreeSnapshot,
|
|
437
429
|
startPublicDataTreeRoot: startPublicDataTreeSnapshot.root,
|
|
438
|
-
|
|
430
|
+
startBlocksTreeSnapshot,
|
|
431
|
+
sortedNewNullifiers: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i => Fr.fromBuffer(sortedNewNullifiers[i])),
|
|
432
|
+
sortednewNullifiersIndexes: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i => sortednewNullifiersIndexes[i]),
|
|
439
433
|
newCommitmentsSubtreeSiblingPath,
|
|
440
434
|
newContractsSubtreeSiblingPath,
|
|
441
435
|
newNullifiersSubtreeSiblingPath: makeTuple(NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, i => i < newNullifiersSubtreeSiblingPathArray.length ? newNullifiersSubtreeSiblingPathArray[i] : Fr.ZERO),
|
|
442
436
|
newPublicDataUpdateRequestsSiblingPaths,
|
|
443
437
|
newPublicDataReadsSiblingPaths,
|
|
444
438
|
lowNullifierLeafPreimages: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i => i < nullifierWitnessLeaves.length
|
|
445
|
-
?
|
|
446
|
-
:
|
|
439
|
+
? nullifierWitnessLeaves[i].leafPreimage
|
|
440
|
+
: NullifierLeafPreimage.empty()),
|
|
447
441
|
lowNullifierMembershipWitness: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i => i < lowNullifierMembershipWitnesses.length
|
|
448
442
|
? lowNullifierMembershipWitnesses[i]
|
|
449
443
|
: this.makeEmptyMembershipWitness(NULLIFIER_TREE_HEIGHT)),
|
|
450
444
|
kernelData: [this.getKernelDataFor(left), this.getKernelDataFor(right)],
|
|
451
|
-
|
|
452
|
-
await this.
|
|
453
|
-
await this.
|
|
445
|
+
blocksTreeRootMembershipWitnesses: [
|
|
446
|
+
await this.getHistoricalTreesMembershipWitnessFor(left),
|
|
447
|
+
await this.getHistoricalTreesMembershipWitnessFor(right),
|
|
454
448
|
],
|
|
455
449
|
});
|
|
456
450
|
}
|
|
@@ -458,4 +452,4 @@ export class SoloBlockBuilder {
|
|
|
458
452
|
return new MembershipWitness(height, 0n, makeTuple(height, () => Fr.ZERO));
|
|
459
453
|
}
|
|
460
454
|
}
|
|
461
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sb19ibG9ja19idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jsb2NrX2J1aWxkZXIvc29sb19ibG9ja19idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixvQ0FBb0MsRUFDcEMsa0JBQWtCLEVBRWxCLDJCQUEyQixFQUMzQiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBQ3hDLGtDQUFrQyxFQUNsQyxxQ0FBcUMsRUFDckMsNEJBQTRCLEVBQzVCLCtDQUErQyxFQUMvQyxzQ0FBc0MsRUFDdEMsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIscUNBQXFDLEVBQ3JDLHdCQUF3QixFQUN4QixxQ0FBcUMsRUFDckMscUJBQXFCLEVBQ3JCLG1DQUFtQyxFQUNuQyxxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFFbEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLGNBQWMsRUFFZCxTQUFTLEdBQ1YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsa0JBQWtCLEdBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHN0csT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQ2pDLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBU3JDLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDekQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFakQsa0VBQWtFO0FBQ2xFLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVyQix3Q0FBd0M7QUFDeEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFN0I7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUNZLEVBQXdCLEVBQ3hCLEdBQXFCLEVBQ3JCLFNBQTBCLEVBQzFCLE1BQW9CLEVBQ3BCLFFBQVEsaUJBQWlCLENBQUMsb0NBQW9DLENBQUM7UUFKL0QsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixVQUFLLEdBQUwsS0FBSyxDQUEwRDtJQUN4RSxDQUFDO0lBRUo7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyxZQUFZLENBQ3ZCLGVBQWdDLEVBQ2hDLEdBQWtCLEVBQ2xCLGlCQUF1QjtRQUV2QixNQUFNLENBQ0oseUJBQXlCLEVBQ3pCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLDhCQUE4QixFQUM5QiwrQkFBK0IsRUFDaEMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ25CO1lBQ0UsWUFBWSxDQUFDLGNBQWM7WUFDM0IsWUFBWSxDQUFDLGNBQWM7WUFDM0IsWUFBWSxDQUFDLGFBQWE7WUFDMUIsWUFBWSxDQUFDLGdCQUFnQjtZQUM3QixZQUFZLENBQUMsc0JBQXNCO1lBQ25DLFlBQVksQ0FBQyxXQUFXO1NBQ3pCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUMxQyxDQUFDO1FBRUYsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdEIsZ0ZBQWdGO1FBQ2hGLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUVoRyxNQUFNLEVBQ0osdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FDOUIsR0FBRyxjQUFjLENBQUM7UUFFbkIsb0ZBQW9GO1FBQ3BGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckcsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FDdEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUNsRSxDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQzVDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQzVGLENBQUM7UUFDRixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFcEUscUNBQXFDO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQWUsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sa0JBQWtCLEdBQWUsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFO1lBQ3BCLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxhQUFhLElBQUksSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxlQUFlLElBQUksSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzFDO1FBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakQsZUFBZTtZQUNmLHlCQUF5QjtZQUN6Qix1QkFBdUI7WUFDdkIsMEJBQTBCO1lBQzFCLHdCQUF3QjtZQUN4Qix5QkFBeUI7WUFDekIsdUJBQXVCO1lBQ3ZCLHVCQUF1QixFQUFFLDJCQUEyQixDQUFDLElBQUk7WUFDekQscUJBQXFCO1lBQ3JCLCtCQUErQixFQUFFLDhCQUE4QjtZQUMvRCw2QkFBNkI7WUFDN0IsK0JBQStCO1lBQy9CLDZCQUE2QjtZQUM3QixjQUFjO1lBQ2QsYUFBYTtZQUNiLGFBQWE7WUFDYixZQUFZO1lBQ1osZUFBZTtZQUNmLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLGtCQUFrQjtTQUNuQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFO1lBQzFFLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkJBQTJCLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sY0FBYztpQkFDdEYsa0JBQWtCLEVBQUU7aUJBQ3BCLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUN0QixDQUFDO1NBQ0g7UUFFRCxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFUyxXQUFXLENBQUMsR0FBa0I7UUFDdEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDcEIsS0FBSyxNQUFNLGdCQUFnQixJQUFJO2dCQUM3QixrQkFBa0I7Z0JBQ2xCLGtCQUFrQjtnQkFDbEIsbUJBQW1CO2dCQUNuQix3QkFBd0I7YUFDaEIsRUFBRTtnQkFDVixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsZ0JBQWdCLFlBQVksY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDNUU7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBZ0I7UUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLElBQUksc0JBQXNCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFUyxLQUFLLENBQUMsV0FBVyxDQUN6QixlQUFnQyxFQUNoQyxHQUFrQixFQUNsQixpQkFBdUI7UUFFdkIsOERBQThEO1FBQzlELCtFQUErRTtRQUMvRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDL0c7UUFFRCxxR0FBcUc7UUFDckcsTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBRTVHLDJDQUEyQztRQUMzQyxNQUFNLGlCQUFpQixHQUE2QyxFQUFFLENBQUM7UUFDdkUsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7U0FDakY7UUFFRCw2REFBNkQ7UUFDN0QsSUFBSSxpQkFBaUIsR0FBNkMsaUJBQWlCLENBQUM7UUFDcEYsSUFBSSxrQkFBa0IsR0FBNkMsRUFBRSxDQUFDO1FBQ3RFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDOUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNoRTtZQUNELGlCQUFpQixHQUFHLGtCQUFrQixDQUFDO1lBQ3ZDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztTQUN6QjtRQUVELG9GQUFvRjtRQUNwRixNQUFNLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsaUJBQWlCLENBQUM7UUFDOUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FDL0IsR0FBZ0IsRUFDaEIsR0FBZ0IsRUFDaEIsZUFBZ0M7UUFFaEMsSUFBSSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5RSxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFUyxLQUFLLENBQUMsa0JBQWtCLENBQ2hDLElBQTRDLEVBQzVDLEtBQTZDO1FBRTdDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztZQUN4QyxJQUFJLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ25FLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxJQUFpQjtRQUM1QyxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssV0FBVyxDQUFDLElBQUk7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztZQUNwQyxLQUFLLFdBQVcsQ0FBQyxLQUFLO2dCQUNwQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7WUFDckM7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFUyxLQUFLLENBQUMsaUJBQWlCLENBQy9CLElBQTRDLEVBQzVDLEtBQTZDLEVBQzdDLGlCQUF3RTtRQUV4RSxJQUFJLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUV0Riw4REFBOEQ7UUFDOUQsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDeEIsWUFBWSxDQUFDLHNCQUFzQixFQUNuQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDekMsQ0FBQztRQUVGLDhDQUE4QztRQUM5QyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckUsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUU5RSxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUNqRCxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEYsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLCtCQUErQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbkUsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFNUQsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLGVBQWdDO1FBQzdELHdFQUF3RTtRQUN4RSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFUyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBd0I7UUFDekQsTUFBTSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDLEdBQUcsQ0FDekcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmO1lBQ0UsWUFBWSxDQUFDLGNBQWM7WUFDM0IsWUFBWSxDQUFDLGNBQWM7WUFDM0IsWUFBWSxDQUFDLGFBQWE7WUFDMUIsWUFBWSxDQUFDLGdCQUFnQjtZQUM3QixZQUFZLENBQUMsc0JBQXNCO1NBQ3BDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUMxQyxDQUNGLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5CLE1BQU0sU0FBUyxHQUFHLDJCQUEyQixDQUMzQyxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGtCQUFrQixDQUNuQixDQUFDO1FBQ0YsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHVHQUF1RztJQUM3RixLQUFLLENBQUMsYUFBYSxDQUFDLFlBQW9FO1FBQ2hHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQztZQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQztZQUN4RSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQztZQUN6RSxJQUFJLENBQUMsMEJBQTBCLENBQUMsWUFBWSxDQUFDO1NBQzlDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw2RkFBNkY7SUFDbkYsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQWtDO1FBQ25FLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDO1lBQ3pFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsQ0FBQztTQUNyRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUVBQXlFO0lBQy9ELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDOUIsVUFBa0MsRUFDbEMsTUFBb0IsRUFDcEIsSUFBZ0Q7UUFFaEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sS0FBSyxDQUFDLDBCQUEwQixDQUFDLE1BQThEO1FBQ3ZHLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQ25FLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLFNBQVMsQ0FBQyxJQUFJLGVBQWUsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1NBQzVHO0lBQ0gsQ0FBQztJQUVELDZFQUE2RTtJQUNuRSxLQUFLLENBQUMsWUFBWSxDQUMxQixNQUFTLEVBQ1QsTUFBb0IsRUFDcEIsSUFBeUI7UUFFekIsSUFBSSw4QkFBOEIsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxzQkFBc0IsQ0FBQyxFQUFFO1lBQzNGLE1BQU0sSUFBSSxLQUFLLENBQUMseUZBQXlGLENBQUMsQ0FBQztTQUM1RztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxNQUFNLGFBQWEsR0FBSSxNQUFvQyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsMkNBQTJDO0lBQ2pDLHFCQUFxQixDQUM3QixTQUFpQyxFQUNqQyxhQUFxQyxFQUNyQyxJQUFpRixFQUNqRixLQUFjO1FBRWQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRTtZQUNwRSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksOEJBQThCLFNBQVMsQ0FBQyxJQUFJLGVBQWUsYUFBYSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7U0FDbkg7UUFDRCxJQUFJLGFBQWEsQ0FBQyxzQkFBc0IsS0FBSyxTQUFTLENBQUMsc0JBQXNCLEVBQUU7WUFDN0UsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLEtBQUssSUFBSSxJQUFJLG1EQUNkLFNBQVMsQ0FBQyxzQkFDWixlQUFlLGFBQWEsQ0FBQyxzQkFBc0IsR0FBRyxDQUN2RCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQscUZBQXFGO0lBQzNFLEtBQUssQ0FBQyxrQkFBa0IsQ0FDaEMsZ0JBQStDLEVBQy9DLGVBQXNCLEVBQ3RCLGlCQUFnRCxFQUNoRCxnQkFBdUIsRUFDdkIsaUJBQXdFO1FBRXhFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRSxNQUFNLGtCQUFrQixHQUEyQztZQUNqRSxJQUFJLENBQUMscUNBQXFDLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUNqRixJQUFJLENBQUMscUNBQXFDLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1NBQ3BGLENBQUM7UUFFRixNQUFNLHNCQUFzQixHQUFHLEtBQUssRUFBRSxNQUFvQixFQUFFLEVBQUU7WUFDNUQsK0VBQStFO1lBQy9FLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELG9DQUFvQztZQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUM7UUFFRixNQUFNLHlDQUF5QyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUNoRixZQUFZLENBQUMsc0JBQXNCLEVBQ25DLDJCQUEyQixDQUM1QixDQUFDO1FBRUYsTUFBTSxvQ0FBb0MsR0FBRyxTQUFTLENBQ3BELHdDQUF3QyxFQUN4QyxDQUFDLENBQUMsRUFBRSxDQUNGLENBQUMsR0FBRyx5Q0FBeUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUMvRyxDQUFDLENBQ0YsQ0FBQztRQUVGLHFCQUFxQjtRQUNyQixNQUFNLCtCQUErQixHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUV4RyxnQ0FBZ0M7UUFDaEMsTUFBTSwrQkFBK0IsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdGLE1BQU0scUNBQXFDLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFckcsTUFBTSxnQ0FBZ0MsR0FBRyxTQUFTLENBQ2hELDJCQUEyQixFQUMzQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLHFDQUFxQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDNUcsQ0FBQyxDQUNGLENBQUM7UUFFRixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixrQkFBa0I7WUFDbEIsaUJBQWlCO1lBQ2pCLG9DQUFvQztZQUNwQywrQkFBK0I7WUFDL0IsK0JBQStCO1lBQy9CLGdDQUFnQztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMscUNBQXFDLENBQzdDLFlBQTJDLEVBQzNDLFdBQWtCLEVBQ2xCLEVBQW1CO1FBRW5CLE9BQU8sSUFBSSxrQkFBa0IsQ0FDM0IsWUFBWSxFQUNaLFdBQVcsRUFDWCxFQUFFO1FBRUYsa0VBQWtFO1FBQ2xFLFVBQVUsRUFDVixJQUFJLGlCQUFpQixDQUNuQixxQkFBcUIsRUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUNsQixTQUFTLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQ2xELENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxFQUFlO1FBQ3hDLE9BQU8sSUFBSSxrQkFBa0IsQ0FDM0IsRUFBRSxDQUFDLElBQUksRUFDUCxFQUFFLENBQUMsS0FBSztRQUVSLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQjtRQUU3QixrRUFBa0U7UUFDbEUsVUFBVSxFQUNWLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUNwRSxDQUFDO0lBQ0osQ0FBQztJQUVELDBGQUEwRjtJQUNoRixLQUFLLENBQUMsdUJBQXVCLENBQ3JDLEtBQVMsRUFDVCxNQUFvQixFQUNwQixNQUFTO1FBRVQsa0RBQWtEO1FBQ2xELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLEtBQUssc0JBQXNCLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdkY7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVTLG9DQUFvQyxDQUFDLEVBQWU7UUFDNUQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxHQUN6RyxTQUFTLENBQUM7UUFDWixNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FDaEMsU0FBUyxDQUFDLG1CQUFtQixFQUM3QixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsa0JBQWtCLENBQ25CLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFUyxLQUFLLENBQUMscUJBQXFCLENBQUMsZUFBZ0M7UUFDcEUsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDN0IsZ0JBQWdCLEVBQUUsU0FBUztZQUMzQixpQkFBaUIsRUFBRSxTQUFTO1lBQzVCLHVCQUF1QixFQUFFLFNBQVM7WUFDbEMsc0JBQXNCLEVBQUUsU0FBUztZQUNqQyxvQ0FBb0MsRUFBRSxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUMxRixlQUFlO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBYTtRQUMvQyw4Q0FBOEM7UUFDOUMsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUMxQixPQUFPO2dCQUNMLEtBQUssRUFBRSxDQUFDO2dCQUNSLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMscUJBQXFCLENBQUM7YUFDaEUsQ0FBQztTQUNIO1FBRUQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUNoRTtRQUNELE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTlGLE9BQU87WUFDTCxLQUFLLEVBQUUsY0FBYztZQUNyQixZQUFZLEVBQUUsSUFBSSxxQkFBcUIsQ0FDckMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFDL0IsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFDbkMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FDckM7WUFDRCxPQUFPLEVBQUUsSUFBSSxpQkFBaUIsQ0FDNUIscUJBQXFCLEVBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQzVCLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUN6RTtTQUNGLENBQUM7SUFDSixDQUFDO0lBRVMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQW9CLEVBQUUsYUFBcUI7UUFDL0UsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBRXJGLDJGQUEyRjtRQUMzRixPQUFPLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRVMsS0FBSyxDQUFDLCtCQUErQixDQUFDLEVBQWU7UUFDN0QsTUFBTSx1Q0FBdUMsR0FHekMsU0FBUyxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFO1lBQ3BELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDdEUsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FDdEIsWUFBWSxDQUFDLGdCQUFnQixFQUM3QixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQzNELEtBQUssQ0FDTixDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xDLHVDQUF1QyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUNsRixDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUN0QyxDQUFDO1NBQ0g7UUFDRCxPQUFPLHVDQUF1QyxDQUFDO0lBQ2pELENBQUM7SUFFUyxLQUFLLENBQUMsOEJBQThCLENBQUMsRUFBZTtRQUM1RCxNQUFNLDhCQUE4QixHQUdoQyxTQUFTLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9GLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFO1lBQzNDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQzdELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FDekUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FDdEMsQ0FBQztTQUNIO1FBQ0QsT0FBTyw4QkFBOEIsQ0FBQztJQUN4QyxDQUFDO0lBRUQsaUdBQWlHO0lBQ3ZGLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFpQixFQUFFLEtBQWtCLEVBQUUsZUFBZ0M7UUFDMUcsd0NBQXdDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzRixNQUFNLHlCQUF5QixHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekYsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlGLE1BQU0sK0JBQStCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3RixnREFBZ0Q7UUFDaEQsTUFBTSxxQ0FBcUMsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDNUUsWUFBWSxDQUFDLGNBQWMsRUFDM0Isd0JBQXdCLENBQ3pCLENBQUM7UUFFRixNQUFNLGdDQUFnQyxHQUFHLFNBQVMsQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUM1RixDQUFDLEdBQUcscUNBQXFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FDdEcsQ0FBQztRQUVGLE1BQU0sbUNBQW1DLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQzFFLFlBQVksQ0FBQyxhQUFhLEVBQzFCLHVCQUF1QixDQUN4QixDQUFDO1FBRUYsTUFBTSw4QkFBOEIsR0FBRyxTQUFTLENBQUMsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FDekYsQ0FBQyxHQUFHLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQ2xHLENBQUM7UUFFRixpR0FBaUc7UUFDakcsOEZBQThGO1FBQzlGLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0csTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDeEIsWUFBWSxDQUFDLGFBQWEsRUFDMUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUNwQyxDQUFDO1FBRUYsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXhFLDREQUE0RDtRQUM1RCx3R0FBd0c7UUFDeEcsOEZBQThGO1FBQzlGLDZFQUE2RTtRQUM3RSwwRkFBMEY7UUFDMUYsTUFBTSw4QkFBOEIsR0FBRyxNQUFNLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RixNQUFNLHdDQUF3QyxHQUFHLE1BQU0sSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sK0JBQStCLEdBQUcsTUFBTSxJQUFJLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekYsTUFBTSx5Q0FBeUMsR0FBRyxNQUFNLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRyxNQUFNLDhCQUE4QixHQUFHLFNBQVMsQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUMxRixDQUFDLEdBQUcsNEJBQTRCO1lBQzlCLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxDQUN0RSxDQUFDO1FBRUYsTUFBTSx1Q0FBdUMsR0FBRyxTQUFTLENBQUMsK0NBQStDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FDN0csQ0FBQyxHQUFHLHNDQUFzQztZQUN4QyxDQUFDLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEdBQUcsc0NBQXNDLENBQUMsQ0FDMUYsQ0FBQztRQUVGLDRGQUE0RjtRQUM1RixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFeEYsTUFBTSxDQUFDLHNCQUFzQixFQUFFLCtCQUErQixDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FDekYsWUFBWSxDQUFDLGNBQWMsRUFDM0IsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUN0Qyx3QkFBd0IsQ0FDekIsQ0FBQztRQUNGLElBQUksc0JBQXNCLEtBQUssU0FBUyxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztTQUNyRTtRQUVELDZDQUE2QztRQUM3QyxNQUFNLCtCQUErQixHQUNuQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDN0IsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUMvRyxDQUFDO1FBRUosTUFBTSxvQ0FBb0MsR0FBRywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU1RixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixTQUFTO1lBQ1QsMEJBQTBCO1lBQzFCLHlCQUF5QjtZQUN6Qix5QkFBeUI7WUFDekIsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMsSUFBSTtZQUN6RCwrQkFBK0I7WUFDL0IsZ0NBQWdDO1lBQ2hDLDhCQUE4QjtZQUM5QiwrQkFBK0IsRUFBRSxTQUFTLENBQUMscUNBQXFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FDcEYsQ0FBQyxHQUFHLG9DQUFvQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQ3BHO1lBQ0QsdUNBQXVDO1lBQ3ZDLDhCQUE4QjtZQUM5Qix5QkFBeUIsRUFBRSxTQUFTLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FDM0UsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLE1BQU07Z0JBQy9CLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUN2QixJQUFJLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ2hELElBQUksRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFDcEQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FDckQ7Z0JBQ0gsQ0FBQyxDQUFDLElBQUkscUJBQXFCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUNuRDtZQUNELDZCQUE2QixFQUFFLFNBQVMsQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUMvRSxDQUFDLEdBQUcsK0JBQStCLENBQUMsTUFBTTtnQkFDeEMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUMzRDtZQUNELFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkUseUNBQXlDLEVBQUU7Z0JBQ3pDLE1BQU0sSUFBSSxDQUFDLG9DQUFvQyxDQUFDLElBQUksQ0FBQztnQkFDckQsTUFBTSxJQUFJLENBQUMsb0NBQW9DLENBQUMsS0FBSyxDQUFDO2FBQ3ZEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLDBCQUEwQixDQUFtQixNQUFTO1FBQzlELE9BQU8sSUFBSSxpQkFBaUIsQ0FDMUIsTUFBTSxFQUNOLEVBQUUsRUFDRixTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDakMsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
|
|
455
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sb19ibG9ja19idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jsb2NrX2J1aWxkZXIvc29sb19ibG9ja19idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsa0JBQWtCLEVBRWxCLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsb0NBQW9DLEVBQ3BDLGtCQUFrQixFQUVsQiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBQ3hDLGtDQUFrQyxFQUNsQyxxQ0FBcUMsRUFDckMsNEJBQTRCLEVBQzVCLCtDQUErQyxFQUMvQyxzQ0FBc0MsRUFDdEMsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIscUNBQXFDLEVBQ3JDLHdCQUF3QixFQUN4QixxQ0FBcUMsRUFDckMscUJBQXFCLEVBQ3JCLG1DQUFtQyxFQUNuQyxxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFFbEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLGNBQWMsRUFFZCxTQUFTLEdBQ1YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsa0JBQWtCLEdBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFB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
|
|
@@ -2,7 +2,7 @@ import { AppendOnlyTreeSnapshot, BaseOrMergeRollupPublicInputs, RootRollupPublic
|
|
|
2
2
|
/**
|
|
3
3
|
* Type to assert that only the correct trees are checked when validating rollup tree outputs.
|
|
4
4
|
*/
|
|
5
|
-
export type AllowedTreeNames<T extends BaseOrMergeRollupPublicInputs | RootRollupPublicInputs> = T extends RootRollupPublicInputs ? 'NoteHash' | 'Contract' | 'Nullifier' | 'L1ToL2Messages' | '
|
|
5
|
+
export type AllowedTreeNames<T extends BaseOrMergeRollupPublicInputs | RootRollupPublicInputs> = T extends RootRollupPublicInputs ? 'NoteHash' | 'Contract' | 'Nullifier' | 'L1ToL2Messages' | 'Blocks' : 'NoteHash' | 'Contract' | 'Nullifier';
|
|
6
6
|
/**
|
|
7
7
|
* Type to assert the correct object field is indexed when validating rollup tree outputs.
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
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,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,
|
|
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,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,QAAQ,GACnE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAE5C;;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,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlockHeader, Fr, Proof, PublicKernelPublicInputs } from '@aztec/circuits.js';
|
|
2
2
|
import { Tx, TxHash } from '@aztec/types';
|
|
3
3
|
/**
|
|
4
4
|
* Represents a tx that has been processed by the sequencer public processor,
|
|
@@ -47,5 +47,5 @@ export declare function makeProcessedTx(tx: Tx, kernelOutput: PublicKernelPublic
|
|
|
47
47
|
* Makes an empty tx from an empty kernel circuit public inputs.
|
|
48
48
|
* @returns A processed empty tx.
|
|
49
49
|
*/
|
|
50
|
-
export declare function makeEmptyProcessedTx(
|
|
50
|
+
export declare function makeEmptyProcessedTx(historicalTreeRoots: BlockHeader, chainId: Fr, version: Fr): Promise<ProcessedTx>;
|
|
51
51
|
//# sourceMappingURL=processed_tx.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processed_tx.d.ts","sourceRoot":"","sources":["../../src/sequencer/processed_tx.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"processed_tx.d.ts","sourceRoot":"","sources":["../../src/sequencer/processed_tx.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,EAAE,EACF,KAAK,EACL,wBAAwB,EAEzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAwB,EAAE,EAAE,MAAM,EAAY,MAAM,cAAc,CAAC;AAE1E;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,GAAG,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC,GAAG;IACnG;;OAEG;IACH,IAAI,EAAE,wBAAwB,CAAC;IAC/B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,EAAE,EAAE,EAAE,CAAC;IACP;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,EAAE,EACN,YAAY,EAAE,wBAAwB,EACtC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,WAAW,CAAC,CAAC;AA0BxB;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAiBrH"}
|
|
@@ -22,9 +22,9 @@ export async function makeProcessedTx(tx, kernelOutput, proof) {
|
|
|
22
22
|
* Makes an empty tx from an empty kernel circuit public inputs.
|
|
23
23
|
* @returns A processed empty tx.
|
|
24
24
|
*/
|
|
25
|
-
export function makeEmptyProcessedTx(
|
|
25
|
+
export function makeEmptyProcessedTx(historicalTreeRoots, chainId, version) {
|
|
26
26
|
const emptyKernelOutput = PublicKernelPublicInputs.empty();
|
|
27
|
-
emptyKernelOutput.constants.
|
|
27
|
+
emptyKernelOutput.constants.blockHeader = historicalTreeRoots;
|
|
28
28
|
emptyKernelOutput.constants.txContext.chainId = chainId;
|
|
29
29
|
emptyKernelOutput.constants.txContext.version = version;
|
|
30
30
|
const emptyProof = makeEmptyProof();
|
|
@@ -39,4 +39,4 @@ export function makeEmptyProcessedTx(historicTreeRoots, chainId, version) {
|
|
|
39
39
|
isEmpty: true,
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc2VkX3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9wcm9jZXNzZWRfdHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixFQUFFLEVBRUYsd0JBQXdCLEVBQ3hCLGNBQWMsR0FDZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBTSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBcUQxRTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUNuQyxFQUFNLEVBQ04sWUFBdUMsRUFDdkMsS0FBYTtJQUViLE9BQU87UUFDTCxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFO1FBQzFCLElBQUksRUFDRixZQUFZO1lBQ1osSUFBSSx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hILEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUs7UUFDeEIsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhO1FBQy9CLGVBQWUsRUFBRSxFQUFFLENBQUMsZUFBZTtRQUNuQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVk7UUFDN0IsT0FBTyxFQUFFLEtBQUs7S0FDZixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxtQkFBZ0MsRUFBRSxPQUFXLEVBQUUsT0FBVztJQUM3RixNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNELGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7SUFDOUQsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3hELGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN4RCxNQUFNLFVBQVUsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUVwQyxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3JCLElBQUk7UUFDSixhQUFhLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQy9CLGVBQWUsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDakMsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixLQUFLLEVBQUUsVUFBVTtRQUNqQixZQUFZLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEVBQUUsSUFBSTtLQUNkLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PublicExecutionResult, PublicExecutor, PublicStateDB } from '@aztec/acir-simulator';
|
|
2
|
-
import { Fr, GlobalVariables,
|
|
2
|
+
import { BlockHeader, Fr, GlobalVariables, KernelCircuitPublicInputs, PreviousKernelData, Proof, PublicCallData, PublicCallStackItem, PublicCircuitPublicInputs, PublicKernelPublicInputs } from '@aztec/circuits.js';
|
|
3
3
|
import { ContractDataSource, FunctionL2Logs, L1ToL2MessageSource, Tx } from '@aztec/types';
|
|
4
4
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
5
5
|
import { PublicProver } from '../prover/index.js';
|
|
@@ -33,11 +33,11 @@ export declare class PublicProcessor {
|
|
|
33
33
|
protected publicKernel: PublicKernelCircuitSimulator;
|
|
34
34
|
protected publicProver: PublicProver;
|
|
35
35
|
protected globalVariables: GlobalVariables;
|
|
36
|
-
protected
|
|
36
|
+
protected blockHeader: BlockHeader;
|
|
37
37
|
protected publicContractsDB: ContractsDataSourcePublicDB;
|
|
38
38
|
protected publicStateDB: PublicStateDB;
|
|
39
39
|
private log;
|
|
40
|
-
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables,
|
|
40
|
+
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, blockHeader: BlockHeader, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, log?: import("@aztec/foundation/log").DebugLogger);
|
|
41
41
|
/**
|
|
42
42
|
* Run each tx through the public circuit and the public kernel circuit if needed.
|
|
43
43
|
* @param txs - Txs to process.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_processor.d.ts","sourceRoot":"","sources":["../../src/sequencer/public_processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACrB,cAAc,EACd,aAAa,EAId,MAAM,uBAAuB,CAAC;AAC/B,OAAO,
|
|
1
|
+
{"version":3,"file":"public_processor.d.ts","sourceRoot":"","sources":["../../src/sequencer/public_processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { EmptyPublicProver } from '../prover/empty.js';
|
|
|
10
10
|
import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from '../simulator/public_executor.js';
|
|
11
11
|
import { RealPublicKernelCircuitSimulator } from '../simulator/public_kernel.js';
|
|
12
12
|
import { makeEmptyProcessedTx, makeProcessedTx } from './processed_tx.js';
|
|
13
|
-
import {
|
|
13
|
+
import { getBlockHeader } from './utils.js';
|
|
14
14
|
/**
|
|
15
15
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
16
16
|
*/
|
|
@@ -28,12 +28,12 @@ export class PublicProcessorFactory {
|
|
|
28
28
|
* @returns A new instance of a PublicProcessor.
|
|
29
29
|
*/
|
|
30
30
|
async create(prevGlobalVariables, globalVariables) {
|
|
31
|
-
const
|
|
31
|
+
const blockHeader = await getBlockHeader(this.merkleTree, prevGlobalVariables);
|
|
32
32
|
const publicContractsDB = new ContractsDataSourcePublicDB(this.contractDataSource);
|
|
33
33
|
const worldStatePublicDB = new WorldStatePublicDB(this.merkleTree);
|
|
34
34
|
const worldStateDB = new WorldStateDB(this.merkleTree, this.l1Tol2MessagesDataSource);
|
|
35
|
-
const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB,
|
|
36
|
-
return new PublicProcessor(this.merkleTree, publicExecutor, new RealPublicKernelCircuitSimulator(), new EmptyPublicProver(), globalVariables,
|
|
35
|
+
const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, blockHeader);
|
|
36
|
+
return new PublicProcessor(this.merkleTree, publicExecutor, new RealPublicKernelCircuitSimulator(), new EmptyPublicProver(), globalVariables, blockHeader, publicContractsDB, worldStatePublicDB);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
@@ -41,13 +41,13 @@ export class PublicProcessorFactory {
|
|
|
41
41
|
* any public function calls in them. Txs with private calls only are unaffected.
|
|
42
42
|
*/
|
|
43
43
|
export class PublicProcessor {
|
|
44
|
-
constructor(db, publicExecutor, publicKernel, publicProver, globalVariables,
|
|
44
|
+
constructor(db, publicExecutor, publicKernel, publicProver, globalVariables, blockHeader, publicContractsDB, publicStateDB, log = createDebugLogger('aztec:sequencer:public-processor')) {
|
|
45
45
|
this.db = db;
|
|
46
46
|
this.publicExecutor = publicExecutor;
|
|
47
47
|
this.publicKernel = publicKernel;
|
|
48
48
|
this.publicProver = publicProver;
|
|
49
49
|
this.globalVariables = globalVariables;
|
|
50
|
-
this.
|
|
50
|
+
this.blockHeader = blockHeader;
|
|
51
51
|
this.publicContractsDB = publicContractsDB;
|
|
52
52
|
this.publicStateDB = publicStateDB;
|
|
53
53
|
this.log = log;
|
|
@@ -91,7 +91,7 @@ export class PublicProcessor {
|
|
|
91
91
|
*/
|
|
92
92
|
makeEmptyProcessedTx() {
|
|
93
93
|
const { chainId, version } = this.globalVariables;
|
|
94
|
-
return makeEmptyProcessedTx(this.
|
|
94
|
+
return makeEmptyProcessedTx(this.blockHeader, chainId, version);
|
|
95
95
|
}
|
|
96
96
|
async processTx(tx) {
|
|
97
97
|
if (!isArrayEmpty(tx.data.end.publicCallStack, item => item.isEmpty())) {
|
|
@@ -170,7 +170,7 @@ export class PublicProcessor {
|
|
|
170
170
|
}
|
|
171
171
|
async getPublicCircuitPublicInputs(result) {
|
|
172
172
|
const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE);
|
|
173
|
-
this.
|
|
173
|
+
this.blockHeader.publicDataTreeRoot = Fr.fromBuffer(publicDataTreeInfo.root);
|
|
174
174
|
const callStackPreimages = await this.getPublicCallStackPreimages(result);
|
|
175
175
|
const publicCallStackHashes = padArrayEnd(callStackPreimages.map(c => c.hash()), Fr.ZERO, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
|
|
176
176
|
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165) --> set this in Noir
|
|
@@ -189,7 +189,7 @@ export class PublicProcessor {
|
|
|
189
189
|
publicCallStackHashes,
|
|
190
190
|
unencryptedLogsHash,
|
|
191
191
|
unencryptedLogPreimagesLength,
|
|
192
|
-
|
|
192
|
+
blockHeader: this.blockHeader,
|
|
193
193
|
});
|
|
194
194
|
}
|
|
195
195
|
async getPublicCallStackItem(result, isExecutionRequest = false) {
|
|
@@ -279,4 +279,4 @@ export class PublicProcessor {
|
|
|
279
279
|
], PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsY0FBYyxFQUVkLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsdUJBQXVCLEdBQ3hCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsRUFBRSxFQUdGLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQixxQ0FBcUMsRUFDckMsOEJBQThCLEVBQzlCLDRCQUE0QixFQUM1Qix3Q0FBd0MsRUFDeEMsc0NBQXNDLEVBQ3RDLGlCQUFpQixFQUNqQixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixrQkFBa0IsRUFFbEIsb0JBQW9CLEVBQ3BCLGNBQWMsR0FDZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBMkQsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHdkQs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
|
|
282
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsY0FBYyxFQUVkLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsdUJBQXVCLEdBQ3hCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLFlBQVksRUFFWixXQUFXLEVBQ1gsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsRUFBRSxFQUVGLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQixxQ0FBcUMsRUFDckMsOEJBQThCLEVBQzlCLDRCQUE0QixFQUM1Qix3Q0FBd0MsRUFDeEMsc0NBQXNDLEVBQ3RDLGlCQUFpQixFQUNqQixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixrQkFBa0IsRUFFbEIsb0JBQW9CLEVBQ3BCLGNBQWMsR0FDZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBMkQsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHdkQs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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlockHeader, GlobalVariables } from '@aztec/circuits.js';
|
|
2
2
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
3
3
|
/**
|
|
4
|
-
* Fetches the private, nullifier, contract tree and l1 to l2 messages tree roots from a given db and assembles a
|
|
4
|
+
* Fetches the private, nullifier, contract tree and l1 to l2 messages tree roots from a given db and assembles a CombinedHistoricalTreeRoots object.
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function getBlockHeader(db: MerkleTreeOperations, prevBlockGlobalVariables?: GlobalVariables): Promise<BlockHeader>;
|
|
7
7
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/sequencer/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/sequencer/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAM,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,oBAAoB,EACxB,wBAAwB,GAAE,eAAyC,wBAepE"}
|
package/dest/sequencer/utils.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Fr, GlobalVariables
|
|
1
|
+
import { BlockHeader, Fr, GlobalVariables } from '@aztec/circuits.js';
|
|
2
2
|
import { computeGlobalsHash } from '@aztec/circuits.js/abis';
|
|
3
3
|
/**
|
|
4
|
-
* Fetches the private, nullifier, contract tree and l1 to l2 messages tree roots from a given db and assembles a
|
|
4
|
+
* Fetches the private, nullifier, contract tree and l1 to l2 messages tree roots from a given db and assembles a CombinedHistoricalTreeRoots object.
|
|
5
5
|
*/
|
|
6
|
-
export async function
|
|
6
|
+
export async function getBlockHeader(db, prevBlockGlobalVariables = GlobalVariables.empty()) {
|
|
7
7
|
const prevGlobalsHash = computeGlobalsHash(prevBlockGlobalVariables);
|
|
8
8
|
const roots = await db.getTreeRoots();
|
|
9
|
-
return new
|
|
9
|
+
return new BlockHeader(Fr.fromBuffer(roots.noteHashTreeRoot), Fr.fromBuffer(roots.nullifierTreeRoot), Fr.fromBuffer(roots.contractDataTreeRoot), Fr.fromBuffer(roots.l1Tol2MessagesTreeRoot), Fr.fromBuffer(roots.blocksTreeRoot), Fr.ZERO, Fr.fromBuffer(roots.publicDataTreeRoot), prevGlobalsHash);
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLEVBQXdCLEVBQ3hCLDJCQUE0QyxlQUFlLENBQUMsS0FBSyxFQUFFO0lBRW5FLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDckUsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEMsT0FBTyxJQUFJLFdBQVcsQ0FDcEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFDckMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFDdEMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsRUFDekMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsRUFDM0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQ25DLEVBQUUsQ0FBQyxJQUFJLEVBQ1AsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFDdkMsZUFBZSxDQUNoQixDQUFDO0FBQ0osQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -32,16 +32,16 @@
|
|
|
32
32
|
"rootDir": "./src"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@aztec/acir-simulator": "0.16.
|
|
36
|
-
"@aztec/circuits.js": "0.16.
|
|
37
|
-
"@aztec/ethereum": "0.16.
|
|
38
|
-
"@aztec/foundation": "0.16.
|
|
39
|
-
"@aztec/l1-artifacts": "0.16.
|
|
40
|
-
"@aztec/merkle-tree": "0.16.
|
|
41
|
-
"@aztec/noir-protocol-circuits": "0.16.
|
|
42
|
-
"@aztec/p2p": "0.16.
|
|
43
|
-
"@aztec/types": "0.16.
|
|
44
|
-
"@aztec/world-state": "0.16.
|
|
35
|
+
"@aztec/acir-simulator": "0.16.2",
|
|
36
|
+
"@aztec/circuits.js": "0.16.2",
|
|
37
|
+
"@aztec/ethereum": "0.16.2",
|
|
38
|
+
"@aztec/foundation": "0.16.2",
|
|
39
|
+
"@aztec/l1-artifacts": "0.16.2",
|
|
40
|
+
"@aztec/merkle-tree": "0.16.2",
|
|
41
|
+
"@aztec/noir-protocol-circuits": "0.16.2",
|
|
42
|
+
"@aztec/p2p": "0.16.2",
|
|
43
|
+
"@aztec/types": "0.16.2",
|
|
44
|
+
"@aztec/world-state": "0.16.2",
|
|
45
45
|
"lodash.chunk": "^4.2.0",
|
|
46
46
|
"lodash.flatmap": "^4.5.0",
|
|
47
47
|
"lodash.pick": "^4.4.0",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AppendOnlyTreeSnapshot,
|
|
3
|
+
BLOCKS_TREE_HEIGHT,
|
|
3
4
|
BaseOrMergeRollupPublicInputs,
|
|
4
5
|
BaseRollupInputs,
|
|
5
6
|
CONTRACT_SUBTREE_HEIGHT,
|
|
6
7
|
CONTRACT_SUBTREE_SIBLING_PATH_LENGTH,
|
|
7
8
|
ConstantRollupData,
|
|
8
9
|
GlobalVariables,
|
|
9
|
-
HISTORIC_BLOCKS_TREE_HEIGHT,
|
|
10
10
|
L1_TO_L2_MSG_SUBTREE_HEIGHT,
|
|
11
11
|
L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH,
|
|
12
12
|
MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP,
|
|
@@ -61,8 +61,6 @@ import { BlockBuilder } from './index.js';
|
|
|
61
61
|
import { AllowedTreeNames, OutputWithTreeSnapshot } from './types.js';
|
|
62
62
|
|
|
63
63
|
const frToBigInt = (fr: Fr) => toBigIntBE(fr.toBuffer());
|
|
64
|
-
const bigintToFr = (num: bigint) => new Fr(num);
|
|
65
|
-
const bigintToNum = (num: bigint) => Number(num);
|
|
66
64
|
|
|
67
65
|
// Denotes fields that are not used now, but will be in the future
|
|
68
66
|
const FUTURE_FR = new Fr(0n);
|
|
@@ -103,7 +101,7 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
103
101
|
startContractTreeSnapshot,
|
|
104
102
|
startPublicDataTreeSnapshot,
|
|
105
103
|
startL1ToL2MessageTreeSnapshot,
|
|
106
|
-
|
|
104
|
+
startBlocksTreeSnapshot,
|
|
107
105
|
] = await Promise.all(
|
|
108
106
|
[
|
|
109
107
|
MerkleTreeId.NOTE_HASH_TREE,
|
|
@@ -127,7 +125,7 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
127
125
|
endContractTreeSnapshot,
|
|
128
126
|
endPublicDataTreeRoot,
|
|
129
127
|
endL1ToL2MessagesTreeSnapshot,
|
|
130
|
-
|
|
128
|
+
endBlocksTreeSnapshot,
|
|
131
129
|
} = circuitsOutput;
|
|
132
130
|
|
|
133
131
|
// Collect all new nullifiers, commitments, and contracts from all txs in this block
|
|
@@ -167,8 +165,8 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
167
165
|
endPublicDataTreeRoot,
|
|
168
166
|
startL1ToL2MessagesTreeSnapshot: startL1ToL2MessageTreeSnapshot,
|
|
169
167
|
endL1ToL2MessagesTreeSnapshot,
|
|
170
|
-
|
|
171
|
-
|
|
168
|
+
startBlocksTreeSnapshot,
|
|
169
|
+
endBlocksTreeSnapshot,
|
|
172
170
|
newCommitments,
|
|
173
171
|
newNullifiers,
|
|
174
172
|
newL2ToL1Msgs,
|
|
@@ -193,14 +191,14 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
193
191
|
|
|
194
192
|
protected validateTxs(txs: ProcessedTx[]) {
|
|
195
193
|
for (const tx of txs) {
|
|
196
|
-
for (const
|
|
194
|
+
for (const historicalTreeRoot of [
|
|
197
195
|
'noteHashTreeRoot',
|
|
198
196
|
'contractTreeRoot',
|
|
199
197
|
'nullifierTreeRoot',
|
|
200
198
|
'l1ToL2MessagesTreeRoot',
|
|
201
199
|
] as const) {
|
|
202
|
-
if (tx.data.constants.
|
|
203
|
-
throw new Error(`Empty ${
|
|
200
|
+
if (tx.data.constants.blockHeader[historicalTreeRoot].isZero()) {
|
|
201
|
+
throw new Error(`Empty ${historicalTreeRoot} for tx: ${toFriendlyJSON(tx)}`);
|
|
204
202
|
}
|
|
205
203
|
}
|
|
206
204
|
}
|
|
@@ -313,15 +311,15 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
313
311
|
this.debug(`Updating and validating root trees`);
|
|
314
312
|
const globalVariablesHash = computeGlobalsHash(left[0].constants.globalVariables);
|
|
315
313
|
await this.db.updateLatestGlobalVariablesHash(globalVariablesHash);
|
|
316
|
-
await this.db.
|
|
314
|
+
await this.db.updateBlocksTree(globalVariablesHash);
|
|
317
315
|
|
|
318
316
|
await this.validateRootOutput(rootOutput);
|
|
319
317
|
|
|
320
318
|
return [rootOutput, rootProof];
|
|
321
319
|
}
|
|
322
320
|
|
|
323
|
-
async
|
|
324
|
-
// Calculate the block hash and add it to the
|
|
321
|
+
async updateBlocksTree(globalVariables: GlobalVariables) {
|
|
322
|
+
// Calculate the block hash and add it to the historical block hashes tree
|
|
325
323
|
const blockHash = await this.calculateBlockHash(globalVariables);
|
|
326
324
|
await this.db.appendLeaves(MerkleTreeId.BLOCKS_TREE, [blockHash.toBuffer()]);
|
|
327
325
|
}
|
|
@@ -364,22 +362,11 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
364
362
|
protected async validateRootOutput(rootOutput: RootRollupPublicInputs) {
|
|
365
363
|
await Promise.all([
|
|
366
364
|
this.validateTrees(rootOutput),
|
|
367
|
-
this.validateTree(rootOutput, MerkleTreeId.BLOCKS_TREE, '
|
|
365
|
+
this.validateTree(rootOutput, MerkleTreeId.BLOCKS_TREE, 'Blocks'),
|
|
368
366
|
this.validateTree(rootOutput, MerkleTreeId.L1_TO_L2_MESSAGES_TREE, 'L1ToL2Messages'),
|
|
369
367
|
]);
|
|
370
368
|
}
|
|
371
369
|
|
|
372
|
-
// Helper for validating a roots tree against a circuit simulation output
|
|
373
|
-
protected async validateRootTree(
|
|
374
|
-
rootOutput: RootRollupPublicInputs,
|
|
375
|
-
treeId: MerkleTreeId,
|
|
376
|
-
name: 'Contract' | 'NoteHash' | 'L1ToL2Messages',
|
|
377
|
-
) {
|
|
378
|
-
const localTree = await this.getTreeSnapshot(treeId);
|
|
379
|
-
const simulatedTree = rootOutput[`endTreeOfHistoric${name}TreeRootsSnapshot`];
|
|
380
|
-
this.validateSimulatedTree(localTree, simulatedTree, name, `Roots ${name}`);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
370
|
/**
|
|
384
371
|
* Validates that the root of the public data tree matches the output of the circuit simulation.
|
|
385
372
|
* @param output - The output of the circuit simulation.
|
|
@@ -414,7 +401,7 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
414
401
|
protected validateSimulatedTree(
|
|
415
402
|
localTree: AppendOnlyTreeSnapshot,
|
|
416
403
|
simulatedTree: AppendOnlyTreeSnapshot,
|
|
417
|
-
name: 'NoteHash' | 'Contract' | 'Nullifier' | 'L1ToL2Messages' | '
|
|
404
|
+
name: 'NoteHash' | 'Contract' | 'Nullifier' | 'L1ToL2Messages' | 'Blocks',
|
|
418
405
|
label?: string,
|
|
419
406
|
) {
|
|
420
407
|
if (!simulatedTree.root.toBuffer().equals(localTree.root.toBuffer())) {
|
|
@@ -466,13 +453,13 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
466
453
|
// Get tree snapshots
|
|
467
454
|
const startL1ToL2MessagesTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGES_TREE);
|
|
468
455
|
|
|
469
|
-
// Get
|
|
470
|
-
const
|
|
471
|
-
const
|
|
456
|
+
// Get blocks tree
|
|
457
|
+
const startBlocksTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.BLOCKS_TREE);
|
|
458
|
+
const newBlocksTreeSiblingPathArray = await getRootTreeSiblingPath(MerkleTreeId.BLOCKS_TREE);
|
|
472
459
|
|
|
473
|
-
const
|
|
474
|
-
|
|
475
|
-
i => (i <
|
|
460
|
+
const newBlocksTreeSiblingPath = makeTuple(
|
|
461
|
+
BLOCKS_TREE_HEIGHT,
|
|
462
|
+
i => (i < newBlocksTreeSiblingPathArray.length ? newBlocksTreeSiblingPathArray[i] : Fr.ZERO),
|
|
476
463
|
0,
|
|
477
464
|
);
|
|
478
465
|
|
|
@@ -481,8 +468,8 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
481
468
|
newL1ToL2Messages,
|
|
482
469
|
newL1ToL2MessagesTreeRootSiblingPath,
|
|
483
470
|
startL1ToL2MessagesTreeSnapshot,
|
|
484
|
-
|
|
485
|
-
|
|
471
|
+
startBlocksTreeSnapshot,
|
|
472
|
+
newBlocksTreeSiblingPath,
|
|
486
473
|
});
|
|
487
474
|
}
|
|
488
475
|
|
|
@@ -539,19 +526,19 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
539
526
|
return new MembershipWitness(height, index, assertLength(path.toFieldArray(), height));
|
|
540
527
|
}
|
|
541
528
|
|
|
542
|
-
protected
|
|
543
|
-
const
|
|
529
|
+
protected getHistoricalTreesMembershipWitnessFor(tx: ProcessedTx) {
|
|
530
|
+
const blockHeader = tx.data.constants.blockHeader;
|
|
544
531
|
const { noteHashTreeRoot, nullifierTreeRoot, contractTreeRoot, l1ToL2MessagesTreeRoot, publicDataTreeRoot } =
|
|
545
|
-
|
|
532
|
+
blockHeader;
|
|
546
533
|
const blockHash = computeBlockHash(
|
|
547
|
-
|
|
534
|
+
blockHeader.globalVariablesHash,
|
|
548
535
|
noteHashTreeRoot,
|
|
549
536
|
nullifierTreeRoot,
|
|
550
537
|
contractTreeRoot,
|
|
551
538
|
l1ToL2MessagesTreeRoot,
|
|
552
539
|
publicDataTreeRoot,
|
|
553
540
|
);
|
|
554
|
-
return this.getMembershipWitnessFor(blockHash, MerkleTreeId.BLOCKS_TREE,
|
|
541
|
+
return this.getMembershipWitnessFor(blockHash, MerkleTreeId.BLOCKS_TREE, BLOCKS_TREE_HEIGHT);
|
|
555
542
|
}
|
|
556
543
|
|
|
557
544
|
protected async getConstantRollupData(globalVariables: GlobalVariables): Promise<ConstantRollupData> {
|
|
@@ -560,7 +547,7 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
560
547
|
mergeRollupVkHash: DELETE_FR,
|
|
561
548
|
privateKernelVkTreeRoot: FUTURE_FR,
|
|
562
549
|
publicKernelVkTreeRoot: FUTURE_FR,
|
|
563
|
-
|
|
550
|
+
startBlocksTreeSnapshot: await this.getTreeSnapshot(MerkleTreeId.BLOCKS_TREE),
|
|
564
551
|
globalVariables,
|
|
565
552
|
});
|
|
566
553
|
}
|
|
@@ -577,19 +564,16 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
577
564
|
|
|
578
565
|
const tree = MerkleTreeId.NULLIFIER_TREE;
|
|
579
566
|
const prevValueIndex = await this.db.getPreviousValueIndex(tree, frToBigInt(nullifier));
|
|
580
|
-
|
|
581
|
-
if (!prevValueInfo) {
|
|
567
|
+
if (!prevValueIndex) {
|
|
582
568
|
throw new Error(`Nullifier tree should have one initial leaf`);
|
|
583
569
|
}
|
|
570
|
+
const prevValuePreimage = (await this.db.getLeafPreimage(tree, prevValueIndex.index))!;
|
|
571
|
+
|
|
584
572
|
const prevValueSiblingPath = await this.db.getSiblingPath(tree, BigInt(prevValueIndex.index));
|
|
585
573
|
|
|
586
574
|
return {
|
|
587
575
|
index: prevValueIndex,
|
|
588
|
-
leafPreimage:
|
|
589
|
-
bigintToFr(prevValueInfo.value),
|
|
590
|
-
bigintToFr(prevValueInfo.nextValue),
|
|
591
|
-
bigintToNum(prevValueInfo.nextIndex),
|
|
592
|
-
),
|
|
576
|
+
leafPreimage: prevValuePreimage,
|
|
593
577
|
witness: new MembershipWitness(
|
|
594
578
|
NULLIFIER_TREE_HEIGHT,
|
|
595
579
|
BigInt(prevValueIndex.index),
|
|
@@ -651,7 +635,7 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
651
635
|
const startContractTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.CONTRACT_TREE);
|
|
652
636
|
const startNoteHashTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE);
|
|
653
637
|
const startPublicDataTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE);
|
|
654
|
-
const
|
|
638
|
+
const startBlocksTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.BLOCKS_TREE);
|
|
655
639
|
|
|
656
640
|
// Get the subtree sibling paths for the circuit
|
|
657
641
|
const newCommitmentsSubtreeSiblingPathArray = await this.getSubtreeSiblingPath(
|
|
@@ -708,7 +692,12 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
708
692
|
// Update the nullifier tree, capturing the low nullifier info for each individual operation
|
|
709
693
|
const newNullifiers = [...left.data.end.newNullifiers, ...right.data.end.newNullifiers];
|
|
710
694
|
|
|
711
|
-
const
|
|
695
|
+
const {
|
|
696
|
+
lowLeavesWitnessData: nullifierWitnessLeaves,
|
|
697
|
+
newSubtreeSiblingPath: newNullifiersSubtreeSiblingPath,
|
|
698
|
+
sortedNewLeaves: sortedNewNullifiers,
|
|
699
|
+
sortedNewLeavesIndexes: sortednewNullifiersIndexes,
|
|
700
|
+
} = await this.db.batchInsert(
|
|
712
701
|
MerkleTreeId.NULLIFIER_TREE,
|
|
713
702
|
newNullifiers.map(fr => fr.toBuffer()),
|
|
714
703
|
NULLIFIER_SUBTREE_HEIGHT,
|
|
@@ -731,7 +720,9 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
731
720
|
startContractTreeSnapshot,
|
|
732
721
|
startNoteHashTreeSnapshot,
|
|
733
722
|
startPublicDataTreeRoot: startPublicDataTreeSnapshot.root,
|
|
734
|
-
|
|
723
|
+
startBlocksTreeSnapshot,
|
|
724
|
+
sortedNewNullifiers: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i => Fr.fromBuffer(sortedNewNullifiers[i])),
|
|
725
|
+
sortednewNullifiersIndexes: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i => sortednewNullifiersIndexes[i]),
|
|
735
726
|
newCommitmentsSubtreeSiblingPath,
|
|
736
727
|
newContractsSubtreeSiblingPath,
|
|
737
728
|
newNullifiersSubtreeSiblingPath: makeTuple(NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, i =>
|
|
@@ -741,12 +732,8 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
741
732
|
newPublicDataReadsSiblingPaths,
|
|
742
733
|
lowNullifierLeafPreimages: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i =>
|
|
743
734
|
i < nullifierWitnessLeaves.length
|
|
744
|
-
?
|
|
745
|
-
|
|
746
|
-
new Fr(nullifierWitnessLeaves[i].leafData.nextValue),
|
|
747
|
-
Number(nullifierWitnessLeaves[i].leafData.nextIndex),
|
|
748
|
-
)
|
|
749
|
-
: new NullifierLeafPreimage(Fr.ZERO, Fr.ZERO, 0),
|
|
735
|
+
? (nullifierWitnessLeaves[i].leafPreimage as NullifierLeafPreimage)
|
|
736
|
+
: NullifierLeafPreimage.empty(),
|
|
750
737
|
),
|
|
751
738
|
lowNullifierMembershipWitness: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i =>
|
|
752
739
|
i < lowNullifierMembershipWitnesses.length
|
|
@@ -754,9 +741,9 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
754
741
|
: this.makeEmptyMembershipWitness(NULLIFIER_TREE_HEIGHT),
|
|
755
742
|
),
|
|
756
743
|
kernelData: [this.getKernelDataFor(left), this.getKernelDataFor(right)],
|
|
757
|
-
|
|
758
|
-
await this.
|
|
759
|
-
await this.
|
|
744
|
+
blocksTreeRootMembershipWitnesses: [
|
|
745
|
+
await this.getHistoricalTreesMembershipWitnessFor(left),
|
|
746
|
+
await this.getHistoricalTreesMembershipWitnessFor(right),
|
|
760
747
|
],
|
|
761
748
|
});
|
|
762
749
|
}
|
|
@@ -5,7 +5,7 @@ import { AppendOnlyTreeSnapshot, BaseOrMergeRollupPublicInputs, RootRollupPublic
|
|
|
5
5
|
*/
|
|
6
6
|
export type AllowedTreeNames<T extends BaseOrMergeRollupPublicInputs | RootRollupPublicInputs> =
|
|
7
7
|
T extends RootRollupPublicInputs
|
|
8
|
-
? 'NoteHash' | 'Contract' | 'Nullifier' | 'L1ToL2Messages' | '
|
|
8
|
+
? 'NoteHash' | 'Contract' | 'Nullifier' | 'L1ToL2Messages' | 'Blocks'
|
|
9
9
|
: 'NoteHash' | 'Contract' | 'Nullifier';
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
+
BlockHeader,
|
|
2
3
|
CombinedAccumulatedData,
|
|
3
4
|
Fr,
|
|
4
|
-
HistoricBlockData,
|
|
5
5
|
Proof,
|
|
6
6
|
PublicKernelPublicInputs,
|
|
7
7
|
makeEmptyProof,
|
|
@@ -87,13 +87,9 @@ export async function makeProcessedTx(
|
|
|
87
87
|
* Makes an empty tx from an empty kernel circuit public inputs.
|
|
88
88
|
* @returns A processed empty tx.
|
|
89
89
|
*/
|
|
90
|
-
export function makeEmptyProcessedTx(
|
|
91
|
-
historicTreeRoots: HistoricBlockData,
|
|
92
|
-
chainId: Fr,
|
|
93
|
-
version: Fr,
|
|
94
|
-
): Promise<ProcessedTx> {
|
|
90
|
+
export function makeEmptyProcessedTx(historicalTreeRoots: BlockHeader, chainId: Fr, version: Fr): Promise<ProcessedTx> {
|
|
95
91
|
const emptyKernelOutput = PublicKernelPublicInputs.empty();
|
|
96
|
-
emptyKernelOutput.constants.
|
|
92
|
+
emptyKernelOutput.constants.blockHeader = historicalTreeRoots;
|
|
97
93
|
emptyKernelOutput.constants.txContext.chainId = chainId;
|
|
98
94
|
emptyKernelOutput.constants.txContext.version = version;
|
|
99
95
|
const emptyProof = makeEmptyProof();
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
} from '@aztec/acir-simulator';
|
|
10
10
|
import {
|
|
11
11
|
AztecAddress,
|
|
12
|
+
BlockHeader,
|
|
12
13
|
CallRequest,
|
|
13
14
|
CombinedAccumulatedData,
|
|
14
15
|
ContractStorageRead,
|
|
15
16
|
ContractStorageUpdateRequest,
|
|
16
17
|
Fr,
|
|
17
18
|
GlobalVariables,
|
|
18
|
-
HistoricBlockData,
|
|
19
19
|
KernelCircuitPublicInputs,
|
|
20
20
|
MAX_NEW_COMMITMENTS_PER_CALL,
|
|
21
21
|
MAX_NEW_L2_TO_L1_MSGS_PER_CALL,
|
|
@@ -52,7 +52,7 @@ import { PublicKernelCircuitSimulator } from '../simulator/index.js';
|
|
|
52
52
|
import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from '../simulator/public_executor.js';
|
|
53
53
|
import { RealPublicKernelCircuitSimulator } from '../simulator/public_kernel.js';
|
|
54
54
|
import { FailedTx, ProcessedTx, makeEmptyProcessedTx, makeProcessedTx } from './processed_tx.js';
|
|
55
|
-
import {
|
|
55
|
+
import { getBlockHeader } from './utils.js';
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
@@ -75,18 +75,18 @@ export class PublicProcessorFactory {
|
|
|
75
75
|
prevGlobalVariables: GlobalVariables,
|
|
76
76
|
globalVariables: GlobalVariables,
|
|
77
77
|
): Promise<PublicProcessor> {
|
|
78
|
-
const
|
|
78
|
+
const blockHeader = await getBlockHeader(this.merkleTree, prevGlobalVariables);
|
|
79
79
|
const publicContractsDB = new ContractsDataSourcePublicDB(this.contractDataSource);
|
|
80
80
|
const worldStatePublicDB = new WorldStatePublicDB(this.merkleTree);
|
|
81
81
|
const worldStateDB = new WorldStateDB(this.merkleTree, this.l1Tol2MessagesDataSource);
|
|
82
|
-
const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB,
|
|
82
|
+
const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, blockHeader);
|
|
83
83
|
return new PublicProcessor(
|
|
84
84
|
this.merkleTree,
|
|
85
85
|
publicExecutor,
|
|
86
86
|
new RealPublicKernelCircuitSimulator(),
|
|
87
87
|
new EmptyPublicProver(),
|
|
88
88
|
globalVariables,
|
|
89
|
-
|
|
89
|
+
blockHeader,
|
|
90
90
|
publicContractsDB,
|
|
91
91
|
worldStatePublicDB,
|
|
92
92
|
);
|
|
@@ -104,7 +104,7 @@ export class PublicProcessor {
|
|
|
104
104
|
protected publicKernel: PublicKernelCircuitSimulator,
|
|
105
105
|
protected publicProver: PublicProver,
|
|
106
106
|
protected globalVariables: GlobalVariables,
|
|
107
|
-
protected
|
|
107
|
+
protected blockHeader: BlockHeader,
|
|
108
108
|
protected publicContractsDB: ContractsDataSourcePublicDB,
|
|
109
109
|
protected publicStateDB: PublicStateDB,
|
|
110
110
|
|
|
@@ -152,7 +152,7 @@ export class PublicProcessor {
|
|
|
152
152
|
*/
|
|
153
153
|
public makeEmptyProcessedTx(): Promise<ProcessedTx> {
|
|
154
154
|
const { chainId, version } = this.globalVariables;
|
|
155
|
-
return makeEmptyProcessedTx(this.
|
|
155
|
+
return makeEmptyProcessedTx(this.blockHeader, chainId, version);
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
protected async processTx(tx: Tx): Promise<ProcessedTx> {
|
|
@@ -259,7 +259,7 @@ export class PublicProcessor {
|
|
|
259
259
|
|
|
260
260
|
protected async getPublicCircuitPublicInputs(result: PublicExecutionResult) {
|
|
261
261
|
const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE);
|
|
262
|
-
this.
|
|
262
|
+
this.blockHeader.publicDataTreeRoot = Fr.fromBuffer(publicDataTreeInfo.root);
|
|
263
263
|
|
|
264
264
|
const callStackPreimages = await this.getPublicCallStackPreimages(result);
|
|
265
265
|
const publicCallStackHashes = padArrayEnd(
|
|
@@ -293,7 +293,7 @@ export class PublicProcessor {
|
|
|
293
293
|
publicCallStackHashes,
|
|
294
294
|
unencryptedLogsHash,
|
|
295
295
|
unencryptedLogPreimagesLength,
|
|
296
|
-
|
|
296
|
+
blockHeader: this.blockHeader,
|
|
297
297
|
});
|
|
298
298
|
}
|
|
299
299
|
|
package/src/sequencer/utils.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Fr, GlobalVariables
|
|
1
|
+
import { BlockHeader, Fr, GlobalVariables } from '@aztec/circuits.js';
|
|
2
2
|
import { computeGlobalsHash } from '@aztec/circuits.js/abis';
|
|
3
3
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Fetches the private, nullifier, contract tree and l1 to l2 messages tree roots from a given db and assembles a
|
|
6
|
+
* Fetches the private, nullifier, contract tree and l1 to l2 messages tree roots from a given db and assembles a CombinedHistoricalTreeRoots object.
|
|
7
7
|
*/
|
|
8
|
-
export async function
|
|
8
|
+
export async function getBlockHeader(
|
|
9
9
|
db: MerkleTreeOperations,
|
|
10
10
|
prevBlockGlobalVariables: GlobalVariables = GlobalVariables.empty(),
|
|
11
11
|
) {
|
|
12
12
|
const prevGlobalsHash = computeGlobalsHash(prevBlockGlobalVariables);
|
|
13
13
|
const roots = await db.getTreeRoots();
|
|
14
14
|
|
|
15
|
-
return new
|
|
15
|
+
return new BlockHeader(
|
|
16
16
|
Fr.fromBuffer(roots.noteHashTreeRoot),
|
|
17
17
|
Fr.fromBuffer(roots.nullifierTreeRoot),
|
|
18
18
|
Fr.fromBuffer(roots.contractDataTreeRoot),
|