@aztec/prover-client 4.0.0-nightly.20250907 → 4.0.0-nightly.20260108
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-factory/index.d.ts +1 -1
- package/dest/block-factory/light.d.ts +5 -3
- package/dest/block-factory/light.d.ts.map +1 -1
- package/dest/block-factory/light.js +32 -11
- package/dest/config.d.ts +2 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -2
- package/dest/index.d.ts +1 -1
- package/dest/light/index.d.ts +2 -0
- package/dest/light/index.d.ts.map +1 -0
- package/dest/light/index.js +1 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts +36 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
- package/dest/light/lightweight_checkpoint_builder.js +147 -0
- package/dest/mocks/fixtures.d.ts +5 -5
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +33 -15
- package/dest/mocks/test_context.d.ts +38 -33
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +133 -82
- package/dest/orchestrator/block-building-helpers.d.ts +35 -35
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +151 -187
- package/dest/orchestrator/block-proving-state.d.ts +68 -55
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +273 -185
- package/dest/orchestrator/checkpoint-proving-state.d.ts +63 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-proving-state.js +210 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +38 -31
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +128 -84
- package/dest/orchestrator/index.d.ts +1 -1
- package/dest/orchestrator/orchestrator.d.ts +35 -34
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +777 -292
- package/dest/orchestrator/orchestrator_metrics.d.ts +1 -3
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator_metrics.js +0 -9
- package/dest/orchestrator/tx-proving-state.d.ts +12 -10
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +23 -29
- package/dest/prover-client/factory.d.ts +3 -3
- package/dest/prover-client/factory.d.ts.map +1 -1
- package/dest/prover-client/index.d.ts +1 -1
- package/dest/prover-client/prover-client.d.ts +3 -3
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +1 -1
- package/dest/prover-client/server-epoch-prover.d.ts +13 -11
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +9 -9
- package/dest/proving_broker/broker_prover_facade.d.ts +23 -18
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +42 -33
- package/dest/proving_broker/config.d.ts +18 -14
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +12 -6
- package/dest/proving_broker/factory.d.ts +1 -1
- package/dest/proving_broker/factory.js +1 -1
- package/dest/proving_broker/fixtures.d.ts +3 -2
- package/dest/proving_broker/fixtures.d.ts.map +1 -1
- package/dest/proving_broker/fixtures.js +3 -2
- package/dest/proving_broker/index.d.ts +1 -1
- package/dest/proving_broker/proof_store/factory.d.ts +2 -2
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +1 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.d.ts +2 -1
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
- package/dest/proving_broker/proving_agent.d.ts +3 -8
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +1 -16
- package/dest/proving_broker/proving_broker.d.ts +2 -2
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +35 -29
- package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +5 -3
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +397 -8
- package/dest/proving_broker/proving_broker_database.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.d.ts +3 -2
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +40 -21
- package/dest/proving_broker/rpc.d.ts +4 -4
- package/dest/test/mock_proof_store.d.ts +3 -3
- package/dest/test/mock_proof_store.d.ts.map +1 -1
- package/dest/test/mock_prover.d.ts +23 -19
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +36 -21
- package/package.json +21 -19
- package/src/block-factory/light.ts +40 -17
- package/src/config.ts +2 -2
- package/src/light/index.ts +1 -0
- package/src/light/lightweight_checkpoint_builder.ts +198 -0
- package/src/mocks/fixtures.ts +41 -36
- package/src/mocks/test_context.ts +196 -114
- package/src/orchestrator/block-building-helpers.ts +233 -313
- package/src/orchestrator/block-proving-state.ts +315 -247
- package/src/orchestrator/checkpoint-proving-state.ts +303 -0
- package/src/orchestrator/epoch-proving-state.ts +176 -129
- package/src/orchestrator/orchestrator.ts +558 -348
- package/src/orchestrator/orchestrator_metrics.ts +1 -20
- package/src/orchestrator/tx-proving-state.ts +47 -55
- package/src/prover-client/factory.ts +6 -2
- package/src/prover-client/prover-client.ts +4 -11
- package/src/prover-client/server-epoch-prover.ts +30 -21
- package/src/proving_broker/broker_prover_facade.ts +175 -112
- package/src/proving_broker/config.ts +14 -7
- package/src/proving_broker/factory.ts +1 -1
- package/src/proving_broker/fixtures.ts +8 -3
- package/src/proving_broker/proof_store/index.ts +1 -0
- package/src/proving_broker/proving_agent.ts +1 -17
- package/src/proving_broker/proving_broker.ts +42 -27
- package/src/proving_broker/proving_broker_database/memory.ts +2 -1
- package/src/proving_broker/proving_broker_database/persisted.ts +25 -10
- package/src/proving_broker/proving_broker_database.ts +2 -1
- package/src/proving_broker/proving_job_controller.ts +42 -22
- package/src/test/mock_prover.ts +143 -66
- package/dest/bin/get-proof-inputs.d.ts +0 -2
- package/dest/bin/get-proof-inputs.d.ts.map +0 -1
- package/dest/bin/get-proof-inputs.js +0 -51
- package/dest/proving_broker/proving_agent_instrumentation.d.ts +0 -8
- package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +0 -1
- package/dest/proving_broker/proving_agent_instrumentation.js +0 -16
- package/src/bin/get-proof-inputs.ts +0 -59
- package/src/proving_broker/proving_agent_instrumentation.ts +0 -21
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { SpongeBlob, encodeCheckpointBlobDataFromBlocks } from '@aztec/blob-lib';
|
|
2
|
+
import { BLOBS_PER_CHECKPOINT, FIELDS_PER_BLOB, NUM_MSGS_PER_BASE_PARITY } from '@aztec/constants';
|
|
3
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
|
+
import { BLS12Point } from '@aztec/foundation/curves/bls12';
|
|
6
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
7
|
+
import { UnbalancedTreeStore } from '@aztec/foundation/trees';
|
|
8
|
+
import { ParityBasePrivateInputs } from '@aztec/stdlib/parity';
|
|
9
|
+
import { BlockMergeRollupPrivateInputs, CheckpointRootRollupHints, CheckpointRootRollupPrivateInputs, CheckpointRootSingleBlockRollupPrivateInputs } from '@aztec/stdlib/rollup';
|
|
10
|
+
import { accumulateBlobs, buildBlobHints, toProofData } from './block-building-helpers.js';
|
|
11
|
+
import { BlockProvingState } from './block-proving-state.js';
|
|
12
|
+
export class CheckpointProvingState {
|
|
13
|
+
index;
|
|
14
|
+
constants;
|
|
15
|
+
totalNumBlocks;
|
|
16
|
+
finalBlobBatchingChallenges;
|
|
17
|
+
headerOfLastBlockInPreviousCheckpoint;
|
|
18
|
+
lastArchiveSiblingPath;
|
|
19
|
+
l1ToL2Messages;
|
|
20
|
+
lastL1ToL2MessageTreeSnapshot;
|
|
21
|
+
lastL1ToL2MessageSubtreeRootSiblingPath;
|
|
22
|
+
newL1ToL2MessageTreeSnapshot;
|
|
23
|
+
newL1ToL2MessageSubtreeRootSiblingPath;
|
|
24
|
+
parentEpoch;
|
|
25
|
+
onBlobAccumulatorSet;
|
|
26
|
+
blockProofs;
|
|
27
|
+
checkpointRootProof;
|
|
28
|
+
blocks;
|
|
29
|
+
startBlobAccumulator;
|
|
30
|
+
endBlobAccumulator;
|
|
31
|
+
blobFields;
|
|
32
|
+
error;
|
|
33
|
+
firstBlockNumber;
|
|
34
|
+
constructor(index, constants, totalNumBlocks, finalBlobBatchingChallenges, headerOfLastBlockInPreviousCheckpoint, lastArchiveSiblingPath, l1ToL2Messages, // The snapshot and sibling path before the new l1 to l2 message subtree is inserted.
|
|
35
|
+
lastL1ToL2MessageTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath, // The snapshot and sibling path after the new l1 to l2 message subtree is inserted.
|
|
36
|
+
newL1ToL2MessageTreeSnapshot, newL1ToL2MessageSubtreeRootSiblingPath, parentEpoch, onBlobAccumulatorSet){
|
|
37
|
+
this.index = index;
|
|
38
|
+
this.constants = constants;
|
|
39
|
+
this.totalNumBlocks = totalNumBlocks;
|
|
40
|
+
this.finalBlobBatchingChallenges = finalBlobBatchingChallenges;
|
|
41
|
+
this.headerOfLastBlockInPreviousCheckpoint = headerOfLastBlockInPreviousCheckpoint;
|
|
42
|
+
this.lastArchiveSiblingPath = lastArchiveSiblingPath;
|
|
43
|
+
this.l1ToL2Messages = l1ToL2Messages;
|
|
44
|
+
this.lastL1ToL2MessageTreeSnapshot = lastL1ToL2MessageTreeSnapshot;
|
|
45
|
+
this.lastL1ToL2MessageSubtreeRootSiblingPath = lastL1ToL2MessageSubtreeRootSiblingPath;
|
|
46
|
+
this.newL1ToL2MessageTreeSnapshot = newL1ToL2MessageTreeSnapshot;
|
|
47
|
+
this.newL1ToL2MessageSubtreeRootSiblingPath = newL1ToL2MessageSubtreeRootSiblingPath;
|
|
48
|
+
this.parentEpoch = parentEpoch;
|
|
49
|
+
this.onBlobAccumulatorSet = onBlobAccumulatorSet;
|
|
50
|
+
this.blocks = [];
|
|
51
|
+
this.blockProofs = new UnbalancedTreeStore(totalNumBlocks);
|
|
52
|
+
this.firstBlockNumber = BlockNumber(headerOfLastBlockInPreviousCheckpoint.globalVariables.blockNumber + 1);
|
|
53
|
+
}
|
|
54
|
+
get epochNumber() {
|
|
55
|
+
return this.parentEpoch.epochNumber;
|
|
56
|
+
}
|
|
57
|
+
startNewBlock(blockNumber, timestamp, totalNumTxs, lastArchiveTreeSnapshot, lastArchiveSiblingPath) {
|
|
58
|
+
const index = Number(blockNumber) - Number(this.firstBlockNumber);
|
|
59
|
+
if (index >= this.totalNumBlocks) {
|
|
60
|
+
throw new Error(`Unable to start a new block at index ${index}. Expected at most ${this.totalNumBlocks} blocks.`);
|
|
61
|
+
}
|
|
62
|
+
// If this is the first block, we use the snapshot and sibling path before the new l1 to l2 messages are inserted.
|
|
63
|
+
// Otherwise, we use the snapshot and sibling path after the new l1 to l2 messages are inserted, which will always
|
|
64
|
+
// happen in the first block.
|
|
65
|
+
const lastL1ToL2MessageTreeSnapshot = index === 0 ? this.lastL1ToL2MessageTreeSnapshot : this.newL1ToL2MessageTreeSnapshot;
|
|
66
|
+
const lastL1ToL2MessageSubtreeRootSiblingPath = index === 0 ? this.lastL1ToL2MessageSubtreeRootSiblingPath : this.newL1ToL2MessageSubtreeRootSiblingPath;
|
|
67
|
+
const startSpongeBlob = index === 0 ? SpongeBlob.init() : this.blocks[index - 1]?.getEndSpongeBlob();
|
|
68
|
+
if (!startSpongeBlob) {
|
|
69
|
+
throw new Error('Cannot start a new block before the trees have progressed from the tx effects in the previous block.');
|
|
70
|
+
}
|
|
71
|
+
const block = new BlockProvingState(index, blockNumber, totalNumTxs, this.constants, timestamp, lastArchiveTreeSnapshot, lastArchiveSiblingPath, lastL1ToL2MessageTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath, this.newL1ToL2MessageTreeSnapshot, this.headerOfLastBlockInPreviousCheckpoint, startSpongeBlob, this);
|
|
72
|
+
this.blocks[index] = block;
|
|
73
|
+
return block;
|
|
74
|
+
}
|
|
75
|
+
// Returns true if we are still able to accept blocks, false otherwise.
|
|
76
|
+
isAcceptingBlocks() {
|
|
77
|
+
return this.blocks.filter((b)=>!!b).length < this.totalNumBlocks;
|
|
78
|
+
}
|
|
79
|
+
setBlockRootRollupProof(blockIndex, provingOutput) {
|
|
80
|
+
return this.blockProofs.setLeaf(blockIndex, {
|
|
81
|
+
provingOutput
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
tryStartProvingBlockMerge(location) {
|
|
85
|
+
if (this.blockProofs.getNode(location)?.isProving) {
|
|
86
|
+
return false;
|
|
87
|
+
} else {
|
|
88
|
+
this.blockProofs.setNode(location, {
|
|
89
|
+
isProving: true
|
|
90
|
+
});
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
setBlockMergeRollupProof(location, provingOutput) {
|
|
95
|
+
this.blockProofs.setNode(location, {
|
|
96
|
+
provingOutput
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
tryStartProvingCheckpointRoot() {
|
|
100
|
+
if (this.checkpointRootProof?.isProving) {
|
|
101
|
+
return false;
|
|
102
|
+
} else {
|
|
103
|
+
this.checkpointRootProof = {
|
|
104
|
+
isProving: true
|
|
105
|
+
};
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
setCheckpointRootRollupProof(provingOutput) {
|
|
110
|
+
this.checkpointRootProof = {
|
|
111
|
+
provingOutput
|
|
112
|
+
};
|
|
113
|
+
return this.parentEpoch.setCheckpointRootRollupProof(this.index, provingOutput);
|
|
114
|
+
}
|
|
115
|
+
getBaseParityInputs(baseParityIndex) {
|
|
116
|
+
const messages = padArrayEnd(this.l1ToL2Messages.slice(baseParityIndex * NUM_MSGS_PER_BASE_PARITY, (baseParityIndex + 1) * NUM_MSGS_PER_BASE_PARITY), Fr.ZERO, NUM_MSGS_PER_BASE_PARITY);
|
|
117
|
+
return new ParityBasePrivateInputs(messages, this.constants.vkTreeRoot);
|
|
118
|
+
}
|
|
119
|
+
async accumulateBlobs(startBlobAccumulator) {
|
|
120
|
+
if (this.isAcceptingBlocks() || this.blocks.some((b)=>!b?.hasEndState())) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
this.blobFields = encodeCheckpointBlobDataFromBlocks(this.blocks.map((b)=>b.getBlockBlobData()));
|
|
124
|
+
this.endBlobAccumulator = await accumulateBlobs(this.blobFields, startBlobAccumulator);
|
|
125
|
+
this.startBlobAccumulator = startBlobAccumulator;
|
|
126
|
+
this.onBlobAccumulatorSet(this);
|
|
127
|
+
return this.endBlobAccumulator;
|
|
128
|
+
}
|
|
129
|
+
getEndBlobAccumulator() {
|
|
130
|
+
return this.endBlobAccumulator;
|
|
131
|
+
}
|
|
132
|
+
getParentLocation(location) {
|
|
133
|
+
return this.blockProofs.getParentLocation(location);
|
|
134
|
+
}
|
|
135
|
+
getBlockMergeRollupInputs(mergeLocation) {
|
|
136
|
+
const [left, right] = this.blockProofs.getChildren(mergeLocation).map((c)=>c?.provingOutput);
|
|
137
|
+
if (!left || !right) {
|
|
138
|
+
throw new Error('At least one child is not ready for the block merge rollup.');
|
|
139
|
+
}
|
|
140
|
+
return new BlockMergeRollupPrivateInputs([
|
|
141
|
+
toProofData(left),
|
|
142
|
+
toProofData(right)
|
|
143
|
+
]);
|
|
144
|
+
}
|
|
145
|
+
getCheckpointRootRollupType() {
|
|
146
|
+
return this.totalNumBlocks === 1 ? 'rollup-checkpoint-root-single-block' : 'rollup-checkpoint-root';
|
|
147
|
+
}
|
|
148
|
+
getCheckpointRootRollupInputs() {
|
|
149
|
+
const proofs = this.#getChildProofsForRoot();
|
|
150
|
+
const nonEmptyProofs = proofs.filter((p)=>!!p);
|
|
151
|
+
if (proofs.length !== nonEmptyProofs.length) {
|
|
152
|
+
throw new Error('At least one child is not ready for the checkpoint root rollup.');
|
|
153
|
+
}
|
|
154
|
+
if (!this.startBlobAccumulator) {
|
|
155
|
+
throw new Error('Start blob accumulator is not set.');
|
|
156
|
+
}
|
|
157
|
+
// `blobFields` must've been set if `startBlobAccumulator` is set (in `accumulateBlobs`).
|
|
158
|
+
const blobFields = this.blobFields;
|
|
159
|
+
const { blobCommitments, blobsHash } = buildBlobHints(blobFields);
|
|
160
|
+
const hints = CheckpointRootRollupHints.from({
|
|
161
|
+
previousBlockHeader: this.headerOfLastBlockInPreviousCheckpoint,
|
|
162
|
+
previousArchiveSiblingPath: this.lastArchiveSiblingPath,
|
|
163
|
+
startBlobAccumulator: this.startBlobAccumulator.toBlobAccumulator(),
|
|
164
|
+
finalBlobChallenges: this.finalBlobBatchingChallenges,
|
|
165
|
+
blobFields: padArrayEnd(blobFields, Fr.ZERO, FIELDS_PER_BLOB * BLOBS_PER_CHECKPOINT),
|
|
166
|
+
blobCommitments: padArrayEnd(blobCommitments, BLS12Point.ZERO, BLOBS_PER_CHECKPOINT),
|
|
167
|
+
blobsHash
|
|
168
|
+
});
|
|
169
|
+
const [left, right] = nonEmptyProofs.map((p)=>toProofData(p));
|
|
170
|
+
return !right ? new CheckpointRootSingleBlockRollupPrivateInputs(left, hints) : new CheckpointRootRollupPrivateInputs([
|
|
171
|
+
left,
|
|
172
|
+
right
|
|
173
|
+
], hints);
|
|
174
|
+
}
|
|
175
|
+
getBlockProvingStateByBlockNumber(blockNumber) {
|
|
176
|
+
const index = Number(blockNumber) - Number(this.firstBlockNumber);
|
|
177
|
+
return this.blocks[index];
|
|
178
|
+
}
|
|
179
|
+
isReadyForBlockMerge(location) {
|
|
180
|
+
return !!this.blockProofs.getSibling(location)?.provingOutput;
|
|
181
|
+
}
|
|
182
|
+
isReadyForCheckpointRoot() {
|
|
183
|
+
const allChildProofsReady = this.#getChildProofsForRoot().every((p)=>!!p);
|
|
184
|
+
return allChildProofsReady && !!this.startBlobAccumulator;
|
|
185
|
+
}
|
|
186
|
+
verifyState() {
|
|
187
|
+
return this.parentEpoch.verifyState();
|
|
188
|
+
}
|
|
189
|
+
getError() {
|
|
190
|
+
return this.error;
|
|
191
|
+
}
|
|
192
|
+
// Attempts to reject the proving state promise with a reason of 'cancelled'
|
|
193
|
+
cancel() {
|
|
194
|
+
this.reject('Proving cancelled');
|
|
195
|
+
}
|
|
196
|
+
reject(reason) {
|
|
197
|
+
this.error = reason;
|
|
198
|
+
this.parentEpoch.reject(reason);
|
|
199
|
+
}
|
|
200
|
+
#getChildProofsForRoot() {
|
|
201
|
+
const rootLocation = {
|
|
202
|
+
level: 0,
|
|
203
|
+
index: 0
|
|
204
|
+
};
|
|
205
|
+
return this.totalNumBlocks === 1 ? [
|
|
206
|
+
this.blockProofs.getNode(rootLocation)?.provingOutput
|
|
207
|
+
] // If there's only 1 block, its proof will be stored at the root.
|
|
208
|
+
: this.blockProofs.getChildren(rootLocation).map((c)=>c?.provingOutput);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { BatchedBlob, type FinalBlobBatchingChallenges } from '@aztec/blob-lib';
|
|
2
|
-
import type { ARCHIVE_HEIGHT,
|
|
3
|
-
import
|
|
4
|
-
import type { Fr } from '@aztec/foundation/
|
|
2
|
+
import type { ARCHIVE_HEIGHT, L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
|
|
3
|
+
import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import type { Tuple } from '@aztec/foundation/serialize';
|
|
6
6
|
import { type TreeNodeLocation } from '@aztec/foundation/trees';
|
|
7
|
-
import type {
|
|
7
|
+
import type { PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
|
|
8
8
|
import type { Proof } from '@aztec/stdlib/proofs';
|
|
9
|
-
import {
|
|
9
|
+
import { CheckpointConstantData, CheckpointMergeRollupPrivateInputs, CheckpointPaddingRollupPrivateInputs, CheckpointRollupPublicInputs, PublicChonkVerifierPublicInputs, RootRollupPrivateInputs, type RootRollupPublicInputs } from '@aztec/stdlib/rollup';
|
|
10
10
|
import type { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
11
|
-
import type { BlockHeader
|
|
12
|
-
import {
|
|
11
|
+
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
12
|
+
import { CheckpointProvingState } from './checkpoint-proving-state.js';
|
|
13
13
|
export type TreeSnapshots = Map<MerkleTreeId, AppendOnlyTreeSnapshot>;
|
|
14
14
|
export type ProvingResult = {
|
|
15
15
|
status: 'success';
|
|
@@ -25,43 +25,50 @@ export type ProvingResult = {
|
|
|
25
25
|
*/
|
|
26
26
|
export declare class EpochProvingState {
|
|
27
27
|
#private;
|
|
28
|
-
readonly epochNumber:
|
|
29
|
-
readonly
|
|
30
|
-
readonly
|
|
31
|
-
|
|
28
|
+
readonly epochNumber: EpochNumber;
|
|
29
|
+
readonly totalNumCheckpoints: number;
|
|
30
|
+
private readonly finalBlobBatchingChallenges;
|
|
31
|
+
private onCheckpointBlobAccumulatorSet;
|
|
32
32
|
private completionCallback;
|
|
33
33
|
private rejectionCallback;
|
|
34
|
-
private
|
|
35
|
-
private
|
|
36
|
-
private
|
|
34
|
+
private checkpointProofs;
|
|
35
|
+
private checkpointPaddingProof;
|
|
36
|
+
private rootRollupProof;
|
|
37
|
+
private checkpoints;
|
|
38
|
+
private startBlobAccumulator;
|
|
39
|
+
private endBlobAccumulator;
|
|
37
40
|
private finalBatchedBlob;
|
|
38
41
|
private provingStateLifecycle;
|
|
39
|
-
readonly
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
readonly cachedChonkVerifierProofs: Map<string, Promise<PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, 531>>>;
|
|
43
|
+
constructor(epochNumber: EpochNumber, totalNumCheckpoints: number, finalBlobBatchingChallenges: FinalBlobBatchingChallenges, onCheckpointBlobAccumulatorSet: (checkpoint: CheckpointProvingState) => void, completionCallback: (result: ProvingResult) => void, rejectionCallback: (reason: string) => void);
|
|
44
|
+
startNewCheckpoint(checkpointIndex: number, constants: CheckpointConstantData, totalNumBlocks: number, previousBlockHeader: BlockHeader, lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, l1ToL2Messages: Fr[], lastL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>, newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, newL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>): CheckpointProvingState;
|
|
45
|
+
getCheckpointProvingState(index: number): CheckpointProvingState | undefined;
|
|
46
|
+
getCheckpointProvingStateByBlockNumber(blockNumber: BlockNumber): CheckpointProvingState | undefined;
|
|
47
|
+
getBlockProvingStateByBlockNumber(blockNumber: BlockNumber): import("./block-proving-state.js").BlockProvingState | undefined;
|
|
43
48
|
verifyState(): boolean;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
isAcceptingCheckpoints(): boolean;
|
|
50
|
+
setCheckpointRootRollupProof(checkpointIndex: number, provingOutput: PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): TreeNodeLocation;
|
|
51
|
+
tryStartProvingCheckpointMerge(location: TreeNodeLocation): boolean;
|
|
52
|
+
setCheckpointMergeRollupProof(location: TreeNodeLocation, provingOutput: PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): void;
|
|
53
|
+
tryStartProvingRootRollup(): boolean;
|
|
54
|
+
setRootRollupProof(provingOutput: PublicInputsAndRecursiveProof<RootRollupPublicInputs>): void;
|
|
55
|
+
tryStartProvingPaddingCheckpoint(): boolean;
|
|
56
|
+
setCheckpointPaddingProof(provingOutput: PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): void;
|
|
57
|
+
setBlobAccumulators(): Promise<void>;
|
|
58
|
+
finalizeBatchedBlob(): Promise<void>;
|
|
51
59
|
getParentLocation(location: TreeNodeLocation): TreeNodeLocation;
|
|
52
|
-
|
|
53
|
-
getRootRollupInputs():
|
|
54
|
-
|
|
55
|
-
getBlockProvingStateByBlockNumber(blockNumber: number): BlockProvingState | undefined;
|
|
60
|
+
getCheckpointMergeRollupInputs(mergeLocation: TreeNodeLocation): CheckpointMergeRollupPrivateInputs;
|
|
61
|
+
getRootRollupInputs(): RootRollupPrivateInputs;
|
|
62
|
+
getPaddingCheckpointInputs(): CheckpointPaddingRollupPrivateInputs;
|
|
56
63
|
getEpochProofResult(): {
|
|
57
64
|
proof: Proof;
|
|
58
65
|
publicInputs: RootRollupPublicInputs;
|
|
59
66
|
batchedBlobInputs: BatchedBlob;
|
|
60
67
|
};
|
|
61
|
-
|
|
68
|
+
isReadyForCheckpointMerge(location: TreeNodeLocation): boolean;
|
|
62
69
|
isReadyForRootRollup(): boolean;
|
|
63
70
|
cancel(): void;
|
|
64
71
|
reject(reason: string): void;
|
|
65
72
|
resolve(result: ProvingResult): void;
|
|
66
73
|
}
|
|
67
|
-
//# sourceMappingURL=
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1zdGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9lcG9jaC1wcm92aW5nLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQTBCLEtBQUssMkJBQTJCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RyxPQUFPLEtBQUssRUFDVixjQUFjLEVBQ2QsNkNBQTZDLEVBRTdDLHlDQUF5QyxFQUMxQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQXVCLE1BQU0seUJBQXlCLENBQUM7QUFDckYsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtDQUFrQyxFQUNsQyxvQ0FBb0MsRUFDcEMsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQix1QkFBdUIsRUFDdkIsS0FBSyxzQkFBc0IsRUFDNUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUlwRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RSxNQUFNLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxZQUFZ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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/epoch-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"epoch-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/epoch-proving-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { BatchedBlobAccumulator } from '@aztec/blob-lib';
|
|
1
2
|
import { UnbalancedTreeStore } from '@aztec/foundation/trees';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { BlockProvingState } from './block-proving-state.js';
|
|
3
|
+
import { CheckpointMergeRollupPrivateInputs, CheckpointPaddingRollupPrivateInputs, RootRollupPrivateInputs } from '@aztec/stdlib/rollup';
|
|
4
|
+
import { toProofData } from './block-building-helpers.js';
|
|
5
|
+
import { CheckpointProvingState } from './checkpoint-proving-state.js';
|
|
6
6
|
var PROVING_STATE_LIFECYCLE = /*#__PURE__*/ function(PROVING_STATE_LIFECYCLE) {
|
|
7
7
|
PROVING_STATE_LIFECYCLE[PROVING_STATE_LIFECYCLE["PROVING_STATE_CREATED"] = 0] = "PROVING_STATE_CREATED";
|
|
8
8
|
PROVING_STATE_LIFECYCLE[PROVING_STATE_LIFECYCLE["PROVING_STATE_FULL"] = 1] = "PROVING_STATE_FULL";
|
|
@@ -17,131 +17,180 @@ var PROVING_STATE_LIFECYCLE = /*#__PURE__*/ function(PROVING_STATE_LIFECYCLE) {
|
|
|
17
17
|
* Captures resolve and reject callbacks to provide a promise base interface to the consumer of our proving.
|
|
18
18
|
*/ export class EpochProvingState {
|
|
19
19
|
epochNumber;
|
|
20
|
-
|
|
21
|
-
totalNumBlocks;
|
|
20
|
+
totalNumCheckpoints;
|
|
22
21
|
finalBlobBatchingChallenges;
|
|
22
|
+
onCheckpointBlobAccumulatorSet;
|
|
23
23
|
completionCallback;
|
|
24
24
|
rejectionCallback;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
checkpointProofs;
|
|
26
|
+
checkpointPaddingProof;
|
|
27
|
+
rootRollupProof;
|
|
28
|
+
checkpoints;
|
|
29
|
+
startBlobAccumulator;
|
|
30
|
+
endBlobAccumulator;
|
|
28
31
|
finalBatchedBlob;
|
|
29
32
|
provingStateLifecycle;
|
|
30
|
-
// Map from tx hash to
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
constructor(epochNumber, firstBlockNumber, totalNumBlocks, finalBlobBatchingChallenges, completionCallback, rejectionCallback){
|
|
33
|
+
// Map from tx hash to chonk verifier proof promise. Used when kickstarting chonk verifier proofs before tx processing.
|
|
34
|
+
cachedChonkVerifierProofs;
|
|
35
|
+
constructor(epochNumber, totalNumCheckpoints, finalBlobBatchingChallenges, onCheckpointBlobAccumulatorSet, completionCallback, rejectionCallback){
|
|
34
36
|
this.epochNumber = epochNumber;
|
|
35
|
-
this.
|
|
36
|
-
this.totalNumBlocks = totalNumBlocks;
|
|
37
|
+
this.totalNumCheckpoints = totalNumCheckpoints;
|
|
37
38
|
this.finalBlobBatchingChallenges = finalBlobBatchingChallenges;
|
|
39
|
+
this.onCheckpointBlobAccumulatorSet = onCheckpointBlobAccumulatorSet;
|
|
38
40
|
this.completionCallback = completionCallback;
|
|
39
41
|
this.rejectionCallback = rejectionCallback;
|
|
42
|
+
this.checkpoints = [];
|
|
40
43
|
this.provingStateLifecycle = 0;
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
44
|
+
this.cachedChonkVerifierProofs = new Map();
|
|
45
|
+
this.checkpointProofs = new UnbalancedTreeStore(totalNumCheckpoints);
|
|
46
|
+
this.startBlobAccumulator = BatchedBlobAccumulator.newWithChallenges(finalBlobBatchingChallenges);
|
|
44
47
|
}
|
|
45
48
|
// Adds a block to the proving state, returns its index
|
|
46
49
|
// Will update the proving life cycle if this is the last block
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
startNewCheckpoint(checkpointIndex, constants, totalNumBlocks, previousBlockHeader, lastArchiveSiblingPath, l1ToL2Messages, lastL1ToL2MessageTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath, newL1ToL2MessageTreeSnapshot, newL1ToL2MessageSubtreeRootSiblingPath) {
|
|
51
|
+
if (checkpointIndex >= this.totalNumCheckpoints) {
|
|
52
|
+
throw new Error(`Unable to start a new checkpoint at index ${checkpointIndex}. Expected at most ${this.totalNumCheckpoints} checkpoints.`);
|
|
53
|
+
}
|
|
54
|
+
const checkpoint = new CheckpointProvingState(checkpointIndex, constants, totalNumBlocks, this.finalBlobBatchingChallenges, previousBlockHeader, lastArchiveSiblingPath, l1ToL2Messages, lastL1ToL2MessageTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath, newL1ToL2MessageTreeSnapshot, newL1ToL2MessageSubtreeRootSiblingPath, this, this.onCheckpointBlobAccumulatorSet);
|
|
55
|
+
this.checkpoints[checkpointIndex] = checkpoint;
|
|
56
|
+
if (this.checkpoints.filter((c)=>!!c).length === this.totalNumCheckpoints) {
|
|
52
57
|
this.provingStateLifecycle = 1;
|
|
53
58
|
}
|
|
54
|
-
return
|
|
59
|
+
return checkpoint;
|
|
60
|
+
}
|
|
61
|
+
getCheckpointProvingState(index) {
|
|
62
|
+
return this.checkpoints[index];
|
|
63
|
+
}
|
|
64
|
+
getCheckpointProvingStateByBlockNumber(blockNumber) {
|
|
65
|
+
return this.checkpoints.find((c)=>c && Number(blockNumber) >= Number(c.firstBlockNumber) && Number(blockNumber) < Number(c.firstBlockNumber) + c.totalNumBlocks);
|
|
66
|
+
}
|
|
67
|
+
getBlockProvingStateByBlockNumber(blockNumber) {
|
|
68
|
+
return this.getCheckpointProvingStateByBlockNumber(blockNumber)?.getBlockProvingStateByBlockNumber(blockNumber);
|
|
55
69
|
}
|
|
56
70
|
// Returns true if this proving state is still valid, false otherwise
|
|
57
71
|
verifyState() {
|
|
58
72
|
return this.provingStateLifecycle === 0 || this.provingStateLifecycle === 1;
|
|
59
73
|
}
|
|
60
|
-
// Returns true if we are still able to accept
|
|
61
|
-
|
|
62
|
-
return this.
|
|
74
|
+
// Returns true if we are still able to accept checkpoints, false otherwise.
|
|
75
|
+
isAcceptingCheckpoints() {
|
|
76
|
+
return this.checkpoints.filter((c)=>!!c).length < this.totalNumCheckpoints;
|
|
63
77
|
}
|
|
64
|
-
|
|
65
|
-
return this.
|
|
78
|
+
setCheckpointRootRollupProof(checkpointIndex, provingOutput) {
|
|
79
|
+
return this.checkpointProofs.setLeaf(checkpointIndex, {
|
|
80
|
+
provingOutput
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
tryStartProvingCheckpointMerge(location) {
|
|
84
|
+
if (this.checkpointProofs.getNode(location)?.isProving) {
|
|
85
|
+
return false;
|
|
86
|
+
} else {
|
|
87
|
+
this.checkpointProofs.setNode(location, {
|
|
88
|
+
isProving: true
|
|
89
|
+
});
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
setCheckpointMergeRollupProof(location, provingOutput) {
|
|
94
|
+
this.checkpointProofs.setNode(location, {
|
|
95
|
+
provingOutput
|
|
96
|
+
});
|
|
66
97
|
}
|
|
67
|
-
|
|
68
|
-
this.
|
|
98
|
+
tryStartProvingRootRollup() {
|
|
99
|
+
if (this.rootRollupProof?.isProving) {
|
|
100
|
+
return false;
|
|
101
|
+
} else {
|
|
102
|
+
this.rootRollupProof = {
|
|
103
|
+
isProving: true
|
|
104
|
+
};
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
69
107
|
}
|
|
70
|
-
setRootRollupProof(
|
|
71
|
-
this.
|
|
108
|
+
setRootRollupProof(provingOutput) {
|
|
109
|
+
this.rootRollupProof = {
|
|
110
|
+
provingOutput
|
|
111
|
+
};
|
|
72
112
|
}
|
|
73
|
-
|
|
74
|
-
this.
|
|
113
|
+
tryStartProvingPaddingCheckpoint() {
|
|
114
|
+
if (this.checkpointPaddingProof?.isProving) {
|
|
115
|
+
return false;
|
|
116
|
+
} else {
|
|
117
|
+
this.checkpointPaddingProof = {
|
|
118
|
+
isProving: true
|
|
119
|
+
};
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
75
122
|
}
|
|
76
|
-
|
|
77
|
-
this.
|
|
123
|
+
setCheckpointPaddingProof(provingOutput) {
|
|
124
|
+
this.checkpointPaddingProof = {
|
|
125
|
+
provingOutput
|
|
126
|
+
};
|
|
78
127
|
}
|
|
79
|
-
async setBlobAccumulators(
|
|
80
|
-
let previousAccumulator;
|
|
81
|
-
const end = toBlock ? toBlock - this.firstBlockNumber : this.blocks.length;
|
|
128
|
+
async setBlobAccumulators() {
|
|
129
|
+
let previousAccumulator = this.startBlobAccumulator;
|
|
82
130
|
// Accumulate blobs as far as we can for this epoch.
|
|
83
|
-
for(let i = 0; i
|
|
84
|
-
const
|
|
85
|
-
if (!
|
|
131
|
+
for(let i = 0; i < this.totalNumCheckpoints; i++){
|
|
132
|
+
const checkpoint = this.checkpoints[i];
|
|
133
|
+
if (!checkpoint) {
|
|
86
134
|
break;
|
|
87
135
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
136
|
+
const endAccumulator = checkpoint.getEndBlobAccumulator() || await checkpoint.accumulateBlobs(previousAccumulator);
|
|
137
|
+
if (!endAccumulator) {
|
|
138
|
+
break;
|
|
91
139
|
}
|
|
92
|
-
|
|
93
|
-
|
|
140
|
+
previousAccumulator = endAccumulator;
|
|
141
|
+
// If this is the last checkpoint, set the end blob accumulator.
|
|
142
|
+
if (i === this.totalNumCheckpoints - 1) {
|
|
143
|
+
this.endBlobAccumulator = endAccumulator;
|
|
94
144
|
}
|
|
95
|
-
previousAccumulator = block.endBlobAccumulator;
|
|
96
145
|
}
|
|
97
146
|
}
|
|
147
|
+
async finalizeBatchedBlob() {
|
|
148
|
+
if (!this.endBlobAccumulator) {
|
|
149
|
+
throw new Error('End blob accumulator not ready.');
|
|
150
|
+
}
|
|
151
|
+
this.finalBatchedBlob = await this.endBlobAccumulator.finalize(true);
|
|
152
|
+
}
|
|
98
153
|
getParentLocation(location) {
|
|
99
|
-
return this.
|
|
154
|
+
return this.checkpointProofs.getParentLocation(location);
|
|
100
155
|
}
|
|
101
|
-
|
|
102
|
-
const [left, right] = this.
|
|
156
|
+
getCheckpointMergeRollupInputs(mergeLocation) {
|
|
157
|
+
const [left, right] = this.checkpointProofs.getChildren(mergeLocation).map((c)=>c?.provingOutput);
|
|
103
158
|
if (!left || !right) {
|
|
104
|
-
throw new Error('At
|
|
159
|
+
throw new Error('At least one child is not ready for the checkpoint merge rollup.');
|
|
105
160
|
}
|
|
106
|
-
return new
|
|
107
|
-
|
|
108
|
-
|
|
161
|
+
return new CheckpointMergeRollupPrivateInputs([
|
|
162
|
+
toProofData(left),
|
|
163
|
+
toProofData(right)
|
|
109
164
|
]);
|
|
110
165
|
}
|
|
111
166
|
getRootRollupInputs() {
|
|
112
167
|
const [left, right] = this.#getChildProofsForRoot();
|
|
113
168
|
if (!left || !right) {
|
|
114
|
-
throw new Error('At
|
|
169
|
+
throw new Error('At least one child is not ready for the root rollup.');
|
|
115
170
|
}
|
|
116
|
-
return
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
171
|
+
return RootRollupPrivateInputs.from({
|
|
172
|
+
previousRollups: [
|
|
173
|
+
toProofData(left),
|
|
174
|
+
toProofData(right)
|
|
120
175
|
]
|
|
121
176
|
});
|
|
122
177
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
throw new Error('Epoch needs one completed block in order to be padded.');
|
|
126
|
-
}
|
|
127
|
-
return this.blocks[0].getPaddingBlockRootInputs();
|
|
128
|
-
}
|
|
129
|
-
// Returns a specific transaction proving state
|
|
130
|
-
getBlockProvingStateByBlockNumber(blockNumber) {
|
|
131
|
-
return this.blocks.find((block)=>block?.blockNumber === blockNumber);
|
|
178
|
+
getPaddingCheckpointInputs() {
|
|
179
|
+
return new CheckpointPaddingRollupPrivateInputs();
|
|
132
180
|
}
|
|
133
181
|
getEpochProofResult() {
|
|
134
|
-
|
|
182
|
+
const provingOutput = this.rootRollupProof?.provingOutput;
|
|
183
|
+
if (!provingOutput || !this.finalBatchedBlob) {
|
|
135
184
|
throw new Error('Unable to get epoch proof result. Root rollup is not ready.');
|
|
136
185
|
}
|
|
137
186
|
return {
|
|
138
|
-
proof:
|
|
139
|
-
publicInputs:
|
|
187
|
+
proof: provingOutput.proof.binaryProof,
|
|
188
|
+
publicInputs: provingOutput.inputs,
|
|
140
189
|
batchedBlobInputs: this.finalBatchedBlob
|
|
141
190
|
};
|
|
142
191
|
}
|
|
143
|
-
|
|
144
|
-
return this.
|
|
192
|
+
isReadyForCheckpointMerge(location) {
|
|
193
|
+
return !!this.checkpointProofs.getSibling(location)?.provingOutput;
|
|
145
194
|
}
|
|
146
195
|
// Returns true if we have sufficient inputs to execute the block root rollup
|
|
147
196
|
isReadyForRootRollup() {
|
|
@@ -176,14 +225,9 @@ var PROVING_STATE_LIFECYCLE = /*#__PURE__*/ function(PROVING_STATE_LIFECYCLE) {
|
|
|
176
225
|
index: 0
|
|
177
226
|
};
|
|
178
227
|
// If there's only 1 block, its block root proof will be stored at the root.
|
|
179
|
-
return this.
|
|
180
|
-
this.
|
|
181
|
-
this.
|
|
182
|
-
] : this.
|
|
183
|
-
}
|
|
184
|
-
#getPreviousRollupData({ inputs, proof, verificationKey }) {
|
|
185
|
-
const leafIndex = getVKIndex(verificationKey.keyAsFields);
|
|
186
|
-
const vkData = new VkData(verificationKey, leafIndex, getVKSiblingPath(leafIndex));
|
|
187
|
-
return new PreviousRollupBlockData(inputs, proof, vkData);
|
|
228
|
+
return this.totalNumCheckpoints === 1 ? [
|
|
229
|
+
this.checkpointProofs.getNode(rootLocation)?.provingOutput,
|
|
230
|
+
this.checkpointPaddingProof?.provingOutput
|
|
231
|
+
] : this.checkpointProofs.getChildren(rootLocation).map((c)=>c?.provingOutput);
|
|
188
232
|
}
|
|
189
233
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { ProvingOrchestrator } from './orchestrator.js';
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUMifQ==
|