@aztec/prover-client 0.69.1 → 0.71.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/bin/get-proof-inputs.d.ts +2 -0
- package/dest/bin/get-proof-inputs.d.ts.map +1 -0
- package/dest/bin/get-proof-inputs.js +50 -0
- package/dest/block_builder/light.d.ts +3 -5
- package/dest/block_builder/light.d.ts.map +1 -1
- package/dest/block_builder/light.js +9 -22
- package/dest/config.d.ts +2 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +3 -2
- package/dest/mocks/fixtures.d.ts +1 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +2 -2
- package/dest/mocks/test_context.d.ts +1 -1
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +11 -12
- package/dest/orchestrator/block-building-helpers.d.ts +15 -29
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +51 -58
- package/dest/orchestrator/block-proving-state.d.ts +40 -44
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +149 -85
- package/dest/orchestrator/epoch-proving-state.d.ts +23 -30
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +92 -65
- package/dest/orchestrator/orchestrator.d.ts +17 -48
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +208 -351
- package/dest/orchestrator/tx-proving-state.d.ts +10 -6
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +57 -46
- package/dest/prover-agent/memory-proving-queue.d.ts +4 -4
- package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
- package/dest/prover-agent/memory-proving-queue.js +5 -5
- package/dest/prover-agent/prover-agent.d.ts +0 -2
- package/dest/prover-agent/prover-agent.d.ts.map +1 -1
- package/dest/prover-agent/prover-agent.js +7 -9
- package/dest/prover-client/factory.d.ts.map +1 -1
- package/dest/prover-client/factory.js +3 -3
- package/dest/prover-client/prover-client.d.ts +4 -2
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +16 -15
- package/dest/prover-client/server-epoch-prover.d.ts +25 -0
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
- package/dest/prover-client/server-epoch-prover.js +40 -0
- package/dest/proving_broker/broker_prover_facade.d.ts +19 -7
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +271 -49
- package/dest/proving_broker/config.d.ts +61 -0
- package/dest/proving_broker/config.d.ts.map +1 -0
- package/dest/proving_broker/config.js +83 -0
- package/dest/proving_broker/factory.d.ts +1 -1
- package/dest/proving_broker/factory.d.ts.map +1 -1
- package/dest/proving_broker/factory.js +4 -7
- package/dest/proving_broker/fixtures.d.ts +5 -0
- package/dest/proving_broker/fixtures.d.ts.map +1 -0
- package/dest/proving_broker/fixtures.js +12 -0
- package/dest/proving_broker/index.d.ts +2 -1
- package/dest/proving_broker/index.d.ts.map +1 -1
- package/dest/proving_broker/index.js +3 -2
- package/dest/proving_broker/proof_store/factory.d.ts +6 -0
- package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/factory.js +39 -0
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +13 -0
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/gcs_proof_store.js +46 -0
- package/dest/proving_broker/proof_store/index.d.ts +4 -0
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/index.js +4 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +14 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.js +37 -0
- package/dest/proving_broker/{proof_store.d.ts → proof_store/proof_store.d.ts} +1 -12
- package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/proof_store.js +2 -0
- package/dest/proving_broker/proving_agent.d.ts +4 -4
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +5 -5
- package/dest/proving_broker/proving_broker.d.ts +16 -12
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +307 -274
- package/dest/proving_broker/proving_broker_database/memory.d.ts +4 -2
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/memory.js +17 -4
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +10 -6
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +106 -14
- package/dest/proving_broker/proving_broker_database.d.ts +7 -3
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +4 -4
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +4 -4
- package/dest/test/mock_prover.d.ts +8 -8
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +9 -10
- package/package.json +14 -12
- package/src/bin/get-proof-inputs.ts +60 -0
- package/src/block_builder/light.ts +7 -31
- package/src/config.ts +4 -4
- package/src/mocks/fixtures.ts +1 -1
- package/src/mocks/test_context.ts +9 -11
- package/src/orchestrator/block-building-helpers.ts +360 -402
- package/src/orchestrator/block-proving-state.ts +251 -121
- package/src/orchestrator/epoch-proving-state.ts +159 -88
- package/src/orchestrator/orchestrator.ts +262 -542
- package/src/orchestrator/tx-proving-state.ts +30 -18
- package/src/prover-agent/memory-proving-queue.ts +12 -16
- package/src/prover-agent/prover-agent.ts +14 -8
- package/src/prover-client/factory.ts +2 -3
- package/src/prover-client/prover-client.ts +17 -20
- package/src/prover-client/server-epoch-prover.ts +44 -0
- package/src/proving_broker/broker_prover_facade.ts +347 -67
- package/src/proving_broker/config.ts +93 -0
- package/src/proving_broker/factory.ts +11 -10
- package/src/proving_broker/fixtures.ts +14 -0
- package/src/proving_broker/index.ts +2 -1
- package/src/proving_broker/proof_store/factory.ts +42 -0
- package/src/proving_broker/proof_store/gcs_proof_store.ts +72 -0
- package/src/proving_broker/proof_store/index.ts +3 -0
- package/src/proving_broker/{proof_store.ts → proof_store/inline_proof_store.ts} +1 -44
- package/src/proving_broker/proof_store/proof_store.ts +54 -0
- package/src/proving_broker/proving_agent.ts +11 -5
- package/src/proving_broker/proving_broker.ts +122 -73
- package/src/proving_broker/proving_broker_database/memory.ts +24 -4
- package/src/proving_broker/proving_broker_database/persisted.ts +142 -20
- package/src/proving_broker/proving_broker_database.ts +8 -3
- package/src/proving_broker/proving_job_controller.ts +5 -5
- package/src/proving_broker/rpc.ts +2 -3
- package/src/test/mock_prover.ts +12 -18
- package/dest/proving_broker/proof_store.d.ts.map +0 -1
- package/dest/proving_broker/proof_store.js +0 -37
|
@@ -1,19 +1,36 @@
|
|
|
1
|
-
import { type MerkleTreeId } from '@aztec/circuit-types';
|
|
2
1
|
import {
|
|
3
|
-
type
|
|
4
|
-
type
|
|
2
|
+
type MerkleTreeId,
|
|
3
|
+
type ProofAndVerificationKey,
|
|
4
|
+
type PublicInputsAndRecursiveProof,
|
|
5
|
+
} from '@aztec/circuit-types';
|
|
6
|
+
import {
|
|
7
|
+
ARCHIVE_HEIGHT,
|
|
8
|
+
AppendOnlyTreeSnapshot,
|
|
9
|
+
type BlockHeader,
|
|
5
10
|
Fr,
|
|
6
11
|
type GlobalVariables,
|
|
7
|
-
|
|
12
|
+
L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH,
|
|
13
|
+
MembershipWitness,
|
|
8
14
|
type NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
9
15
|
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
|
|
10
|
-
type
|
|
11
|
-
|
|
12
|
-
type VerificationKeyAsFields,
|
|
16
|
+
type TUBE_PROOF_LENGTH,
|
|
17
|
+
VK_TREE_HEIGHT,
|
|
13
18
|
} from '@aztec/circuits.js';
|
|
14
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
BlockMergeRollupInputs,
|
|
21
|
+
type BlockRootOrBlockMergePublicInputs,
|
|
22
|
+
ConstantRollupData,
|
|
23
|
+
EmptyBlockRootRollupInputs,
|
|
24
|
+
PreviousRollupBlockData,
|
|
25
|
+
RootRollupInputs,
|
|
26
|
+
type RootRollupPublicInputs,
|
|
27
|
+
} from '@aztec/circuits.js/rollup';
|
|
28
|
+
import { makeTuple } from '@aztec/foundation/array';
|
|
15
29
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
16
30
|
import { type Tuple } from '@aztec/foundation/serialize';
|
|
31
|
+
import { type TreeNodeLocation, UnbalancedTreeStore } from '@aztec/foundation/trees';
|
|
32
|
+
import { getVKIndex, getVKSiblingPath, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
|
|
33
|
+
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
17
34
|
|
|
18
35
|
import { BlockProvingState } from './block-proving-state.js';
|
|
19
36
|
|
|
@@ -26,15 +43,6 @@ enum PROVING_STATE_LIFECYCLE {
|
|
|
26
43
|
PROVING_STATE_REJECTED,
|
|
27
44
|
}
|
|
28
45
|
|
|
29
|
-
export type BlockMergeRollupInputData = {
|
|
30
|
-
inputs: [BlockRootOrBlockMergePublicInputs | undefined, BlockRootOrBlockMergePublicInputs | undefined];
|
|
31
|
-
proofs: [
|
|
32
|
-
RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH> | undefined,
|
|
33
|
-
RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH> | undefined,
|
|
34
|
-
];
|
|
35
|
-
verificationKeys: [VerificationKeyAsFields | undefined, VerificationKeyAsFields | undefined];
|
|
36
|
-
};
|
|
37
|
-
|
|
38
46
|
export type ProvingResult = { status: 'success' } | { status: 'failure'; reason: string };
|
|
39
47
|
|
|
40
48
|
/**
|
|
@@ -44,11 +52,18 @@ export type ProvingResult = { status: 'success' } | { status: 'failure'; reason:
|
|
|
44
52
|
* Captures resolve and reject callbacks to provide a promise base interface to the consumer of our proving.
|
|
45
53
|
*/
|
|
46
54
|
export class EpochProvingState {
|
|
55
|
+
private blockRootOrMergeProvingOutputs: UnbalancedTreeStore<
|
|
56
|
+
PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
57
|
+
>;
|
|
58
|
+
private paddingBlockRootProvingOutput:
|
|
59
|
+
| PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
60
|
+
| undefined;
|
|
61
|
+
private rootRollupProvingOutput: PublicInputsAndRecursiveProof<RootRollupPublicInputs> | undefined;
|
|
47
62
|
private provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED;
|
|
48
63
|
|
|
49
|
-
|
|
50
|
-
public
|
|
51
|
-
|
|
64
|
+
// Map from tx hash to tube proof promise. Used when kickstarting tube proofs before tx processing.
|
|
65
|
+
public readonly cachedTubeProofs = new Map<string, Promise<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>>>();
|
|
66
|
+
|
|
52
67
|
public blocks: (BlockProvingState | undefined)[] = [];
|
|
53
68
|
|
|
54
69
|
constructor(
|
|
@@ -57,40 +72,8 @@ export class EpochProvingState {
|
|
|
57
72
|
public readonly totalNumBlocks: number,
|
|
58
73
|
private completionCallback: (result: ProvingResult) => void,
|
|
59
74
|
private rejectionCallback: (reason: string) => void,
|
|
60
|
-
) {
|
|
61
|
-
|
|
62
|
-
// Returns the number of levels of merge rollups
|
|
63
|
-
public get numMergeLevels() {
|
|
64
|
-
const totalLeaves = Math.max(2, this.totalNumBlocks);
|
|
65
|
-
return BigInt(Math.ceil(Math.log2(totalLeaves)) - 1);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Calculates the index and level of the parent rollup circuit
|
|
69
|
-
// Based on tree implementation in unbalanced_tree.ts -> batchInsert()
|
|
70
|
-
// REFACTOR: This is repeated from the block orchestrator
|
|
71
|
-
public findMergeLevel(currentLevel: bigint, currentIndex: bigint) {
|
|
72
|
-
const totalLeaves = Math.max(2, this.totalNumBlocks);
|
|
73
|
-
const moveUpMergeLevel = (levelSize: number, index: bigint, nodeToShift: boolean) => {
|
|
74
|
-
levelSize /= 2;
|
|
75
|
-
if (levelSize & 1) {
|
|
76
|
-
[levelSize, nodeToShift] = nodeToShift ? [levelSize + 1, false] : [levelSize - 1, true];
|
|
77
|
-
}
|
|
78
|
-
index >>= 1n;
|
|
79
|
-
return { thisLevelSize: levelSize, thisIndex: index, shiftUp: nodeToShift };
|
|
80
|
-
};
|
|
81
|
-
let [thisLevelSize, shiftUp] = totalLeaves & 1 ? [totalLeaves - 1, true] : [totalLeaves, false];
|
|
82
|
-
const maxLevel = this.numMergeLevels + 1n;
|
|
83
|
-
let placeholder = currentIndex;
|
|
84
|
-
for (let i = 0; i < maxLevel - currentLevel; i++) {
|
|
85
|
-
({ thisLevelSize, thisIndex: placeholder, shiftUp } = moveUpMergeLevel(thisLevelSize, placeholder, shiftUp));
|
|
86
|
-
}
|
|
87
|
-
let thisIndex = currentIndex;
|
|
88
|
-
let mergeLevel = currentLevel;
|
|
89
|
-
while (thisIndex >= thisLevelSize && mergeLevel != 0n) {
|
|
90
|
-
mergeLevel -= 1n;
|
|
91
|
-
({ thisLevelSize, thisIndex, shiftUp } = moveUpMergeLevel(thisLevelSize, thisIndex, shiftUp));
|
|
92
|
-
}
|
|
93
|
-
return [mergeLevel - 1n, thisIndex >> 1n, thisIndex & 1n];
|
|
75
|
+
) {
|
|
76
|
+
this.blockRootOrMergeProvingOutputs = new UnbalancedTreeStore(totalNumBlocks);
|
|
94
77
|
}
|
|
95
78
|
|
|
96
79
|
// Adds a block to the proving state, returns its index
|
|
@@ -103,6 +86,7 @@ export class EpochProvingState {
|
|
|
103
86
|
messageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot,
|
|
104
87
|
archiveTreeSnapshot: AppendOnlyTreeSnapshot,
|
|
105
88
|
archiveTreeRootSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
|
|
89
|
+
previousBlockHeader: BlockHeader,
|
|
106
90
|
previousBlockHash: Fr,
|
|
107
91
|
): BlockProvingState {
|
|
108
92
|
const index = globalVariables.blockNumber.toNumber() - this.firstBlockNumber;
|
|
@@ -115,6 +99,7 @@ export class EpochProvingState {
|
|
|
115
99
|
messageTreeSnapshotAfterInsertion,
|
|
116
100
|
archiveTreeSnapshot,
|
|
117
101
|
archiveTreeRootSiblingPath,
|
|
102
|
+
previousBlockHeader,
|
|
118
103
|
previousBlockHash,
|
|
119
104
|
this,
|
|
120
105
|
);
|
|
@@ -138,39 +123,89 @@ export class EpochProvingState {
|
|
|
138
123
|
return this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED;
|
|
139
124
|
}
|
|
140
125
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
126
|
+
public setBlockRootRollupProof(
|
|
127
|
+
blockIndex: number,
|
|
128
|
+
proof: PublicInputsAndRecursiveProof<
|
|
129
|
+
BlockRootOrBlockMergePublicInputs,
|
|
130
|
+
typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
|
|
131
|
+
>,
|
|
132
|
+
): TreeNodeLocation {
|
|
133
|
+
return this.blockRootOrMergeProvingOutputs.setLeaf(blockIndex, proof);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
public setBlockMergeRollupProof(
|
|
137
|
+
location: TreeNodeLocation,
|
|
138
|
+
proof: PublicInputsAndRecursiveProof<
|
|
150
139
|
BlockRootOrBlockMergePublicInputs,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
],
|
|
154
|
-
indexWithinMerge: number,
|
|
155
|
-
indexOfMerge: number,
|
|
140
|
+
typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
|
|
141
|
+
>,
|
|
156
142
|
) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
143
|
+
this.blockRootOrMergeProvingOutputs.setNode(location, proof);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public setRootRollupProof(proof: PublicInputsAndRecursiveProof<RootRollupPublicInputs>) {
|
|
147
|
+
this.rootRollupProvingOutput = proof;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
public setPaddingBlockRootProof(
|
|
151
|
+
proof: PublicInputsAndRecursiveProof<
|
|
152
|
+
BlockRootOrBlockMergePublicInputs,
|
|
153
|
+
typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
|
|
154
|
+
>,
|
|
155
|
+
) {
|
|
156
|
+
this.paddingBlockRootProvingOutput = proof;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
public getParentLocation(location: TreeNodeLocation) {
|
|
160
|
+
return this.blockRootOrMergeProvingOutputs.getParentLocation(location);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
public getBlockMergeRollupInputs(mergeLocation: TreeNodeLocation) {
|
|
164
|
+
const [left, right] = this.blockRootOrMergeProvingOutputs.getChildren(mergeLocation);
|
|
165
|
+
if (!left || !right) {
|
|
166
|
+
throw new Error('At lease one child is not ready.');
|
|
168
167
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
|
|
169
|
+
return new BlockMergeRollupInputs([this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)]);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
public getRootRollupInputs(proverId: Fr) {
|
|
173
|
+
const [left, right] = this.#getChildProofsForRoot();
|
|
174
|
+
if (!left || !right) {
|
|
175
|
+
throw new Error('At lease one child is not ready.');
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return RootRollupInputs.from({
|
|
179
|
+
previousRollupData: [this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)],
|
|
180
|
+
proverId,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
public getPaddingBlockRootInputs(proverId: Fr) {
|
|
185
|
+
const { block } = this.blocks[0] ?? {};
|
|
186
|
+
const l1ToL2Roots = this.blocks[0]?.getL1ToL2Roots();
|
|
187
|
+
if (!block || !l1ToL2Roots) {
|
|
188
|
+
throw new Error('Epoch needs one completed block in order to be padded.');
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const constants = ConstantRollupData.from({
|
|
192
|
+
lastArchive: block.archive,
|
|
193
|
+
globalVariables: block.header.globalVariables,
|
|
194
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
195
|
+
protocolContractTreeRoot,
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
return EmptyBlockRootRollupInputs.from({
|
|
199
|
+
l1ToL2Roots,
|
|
200
|
+
newL1ToL2MessageTreeRootSiblingPath: makeTuple(L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, Fr.zero),
|
|
201
|
+
startL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot.zero(),
|
|
202
|
+
newArchiveSiblingPath: makeTuple(ARCHIVE_HEIGHT, Fr.zero),
|
|
203
|
+
previousBlockHash: block.header.hash(),
|
|
204
|
+
previousPartialState: block.header.state.partial,
|
|
205
|
+
constants,
|
|
206
|
+
proverId,
|
|
207
|
+
isPadding: true,
|
|
208
|
+
});
|
|
174
209
|
}
|
|
175
210
|
|
|
176
211
|
// Returns a specific transaction proving state
|
|
@@ -178,14 +213,25 @@ export class EpochProvingState {
|
|
|
178
213
|
return this.blocks.find(block => block?.blockNumber === blockNumber);
|
|
179
214
|
}
|
|
180
215
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
216
|
+
public getEpochProofResult() {
|
|
217
|
+
if (!this.rootRollupProvingOutput) {
|
|
218
|
+
throw new Error('Unable to get epoch proof result. Root rollup is not ready.');
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return {
|
|
222
|
+
proof: this.rootRollupProvingOutput.proof.binaryProof,
|
|
223
|
+
publicInputs: this.rootRollupProvingOutput.inputs,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
public isReadyForBlockMerge(location: TreeNodeLocation) {
|
|
228
|
+
return this.blockRootOrMergeProvingOutputs.getSibling(location) !== undefined;
|
|
184
229
|
}
|
|
185
230
|
|
|
186
231
|
// Returns true if we have sufficient inputs to execute the block root rollup
|
|
187
232
|
public isReadyForRootRollup() {
|
|
188
|
-
|
|
233
|
+
const childProofs = this.#getChildProofsForRoot();
|
|
234
|
+
return childProofs.every(p => !!p);
|
|
189
235
|
}
|
|
190
236
|
|
|
191
237
|
// Attempts to reject the proving state promise with a reason of 'cancelled'
|
|
@@ -212,4 +258,29 @@ export class EpochProvingState {
|
|
|
212
258
|
this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_RESOLVED;
|
|
213
259
|
this.completionCallback(result);
|
|
214
260
|
}
|
|
261
|
+
|
|
262
|
+
#getChildProofsForRoot() {
|
|
263
|
+
const rootLocation = { level: 0, index: 0 };
|
|
264
|
+
// If there's only 1 block, its block root proof will be stored at the root.
|
|
265
|
+
return this.totalNumBlocks === 1
|
|
266
|
+
? [this.blockRootOrMergeProvingOutputs.getNode(rootLocation), this.paddingBlockRootProvingOutput]
|
|
267
|
+
: this.blockRootOrMergeProvingOutputs.getChildren(rootLocation);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
#getPreviousRollupData({
|
|
271
|
+
inputs,
|
|
272
|
+
proof,
|
|
273
|
+
verificationKey,
|
|
274
|
+
}: PublicInputsAndRecursiveProof<
|
|
275
|
+
BlockRootOrBlockMergePublicInputs,
|
|
276
|
+
typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
|
|
277
|
+
>) {
|
|
278
|
+
const leafIndex = getVKIndex(verificationKey.keyAsFields);
|
|
279
|
+
return new PreviousRollupBlockData(
|
|
280
|
+
inputs,
|
|
281
|
+
proof,
|
|
282
|
+
verificationKey.keyAsFields,
|
|
283
|
+
new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), getVKSiblingPath(leafIndex)),
|
|
284
|
+
);
|
|
285
|
+
}
|
|
215
286
|
}
|