@aztec/prover-client 0.55.1 → 0.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +6 -27
- package/dest/mocks/test_context.d.ts +9 -10
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +13 -15
- package/dest/orchestrator/block-building-helpers.d.ts +12 -3
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +34 -32
- package/dest/orchestrator/{proving-state.d.ts → block-proving-state.d.ts} +19 -16
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/block-proving-state.js +147 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +63 -0
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/epoch-proving-state.js +143 -0
- package/dest/orchestrator/orchestrator.d.ts +33 -15
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +315 -172
- package/dest/orchestrator/tx-proving-state.d.ts +3 -2
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +54 -26
- package/dest/prover-agent/memory-proving-queue.d.ts +11 -5
- package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
- package/dest/prover-agent/memory-proving-queue.js +16 -6
- package/dest/prover-agent/prover-agent.d.ts.map +1 -1
- package/dest/prover-agent/prover-agent.js +10 -10
- package/dest/prover-agent/rpc.d.ts.map +1 -1
- package/dest/prover-agent/rpc.js +8 -2
- package/dest/test/mock_prover.d.ts +6 -4
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +9 -3
- package/dest/tx-prover/tx-prover.d.ts +3 -3
- package/dest/tx-prover/tx-prover.d.ts.map +1 -1
- package/dest/tx-prover/tx-prover.js +1 -1
- package/package.json +15 -11
- package/src/index.ts +1 -1
- package/src/mocks/fixtures.ts +5 -49
- package/src/mocks/test_context.ts +15 -20
- package/src/orchestrator/block-building-helpers.ts +90 -57
- package/src/orchestrator/{proving-state.ts → block-proving-state.ts} +29 -53
- package/src/orchestrator/epoch-proving-state.ts +221 -0
- package/src/orchestrator/orchestrator.ts +494 -292
- package/src/orchestrator/tx-proving-state.ts +63 -27
- package/src/prover-agent/memory-proving-queue.ts +31 -16
- package/src/prover-agent/prover-agent.ts +11 -9
- package/src/prover-agent/rpc.ts +9 -0
- package/src/test/mock_prover.ts +23 -1
- package/src/tx-prover/tx-prover.ts +4 -4
- package/dest/orchestrator/proving-state.d.ts.map +0 -1
- package/dest/orchestrator/proving-state.js +0 -170
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { NUM_BASE_PARITY_PER_ROOT_PARITY, } from '@aztec/circuits.js';
|
|
2
|
+
/**
|
|
3
|
+
* The current state of the proving schedule for a given block. Managed by ProvingState.
|
|
4
|
+
* Contains the raw inputs and intermediate state to generate every constituent proof in the tree.
|
|
5
|
+
*/
|
|
6
|
+
export class BlockProvingState {
|
|
7
|
+
constructor(index, totalNumTxs, globalVariables, newL1ToL2Messages, messageTreeSnapshot, messageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, archiveTreeSnapshot, archiveTreeRootSiblingPath, previousBlockHash, parentEpoch) {
|
|
8
|
+
this.index = index;
|
|
9
|
+
this.totalNumTxs = totalNumTxs;
|
|
10
|
+
this.globalVariables = globalVariables;
|
|
11
|
+
this.newL1ToL2Messages = newL1ToL2Messages;
|
|
12
|
+
this.messageTreeSnapshot = messageTreeSnapshot;
|
|
13
|
+
this.messageTreeRootSiblingPath = messageTreeRootSiblingPath;
|
|
14
|
+
this.messageTreeSnapshotAfterInsertion = messageTreeSnapshotAfterInsertion;
|
|
15
|
+
this.archiveTreeSnapshot = archiveTreeSnapshot;
|
|
16
|
+
this.archiveTreeRootSiblingPath = archiveTreeRootSiblingPath;
|
|
17
|
+
this.previousBlockHash = previousBlockHash;
|
|
18
|
+
this.parentEpoch = parentEpoch;
|
|
19
|
+
this.mergeRollupInputs = [];
|
|
20
|
+
this.rootParityInputs = [];
|
|
21
|
+
this.blockRootRollupStarted = false;
|
|
22
|
+
this.txs = [];
|
|
23
|
+
this.rootParityInputs = Array.from({ length: NUM_BASE_PARITY_PER_ROOT_PARITY }).map(_ => undefined);
|
|
24
|
+
}
|
|
25
|
+
get blockNumber() {
|
|
26
|
+
return this.globalVariables.blockNumber.toNumber();
|
|
27
|
+
}
|
|
28
|
+
// Returns the number of levels of merge rollups
|
|
29
|
+
get numMergeLevels() {
|
|
30
|
+
return BigInt(Math.ceil(Math.log2(this.totalNumTxs)) - 1);
|
|
31
|
+
}
|
|
32
|
+
// Calculates the index and level of the parent rollup circuit
|
|
33
|
+
// Based on tree implementation in unbalanced_tree.ts -> batchInsert()
|
|
34
|
+
findMergeLevel(currentLevel, currentIndex) {
|
|
35
|
+
const moveUpMergeLevel = (levelSize, index, nodeToShift) => {
|
|
36
|
+
levelSize /= 2;
|
|
37
|
+
if (levelSize & 1) {
|
|
38
|
+
[levelSize, nodeToShift] = nodeToShift ? [levelSize + 1, false] : [levelSize - 1, true];
|
|
39
|
+
}
|
|
40
|
+
index >>= 1n;
|
|
41
|
+
return { thisLevelSize: levelSize, thisIndex: index, shiftUp: nodeToShift };
|
|
42
|
+
};
|
|
43
|
+
let [thisLevelSize, shiftUp] = this.totalNumTxs & 1 ? [this.totalNumTxs - 1, true] : [this.totalNumTxs, false];
|
|
44
|
+
const maxLevel = this.numMergeLevels + 1n;
|
|
45
|
+
let placeholder = currentIndex;
|
|
46
|
+
for (let i = 0; i < maxLevel - currentLevel; i++) {
|
|
47
|
+
({ thisLevelSize, thisIndex: placeholder, shiftUp } = moveUpMergeLevel(thisLevelSize, placeholder, shiftUp));
|
|
48
|
+
}
|
|
49
|
+
let thisIndex = currentIndex;
|
|
50
|
+
let mergeLevel = currentLevel;
|
|
51
|
+
while (thisIndex >= thisLevelSize && mergeLevel != 0n) {
|
|
52
|
+
mergeLevel -= 1n;
|
|
53
|
+
({ thisLevelSize, thisIndex, shiftUp } = moveUpMergeLevel(thisLevelSize, thisIndex, shiftUp));
|
|
54
|
+
}
|
|
55
|
+
return [mergeLevel - 1n, thisIndex >> 1n, thisIndex & 1n];
|
|
56
|
+
}
|
|
57
|
+
// Adds a transaction to the proving state, returns it's index
|
|
58
|
+
addNewTx(tx) {
|
|
59
|
+
this.txs.push(tx);
|
|
60
|
+
return this.txs.length - 1;
|
|
61
|
+
}
|
|
62
|
+
// Returns the number of received transactions
|
|
63
|
+
get transactionsReceived() {
|
|
64
|
+
return this.txs.length;
|
|
65
|
+
}
|
|
66
|
+
// Returns the final set of root parity inputs
|
|
67
|
+
get finalRootParityInput() {
|
|
68
|
+
return this.finalRootParityInputs;
|
|
69
|
+
}
|
|
70
|
+
// Sets the final set of root parity inputs
|
|
71
|
+
set finalRootParityInput(input) {
|
|
72
|
+
this.finalRootParityInputs = input;
|
|
73
|
+
}
|
|
74
|
+
// Returns the set of root parity inputs
|
|
75
|
+
get rootParityInput() {
|
|
76
|
+
return this.rootParityInputs;
|
|
77
|
+
}
|
|
78
|
+
// Returns the complete set of transaction proving state objects
|
|
79
|
+
get allTxs() {
|
|
80
|
+
return this.txs;
|
|
81
|
+
}
|
|
82
|
+
/** Returns the block number as an epoch number. Used for prioritizing proof requests. */
|
|
83
|
+
get epochNumber() {
|
|
84
|
+
return this.globalVariables.blockNumber.toNumber();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Stores the inputs to a merge circuit and determines if the circuit is ready to be executed
|
|
88
|
+
* @param mergeInputs - The inputs to store
|
|
89
|
+
* @param indexWithinMerge - The index in the set of inputs to this merge circuit
|
|
90
|
+
* @param indexOfMerge - The global index of this merge circuit
|
|
91
|
+
* @returns True if the merge circuit is ready to be executed, false otherwise
|
|
92
|
+
*/
|
|
93
|
+
storeMergeInputs(mergeInputs, indexWithinMerge, indexOfMerge) {
|
|
94
|
+
if (!this.mergeRollupInputs[indexOfMerge]) {
|
|
95
|
+
const mergeInputData = {
|
|
96
|
+
inputs: [undefined, undefined],
|
|
97
|
+
proofs: [undefined, undefined],
|
|
98
|
+
verificationKeys: [undefined, undefined],
|
|
99
|
+
};
|
|
100
|
+
mergeInputData.inputs[indexWithinMerge] = mergeInputs[0];
|
|
101
|
+
mergeInputData.proofs[indexWithinMerge] = mergeInputs[1];
|
|
102
|
+
mergeInputData.verificationKeys[indexWithinMerge] = mergeInputs[2];
|
|
103
|
+
this.mergeRollupInputs[indexOfMerge] = mergeInputData;
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
const mergeInputData = this.mergeRollupInputs[indexOfMerge];
|
|
107
|
+
mergeInputData.inputs[indexWithinMerge] = mergeInputs[0];
|
|
108
|
+
mergeInputData.proofs[indexWithinMerge] = mergeInputs[1];
|
|
109
|
+
mergeInputData.verificationKeys[indexWithinMerge] = mergeInputs[2];
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
// Returns a specific transaction proving state
|
|
113
|
+
getTxProvingState(txIndex) {
|
|
114
|
+
return this.txs[txIndex];
|
|
115
|
+
}
|
|
116
|
+
// Returns a set of merge rollup inputs
|
|
117
|
+
getMergeInputs(indexOfMerge) {
|
|
118
|
+
return this.mergeRollupInputs[indexOfMerge];
|
|
119
|
+
}
|
|
120
|
+
// Returns true if we have sufficient inputs to execute the block root rollup
|
|
121
|
+
isReadyForBlockRootRollup() {
|
|
122
|
+
return !(this.block === undefined ||
|
|
123
|
+
this.mergeRollupInputs[0] === undefined ||
|
|
124
|
+
this.finalRootParityInput === undefined ||
|
|
125
|
+
this.mergeRollupInputs[0].inputs.findIndex(p => !p) !== -1);
|
|
126
|
+
}
|
|
127
|
+
// Stores a set of root parity inputs at the given index
|
|
128
|
+
setRootParityInputs(inputs, index) {
|
|
129
|
+
this.rootParityInputs[index] = inputs;
|
|
130
|
+
}
|
|
131
|
+
// Returns true if we have sufficient root parity inputs to execute the root parity circuit
|
|
132
|
+
areRootParityInputsReady() {
|
|
133
|
+
return this.rootParityInputs.findIndex(p => !p) === -1;
|
|
134
|
+
}
|
|
135
|
+
// Returns true if we are still able to accept transactions, false otherwise
|
|
136
|
+
isAcceptingTransactions() {
|
|
137
|
+
return this.totalNumTxs > this.txs.length;
|
|
138
|
+
}
|
|
139
|
+
// Returns whether the proving state is still valid
|
|
140
|
+
verifyState() {
|
|
141
|
+
return this.parentEpoch.verifyState();
|
|
142
|
+
}
|
|
143
|
+
reject(reason) {
|
|
144
|
+
this.parentEpoch.reject(reason);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stcHJvdmluZy1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvYmxvY2stcHJvdmluZy1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBVUwsK0JBQStCLEdBTWhDLE1BQU0sb0JBQW9CLENBQUM7QUFpQjVCOzs7R0FHRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFVNUIsWUFDa0IsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLGVBQWdDLEVBQ2hDLGlCQUF3RSxFQUN4RSxtQkFBMkMsRUFDM0MsMEJBQXNGLEVBQ3RGLGlDQUF5RCxFQUN6RCxtQkFBMkMsRUFDM0MsMEJBQTRELEVBQzVELGlCQUFxQixFQUNwQixXQUE4QjtRQVYvQixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBdUQ7UUFDeEUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF3QjtRQUMzQywrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTREO1FBQ3RGLHNDQUFpQyxHQUFqQyxpQ0FBaUMsQ0FBd0I7UUFDekQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF3QjtRQUMzQywrQkFBMEIsR0FBMUIsMEJBQTBCLENBQWtDO1FBQzVELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBSTtRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFwQnpDLHNCQUFpQixHQUEyQixFQUFFLENBQUM7UUFDL0MscUJBQWdCLEdBQXNFLEVBQUUsQ0FBQztRQUcxRiwyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFHdkMsUUFBRyxHQUFxQixFQUFFLENBQUM7UUFlakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLEdB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
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
+
import { type ARCHIVE_HEIGHT, type AppendOnlyTreeSnapshot, type BlockRootOrBlockMergePublicInputs, Fr, type GlobalVariables, type L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, type NESTED_RECURSIVE_PROOF_LENGTH, type Proof, type RecursiveProof, type RootRollupPublicInputs, type VerificationKeyAsFields } from '@aztec/circuits.js';
|
|
3
|
+
import { type Tuple } from '@aztec/foundation/serialize';
|
|
4
|
+
import { BlockProvingState } from './block-proving-state.js';
|
|
5
|
+
export type TreeSnapshots = Map<MerkleTreeId, AppendOnlyTreeSnapshot>;
|
|
6
|
+
export type BlockMergeRollupInputData = {
|
|
7
|
+
inputs: [BlockRootOrBlockMergePublicInputs | undefined, BlockRootOrBlockMergePublicInputs | undefined];
|
|
8
|
+
proofs: [
|
|
9
|
+
RecursiveProof<typeof NESTED_RECURSIVE_PROOF_LENGTH> | undefined,
|
|
10
|
+
RecursiveProof<typeof NESTED_RECURSIVE_PROOF_LENGTH> | undefined
|
|
11
|
+
];
|
|
12
|
+
verificationKeys: [VerificationKeyAsFields | undefined, VerificationKeyAsFields | undefined];
|
|
13
|
+
};
|
|
14
|
+
export type ProvingResult = {
|
|
15
|
+
status: 'success';
|
|
16
|
+
} | {
|
|
17
|
+
status: 'failure';
|
|
18
|
+
reason: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The current state of the proving schedule for an epoch.
|
|
22
|
+
* Contains the raw inputs and intermediate state to generate every constituent proof in the tree.
|
|
23
|
+
* Carries an identifier so we can identify if the proving state is discarded and a new one started.
|
|
24
|
+
* Captures resolve and reject callbacks to provide a promise base interface to the consumer of our proving.
|
|
25
|
+
*/
|
|
26
|
+
export declare class EpochProvingState {
|
|
27
|
+
readonly epochNumber: number;
|
|
28
|
+
readonly totalNumBlocks: number;
|
|
29
|
+
private completionCallback;
|
|
30
|
+
private rejectionCallback;
|
|
31
|
+
private provingStateLifecycle;
|
|
32
|
+
private mergeRollupInputs;
|
|
33
|
+
rootRollupPublicInputs: RootRollupPublicInputs | undefined;
|
|
34
|
+
finalProof: Proof | undefined;
|
|
35
|
+
blocks: BlockProvingState[];
|
|
36
|
+
constructor(epochNumber: number, totalNumBlocks: number, completionCallback: (result: ProvingResult) => void, rejectionCallback: (reason: string) => void);
|
|
37
|
+
/** Returns the current block proving state */
|
|
38
|
+
get currentBlock(): BlockProvingState | undefined;
|
|
39
|
+
get numMergeLevels(): bigint;
|
|
40
|
+
findMergeLevel(currentLevel: bigint, currentIndex: bigint): bigint[];
|
|
41
|
+
startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[], messageTreeSnapshot: AppendOnlyTreeSnapshot, messageTreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>, messageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, archiveTreeSnapshot: AppendOnlyTreeSnapshot, archiveTreeRootSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, previousBlockHash: Fr): number;
|
|
42
|
+
verifyState(): boolean;
|
|
43
|
+
isAcceptingBlocks(): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Stores the inputs to a merge circuit and determines if the circuit is ready to be executed
|
|
46
|
+
* @param mergeInputs - The inputs to store
|
|
47
|
+
* @param indexWithinMerge - The index in the set of inputs to this merge circuit
|
|
48
|
+
* @param indexOfMerge - The global index of this merge circuit
|
|
49
|
+
* @returns True if the merge circuit is ready to be executed, false otherwise
|
|
50
|
+
*/
|
|
51
|
+
storeMergeInputs(mergeInputs: [
|
|
52
|
+
BlockRootOrBlockMergePublicInputs,
|
|
53
|
+
RecursiveProof<typeof NESTED_RECURSIVE_PROOF_LENGTH>,
|
|
54
|
+
VerificationKeyAsFields
|
|
55
|
+
], indexWithinMerge: number, indexOfMerge: number): boolean;
|
|
56
|
+
getBlockProvingState(index: number): BlockProvingState;
|
|
57
|
+
getMergeInputs(indexOfMerge: number): BlockMergeRollupInputData;
|
|
58
|
+
isReadyForRootRollup(): boolean;
|
|
59
|
+
cancel(): void;
|
|
60
|
+
reject(reason: string): void;
|
|
61
|
+
resolve(result: ProvingResult): void;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=epoch-proving-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epoch-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/epoch-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,iCAAiC,EACtC,EAAE,EACF,KAAK,eAAe,EACpB,KAAK,wCAAwC,EAC7C,KAAK,6BAA6B,EAElC,KAAK,KAAK,EACV,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;AAStE,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,CAAC,iCAAiC,GAAG,SAAS,EAAE,iCAAiC,GAAG,SAAS,CAAC,CAAC;IACvG,MAAM,EAAE;QACN,cAAc,CAAC,OAAO,6BAA6B,CAAC,GAAG,SAAS;QAChE,cAAc,CAAC,OAAO,6BAA6B,CAAC,GAAG,SAAS;KACjE,CAAC;IACF,gBAAgB,EAAE,CAAC,uBAAuB,GAAG,SAAS,EAAE,uBAAuB,GAAG,SAAS,CAAC,CAAC;CAC9F,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1F;;;;;GAKG;AACH,qBAAa,iBAAiB;aASV,WAAW,EAAE,MAAM;aACnB,cAAc,EAAE,MAAM;IACtC,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,iBAAiB;IAX3B,OAAO,CAAC,qBAAqB,CAAiD;IAE9E,OAAO,CAAC,iBAAiB,CAAmC;IACrD,sBAAsB,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAC3D,UAAU,EAAE,KAAK,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAM;gBAGtB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EAC9B,kBAAkB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,EACnD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;IAGrD,8CAA8C;IAC9C,IAAW,YAAY,IAAI,iBAAiB,GAAG,SAAS,CAEvD;IAGD,IAAW,cAAc,WAGxB;IAKM,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IA2BzD,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,EAAE,EAAE,EACpB,mBAAmB,EAAE,sBAAsB,EAC3C,0BAA0B,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,wCAAwC,CAAC,EACtF,iCAAiC,EAAE,sBAAsB,EACzD,mBAAmB,EAAE,sBAAsB,EAC3C,0BAA0B,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,EAC5D,iBAAiB,EAAE,EAAE;IAuBhB,WAAW;IAQX,iBAAiB;IAIxB;;;;;;OAMG;IACI,gBAAgB,CACrB,WAAW,EAAE;QACX,iCAAiC;QACjC,cAAc,CAAC,OAAO,6BAA6B,CAAC;QACpD,uBAAuB;KACxB,EACD,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM;IAsBf,oBAAoB,CAAC,KAAK,EAAE,MAAM;IAKlC,cAAc,CAAC,YAAY,EAAE,MAAM;IAKnC,oBAAoB;IAKpB,MAAM;IAMN,MAAM,CAAC,MAAM,EAAE,MAAM;IAUrB,OAAO,CAAC,MAAM,EAAE,aAAa;CAOrC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Fr, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, } from '@aztec/circuits.js';
|
|
2
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
+
import { BlockProvingState } from './block-proving-state.js';
|
|
4
|
+
var PROVING_STATE_LIFECYCLE;
|
|
5
|
+
(function (PROVING_STATE_LIFECYCLE) {
|
|
6
|
+
PROVING_STATE_LIFECYCLE[PROVING_STATE_LIFECYCLE["PROVING_STATE_CREATED"] = 0] = "PROVING_STATE_CREATED";
|
|
7
|
+
PROVING_STATE_LIFECYCLE[PROVING_STATE_LIFECYCLE["PROVING_STATE_FULL"] = 1] = "PROVING_STATE_FULL";
|
|
8
|
+
PROVING_STATE_LIFECYCLE[PROVING_STATE_LIFECYCLE["PROVING_STATE_RESOLVED"] = 2] = "PROVING_STATE_RESOLVED";
|
|
9
|
+
PROVING_STATE_LIFECYCLE[PROVING_STATE_LIFECYCLE["PROVING_STATE_REJECTED"] = 3] = "PROVING_STATE_REJECTED";
|
|
10
|
+
})(PROVING_STATE_LIFECYCLE || (PROVING_STATE_LIFECYCLE = {}));
|
|
11
|
+
/**
|
|
12
|
+
* The current state of the proving schedule for an epoch.
|
|
13
|
+
* Contains the raw inputs and intermediate state to generate every constituent proof in the tree.
|
|
14
|
+
* Carries an identifier so we can identify if the proving state is discarded and a new one started.
|
|
15
|
+
* Captures resolve and reject callbacks to provide a promise base interface to the consumer of our proving.
|
|
16
|
+
*/
|
|
17
|
+
export class EpochProvingState {
|
|
18
|
+
constructor(epochNumber, totalNumBlocks, completionCallback, rejectionCallback) {
|
|
19
|
+
this.epochNumber = epochNumber;
|
|
20
|
+
this.totalNumBlocks = totalNumBlocks;
|
|
21
|
+
this.completionCallback = completionCallback;
|
|
22
|
+
this.rejectionCallback = rejectionCallback;
|
|
23
|
+
this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED;
|
|
24
|
+
this.mergeRollupInputs = [];
|
|
25
|
+
this.blocks = [];
|
|
26
|
+
}
|
|
27
|
+
/** Returns the current block proving state */
|
|
28
|
+
get currentBlock() {
|
|
29
|
+
return this.blocks.at(-1);
|
|
30
|
+
}
|
|
31
|
+
// Returns the number of levels of merge rollups
|
|
32
|
+
get numMergeLevels() {
|
|
33
|
+
const totalLeaves = Math.max(2, this.totalNumBlocks);
|
|
34
|
+
return BigInt(Math.ceil(Math.log2(totalLeaves)) - 1);
|
|
35
|
+
}
|
|
36
|
+
// Calculates the index and level of the parent rollup circuit
|
|
37
|
+
// Based on tree implementation in unbalanced_tree.ts -> batchInsert()
|
|
38
|
+
// REFACTOR: This is repeated from the block orchestrator
|
|
39
|
+
findMergeLevel(currentLevel, currentIndex) {
|
|
40
|
+
const totalLeaves = Math.max(2, this.totalNumBlocks);
|
|
41
|
+
const moveUpMergeLevel = (levelSize, index, nodeToShift) => {
|
|
42
|
+
levelSize /= 2;
|
|
43
|
+
if (levelSize & 1) {
|
|
44
|
+
[levelSize, nodeToShift] = nodeToShift ? [levelSize + 1, false] : [levelSize - 1, true];
|
|
45
|
+
}
|
|
46
|
+
index >>= 1n;
|
|
47
|
+
return { thisLevelSize: levelSize, thisIndex: index, shiftUp: nodeToShift };
|
|
48
|
+
};
|
|
49
|
+
let [thisLevelSize, shiftUp] = totalLeaves & 1 ? [totalLeaves - 1, true] : [totalLeaves, false];
|
|
50
|
+
const maxLevel = this.numMergeLevels + 1n;
|
|
51
|
+
let placeholder = currentIndex;
|
|
52
|
+
for (let i = 0; i < maxLevel - currentLevel; i++) {
|
|
53
|
+
({ thisLevelSize, thisIndex: placeholder, shiftUp } = moveUpMergeLevel(thisLevelSize, placeholder, shiftUp));
|
|
54
|
+
}
|
|
55
|
+
let thisIndex = currentIndex;
|
|
56
|
+
let mergeLevel = currentLevel;
|
|
57
|
+
while (thisIndex >= thisLevelSize && mergeLevel != 0n) {
|
|
58
|
+
mergeLevel -= 1n;
|
|
59
|
+
({ thisLevelSize, thisIndex, shiftUp } = moveUpMergeLevel(thisLevelSize, thisIndex, shiftUp));
|
|
60
|
+
}
|
|
61
|
+
return [mergeLevel - 1n, thisIndex >> 1n, thisIndex & 1n];
|
|
62
|
+
}
|
|
63
|
+
// Adds a block to the proving state, returns its index
|
|
64
|
+
// Will update the proving life cycle if this is the last block
|
|
65
|
+
startNewBlock(numTxs, globalVariables, l1ToL2Messages, messageTreeSnapshot, messageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, archiveTreeSnapshot, archiveTreeRootSiblingPath, previousBlockHash) {
|
|
66
|
+
const block = new BlockProvingState(this.blocks.length, numTxs, globalVariables, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP), messageTreeSnapshot, messageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, archiveTreeSnapshot, archiveTreeRootSiblingPath, previousBlockHash, this);
|
|
67
|
+
this.blocks.push(block);
|
|
68
|
+
if (this.blocks.length === this.totalNumBlocks) {
|
|
69
|
+
this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_FULL;
|
|
70
|
+
}
|
|
71
|
+
return this.blocks.length - 1;
|
|
72
|
+
}
|
|
73
|
+
// Returns true if this proving state is still valid, false otherwise
|
|
74
|
+
verifyState() {
|
|
75
|
+
return (this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED ||
|
|
76
|
+
this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_FULL);
|
|
77
|
+
}
|
|
78
|
+
// Returns true if we are still able to accept blocks, false otherwise
|
|
79
|
+
isAcceptingBlocks() {
|
|
80
|
+
return this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Stores the inputs to a merge circuit and determines if the circuit is ready to be executed
|
|
84
|
+
* @param mergeInputs - The inputs to store
|
|
85
|
+
* @param indexWithinMerge - The index in the set of inputs to this merge circuit
|
|
86
|
+
* @param indexOfMerge - The global index of this merge circuit
|
|
87
|
+
* @returns True if the merge circuit is ready to be executed, false otherwise
|
|
88
|
+
*/
|
|
89
|
+
storeMergeInputs(mergeInputs, indexWithinMerge, indexOfMerge) {
|
|
90
|
+
if (!this.mergeRollupInputs[indexOfMerge]) {
|
|
91
|
+
const mergeInputData = {
|
|
92
|
+
inputs: [undefined, undefined],
|
|
93
|
+
proofs: [undefined, undefined],
|
|
94
|
+
verificationKeys: [undefined, undefined],
|
|
95
|
+
};
|
|
96
|
+
mergeInputData.inputs[indexWithinMerge] = mergeInputs[0];
|
|
97
|
+
mergeInputData.proofs[indexWithinMerge] = mergeInputs[1];
|
|
98
|
+
mergeInputData.verificationKeys[indexWithinMerge] = mergeInputs[2];
|
|
99
|
+
this.mergeRollupInputs[indexOfMerge] = mergeInputData;
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
const mergeInputData = this.mergeRollupInputs[indexOfMerge];
|
|
103
|
+
mergeInputData.inputs[indexWithinMerge] = mergeInputs[0];
|
|
104
|
+
mergeInputData.proofs[indexWithinMerge] = mergeInputs[1];
|
|
105
|
+
mergeInputData.verificationKeys[indexWithinMerge] = mergeInputs[2];
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
// Returns a specific transaction proving state
|
|
109
|
+
getBlockProvingState(index) {
|
|
110
|
+
return this.blocks[index];
|
|
111
|
+
}
|
|
112
|
+
// Returns a set of merge rollup inputs
|
|
113
|
+
getMergeInputs(indexOfMerge) {
|
|
114
|
+
return this.mergeRollupInputs[indexOfMerge];
|
|
115
|
+
}
|
|
116
|
+
// Returns true if we have sufficient inputs to execute the block root rollup
|
|
117
|
+
isReadyForRootRollup() {
|
|
118
|
+
return !(this.mergeRollupInputs[0] === undefined || this.mergeRollupInputs[0].inputs.findIndex(p => !p) !== -1);
|
|
119
|
+
}
|
|
120
|
+
// Attempts to reject the proving state promise with a reason of 'cancelled'
|
|
121
|
+
cancel() {
|
|
122
|
+
this.reject('Proving cancelled');
|
|
123
|
+
}
|
|
124
|
+
// Attempts to reject the proving state promise with the given reason
|
|
125
|
+
// Does nothing if not in a valid state
|
|
126
|
+
reject(reason) {
|
|
127
|
+
if (!this.verifyState()) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_REJECTED;
|
|
131
|
+
this.rejectionCallback(reason);
|
|
132
|
+
}
|
|
133
|
+
// Attempts to resolve the proving state promise with the given result
|
|
134
|
+
// Does nothing if not in a valid state
|
|
135
|
+
resolve(result) {
|
|
136
|
+
if (!this.verifyState()) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_RESOLVED;
|
|
140
|
+
this.completionCallback(result);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvZXBvY2gtcHJvdmluZy1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBSUwsRUFBRSxFQUlGLG1DQUFtQyxHQUtwQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUk3RCxJQUFLLHVCQUtKO0FBTEQsV0FBSyx1QkFBdUI7SUFDMUIsdUdBQXFCLENBQUE7SUFDckIsaUdBQWtCLENBQUE7SUFDbEIseUdBQXNCLENBQUE7SUFDdEIseUdBQXNCLENBQUE7QUFDeEIsQ0FBQyxFQUxJLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFLM0I7QUFhRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFRNUIsWUFDa0IsV0FBbUIsRUFDbkIsY0FBc0IsRUFDOUIsa0JBQW1ELEVBQ25ELGlCQUEyQztRQUhuQyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUM5Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWlDO1FBQ25ELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFYN0MsMEJBQXFCLEdBQUcsdUJBQXVCLENBQUMscUJBQXFCLENBQUM7UUFFdEUsc0JBQWlCLEdBQWdDLEVBQUUsQ0FBQztRQUdyRCxXQUFNLEdBQXdCLEVBQUUsQ0FBQztJQU9yQyxDQUFDO0lBRUosOENBQThDO0lBQzlDLElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxJQUFXLGNBQWM7UUFDdkIsTUFBTSxXQUFXLEdB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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type ProcessedTx } from '@aztec/circuit-types';
|
|
2
|
-
import { type
|
|
3
|
-
import { Fr, type GlobalVariables } from '@aztec/circuits.js';
|
|
1
|
+
import { L2Block, type ProcessedTx, type ServerCircuitProver } from '@aztec/circuit-types';
|
|
2
|
+
import { type EpochProver } from '@aztec/circuit-types/interfaces';
|
|
3
|
+
import { Fr, type GlobalVariables, type Proof } from '@aztec/circuits.js';
|
|
4
4
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
5
5
|
import { type MerkleTreeOperations } from '@aztec/world-state';
|
|
6
6
|
/**
|
|
@@ -16,13 +16,14 @@ import { type MerkleTreeOperations } from '@aztec/world-state';
|
|
|
16
16
|
/**
|
|
17
17
|
* The orchestrator, managing the flow of recursive proving operations required to build the rollup proof tree.
|
|
18
18
|
*/
|
|
19
|
-
export declare class ProvingOrchestrator implements
|
|
19
|
+
export declare class ProvingOrchestrator implements EpochProver {
|
|
20
20
|
private db;
|
|
21
21
|
private prover;
|
|
22
22
|
private readonly proverId;
|
|
23
23
|
private provingState;
|
|
24
24
|
private pendingProvingJobs;
|
|
25
25
|
private paddingTx;
|
|
26
|
+
private provingPromise;
|
|
26
27
|
private metrics;
|
|
27
28
|
constructor(db: MerkleTreeOperations, prover: ServerCircuitProver, telemetryClient: TelemetryClient, proverId?: Fr);
|
|
28
29
|
get tracer(): Tracer;
|
|
@@ -31,15 +32,16 @@ export declare class ProvingOrchestrator implements BlockProver {
|
|
|
31
32
|
* Resets the orchestrator's cached padding tx.
|
|
32
33
|
*/
|
|
33
34
|
reset(): void;
|
|
35
|
+
startNewEpoch(epochNumber: number, totalNumBlocks: number): void;
|
|
34
36
|
/**
|
|
35
37
|
* Starts off a new block
|
|
36
|
-
* @param numTxs - The total number of transactions in the block.
|
|
38
|
+
* @param numTxs - The total number of transactions in the block.
|
|
37
39
|
* @param globalVariables - The global variables for the block
|
|
38
40
|
* @param l1ToL2Messages - The l1 to l2 messages for the block
|
|
39
41
|
* @param verificationKeys - The private kernel verification keys
|
|
40
42
|
* @returns A proving ticket, containing a promise notifying of proving completion
|
|
41
43
|
*/
|
|
42
|
-
startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<
|
|
44
|
+
startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<void>;
|
|
43
45
|
/**
|
|
44
46
|
* The interface to add a simulated transaction to the scheduler
|
|
45
47
|
* @param tx - The transaction to be proven
|
|
@@ -47,8 +49,13 @@ export declare class ProvingOrchestrator implements BlockProver {
|
|
|
47
49
|
addNewTx(tx: ProcessedTx): Promise<void>;
|
|
48
50
|
/**
|
|
49
51
|
* Marks the block as full and pads it if required, no more transactions will be accepted.
|
|
52
|
+
* Computes the block header and updates the archive tree.
|
|
50
53
|
*/
|
|
51
|
-
setBlockCompleted(): Promise<
|
|
54
|
+
setBlockCompleted(): Promise<L2Block>;
|
|
55
|
+
/** Returns the block as built for a given index. */
|
|
56
|
+
getBlock(index: number): L2Block;
|
|
57
|
+
private padEpoch;
|
|
58
|
+
private buildBlock;
|
|
52
59
|
private enqueuePaddingTxs;
|
|
53
60
|
/**
|
|
54
61
|
* Prepares the cached sets of base rollup inputs for padding transactions and proves them
|
|
@@ -58,20 +65,21 @@ export declare class ProvingOrchestrator implements BlockProver {
|
|
|
58
65
|
*/
|
|
59
66
|
private provePaddingTransactions;
|
|
60
67
|
/**
|
|
61
|
-
* Cancel any further proving
|
|
68
|
+
* Cancel any further proving
|
|
62
69
|
*/
|
|
63
|
-
|
|
70
|
+
cancel(): void;
|
|
64
71
|
/**
|
|
65
72
|
* Extract the block header from public inputs.
|
|
66
|
-
* TODO(#7346): Refactor this once new batch rollup circuits are integrated
|
|
67
73
|
* @returns The header of this proving state's block.
|
|
68
74
|
*/
|
|
69
|
-
private
|
|
75
|
+
private extractBlockHeaderFromPublicInputs;
|
|
70
76
|
/**
|
|
71
|
-
*
|
|
72
|
-
* @returns The fully proven block and proof.
|
|
77
|
+
* Returns the proof for the current epoch.
|
|
73
78
|
*/
|
|
74
|
-
|
|
79
|
+
finaliseEpoch(): Promise<{
|
|
80
|
+
proof: Proof;
|
|
81
|
+
publicInputs: import("@aztec/circuits.js").RootRollupPublicInputs;
|
|
82
|
+
}>;
|
|
75
83
|
/**
|
|
76
84
|
* Starts the proving process for the given transaction and adds it to our state
|
|
77
85
|
* @param tx - The transaction whose proving we wish to commence
|
|
@@ -87,14 +95,16 @@ export declare class ProvingOrchestrator implements BlockProver {
|
|
|
87
95
|
*/
|
|
88
96
|
private deferredProving;
|
|
89
97
|
private prepareBaseRollupInputs;
|
|
90
|
-
private storeMergeInputs;
|
|
91
98
|
private enqueueBaseRollup;
|
|
92
99
|
private enqueueTube;
|
|
93
100
|
private enqueueMergeRollup;
|
|
94
101
|
private enqueueBlockRootRollup;
|
|
95
102
|
private enqueueBaseParityCircuit;
|
|
96
103
|
private enqueueRootParityCircuit;
|
|
104
|
+
private enqueueBlockMergeRollup;
|
|
105
|
+
private enqueueRootRollup;
|
|
97
106
|
private checkAndEnqueueBlockRootRollup;
|
|
107
|
+
private checkAndEnqueueRootRollup;
|
|
98
108
|
/**
|
|
99
109
|
* Stores the inputs to a merge/root circuit and enqueues the circuit if ready
|
|
100
110
|
* @param provingState - The proving state being operated on
|
|
@@ -103,6 +113,14 @@ export declare class ProvingOrchestrator implements BlockProver {
|
|
|
103
113
|
* @param mergeInputData - The inputs to be stored
|
|
104
114
|
*/
|
|
105
115
|
private storeAndExecuteNextMergeLevel;
|
|
116
|
+
/**
|
|
117
|
+
* Stores the inputs to a block merge/root circuit and enqueues the circuit if ready
|
|
118
|
+
* @param provingState - The proving state being operated on
|
|
119
|
+
* @param currentLevel - The level of the merge/root circuit
|
|
120
|
+
* @param currentIndex - The index of the merge/root circuit
|
|
121
|
+
* @param mergeInputData - The inputs to be stored
|
|
122
|
+
*/
|
|
123
|
+
private storeAndExecuteNextBlockMergeLevel;
|
|
106
124
|
/**
|
|
107
125
|
* Executes the VM circuit for a public function, will enqueue the corresponding kernel if the
|
|
108
126
|
* previous kernel is ready
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,OAAO,EAGP,KAAK,WAAW,EAGhB,KAAK,mBAAmB,EAOzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAQL,EAAE,EACF,KAAK,eAAe,EAQpB,KAAK,KAAK,EAaX,MAAM,oBAAoB,CAAC;AAU5B,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,MAAM,EAAiC,MAAM,yBAAyB,CAAC;AACvH,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AA8B/D;;;;;;;;;GASG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IASnD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX3B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,SAAS,CAA6C;IAE9D,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAA6B;gBAGlC,EAAE,EAAE,oBAAoB,EACxB,MAAM,EAAE,mBAAmB,EACnC,eAAe,EAAE,eAAe,EACf,QAAQ,GAAE,EAAY;IAKzC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEM,WAAW,IAAI,EAAE;IAIxB;;OAEG;IACI,KAAK;IAIL,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAWhE;;;;;;;OAOG;IAKU,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE;IAwFjG;;;OAGG;IAIU,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BrD;;;OAGG;IAYU,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAkDlD,oDAAoD;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAiBvC,OAAO,CAAC,QAAQ;YAkDF,UAAU;IAsCxB,OAAO,CAAC,iBAAiB;IA4CzB;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAmBhC;;OAEG;IACI,MAAM;IAQb;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAmB1C;;OAEG;IACU,aAAa;;;;IAwB1B;;;;OAIG;YACW,kBAAkB;IAShC,OAAO,CAAC,kBAAkB;IAkB1B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;YA4DT,uBAAuB;IAyCrC,OAAO,CAAC,iBAAiB;IAgFzB,OAAO,CAAC,WAAW;IAoCnB,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,sBAAsB;IA4E9B,OAAO,CAAC,wBAAwB;IA6BhC,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,uBAAuB;IAiC/B,OAAO,CAAC,iBAAiB;IAuCzB,OAAO,CAAC,8BAA8B;IAYtC,OAAO,CAAC,yBAAyB;IAQjC;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IA+BrC;;;;;;OAMG;IACH,OAAO,CAAC,kCAAkC;IAqC1C;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAiDjB,OAAO,CAAC,sCAAsC;IAqB9C,OAAO,CAAC,4BAA4B;IAqCpC;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;CAsD5B"}
|