@aztec/prover-client 3.0.0-canary.a9708bd → 3.0.0-manual.20251030

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dest/block-factory/light.d.ts +5 -3
  2. package/dest/block-factory/light.d.ts.map +1 -1
  3. package/dest/block-factory/light.js +16 -9
  4. package/dest/config.js +1 -1
  5. package/dest/mocks/fixtures.d.ts +4 -1
  6. package/dest/mocks/fixtures.d.ts.map +1 -1
  7. package/dest/mocks/fixtures.js +31 -3
  8. package/dest/mocks/test_context.d.ts +32 -9
  9. package/dest/mocks/test_context.d.ts.map +1 -1
  10. package/dest/mocks/test_context.js +78 -22
  11. package/dest/orchestrator/block-building-helpers.d.ts +33 -31
  12. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  13. package/dest/orchestrator/block-building-helpers.js +126 -137
  14. package/dest/orchestrator/block-proving-state.d.ts +60 -53
  15. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  16. package/dest/orchestrator/block-proving-state.js +214 -187
  17. package/dest/orchestrator/checkpoint-proving-state.d.ts +63 -0
  18. package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
  19. package/dest/orchestrator/checkpoint-proving-state.js +211 -0
  20. package/dest/orchestrator/epoch-proving-state.d.ts +34 -28
  21. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  22. package/dest/orchestrator/epoch-proving-state.js +128 -84
  23. package/dest/orchestrator/orchestrator.d.ts +31 -30
  24. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  25. package/dest/orchestrator/orchestrator.js +368 -236
  26. package/dest/orchestrator/tx-proving-state.d.ts +11 -9
  27. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  28. package/dest/orchestrator/tx-proving-state.js +26 -23
  29. package/dest/prover-client/server-epoch-prover.d.ts +9 -8
  30. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
  31. package/dest/prover-client/server-epoch-prover.js +9 -9
  32. package/dest/proving_broker/broker_prover_facade.d.ts +20 -15
  33. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  34. package/dest/proving_broker/broker_prover_facade.js +36 -21
  35. package/dest/proving_broker/config.d.ts +8 -8
  36. package/dest/proving_broker/config.js +5 -5
  37. package/dest/proving_broker/factory.js +1 -1
  38. package/dest/proving_broker/fixtures.js +1 -1
  39. package/dest/proving_broker/proof_store/index.d.ts +1 -0
  40. package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
  41. package/dest/proving_broker/proof_store/index.js +1 -0
  42. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  43. package/dest/proving_broker/proving_broker.js +29 -18
  44. package/dest/proving_broker/proving_broker_database/persisted.js +5 -5
  45. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  46. package/dest/proving_broker/proving_job_controller.js +38 -18
  47. package/dest/test/mock_prover.d.ts +22 -17
  48. package/dest/test/mock_prover.d.ts.map +1 -1
  49. package/dest/test/mock_prover.js +35 -20
  50. package/package.json +16 -17
  51. package/src/block-factory/light.ts +35 -9
  52. package/src/config.ts +1 -1
  53. package/src/mocks/fixtures.ts +39 -11
  54. package/src/mocks/test_context.ts +137 -31
  55. package/src/orchestrator/block-building-helpers.ts +211 -211
  56. package/src/orchestrator/block-proving-state.ts +235 -245
  57. package/src/orchestrator/checkpoint-proving-state.ts +299 -0
  58. package/src/orchestrator/epoch-proving-state.ts +172 -127
  59. package/src/orchestrator/orchestrator.ts +545 -303
  60. package/src/orchestrator/tx-proving-state.ts +49 -43
  61. package/src/prover-client/server-epoch-prover.ts +28 -18
  62. package/src/proving_broker/broker_prover_facade.ts +157 -86
  63. package/src/proving_broker/config.ts +7 -7
  64. package/src/proving_broker/factory.ts +1 -1
  65. package/src/proving_broker/fixtures.ts +1 -1
  66. package/src/proving_broker/proof_store/index.ts +1 -0
  67. package/src/proving_broker/proving_broker.ts +36 -18
  68. package/src/proving_broker/proving_broker_database/persisted.ts +5 -5
  69. package/src/proving_broker/proving_job_controller.ts +38 -18
  70. package/src/test/mock_prover.ts +142 -60
  71. package/dest/bin/get-proof-inputs.d.ts +0 -2
  72. package/dest/bin/get-proof-inputs.d.ts.map +0 -1
  73. package/dest/bin/get-proof-inputs.js +0 -51
  74. package/src/bin/get-proof-inputs.ts +0 -59
@@ -1,29 +1,30 @@
1
- import { BatchedBlob, type FinalBlobBatchingChallenges } from '@aztec/blob-lib';
1
+ import { BatchedBlob, BatchedBlobAccumulator, type FinalBlobBatchingChallenges } from '@aztec/blob-lib';
2
2
  import type {
3
3
  ARCHIVE_HEIGHT,
4
- L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH,
4
+ L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH,
5
+ NESTED_RECURSIVE_PROOF_LENGTH,
5
6
  NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
6
- TUBE_PROOF_LENGTH,
7
7
  } from '@aztec/constants';
8
- import type { EthAddress } from '@aztec/foundation/eth-address';
9
8
  import type { Fr } from '@aztec/foundation/fields';
10
9
  import type { Tuple } from '@aztec/foundation/serialize';
11
10
  import { type TreeNodeLocation, UnbalancedTreeStore } from '@aztec/foundation/trees';
12
- import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
13
- import type { ProofAndVerificationKey, PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
11
+ import type { PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
14
12
  import type { Proof } from '@aztec/stdlib/proofs';
15
13
  import {
16
- BlockMergeRollupInputs,
17
- type BlockRootOrBlockMergePublicInputs,
18
- PreviousRollupBlockData,
19
- RootRollupInputs,
14
+ CheckpointConstantData,
15
+ CheckpointMergeRollupPrivateInputs,
16
+ CheckpointPaddingRollupPrivateInputs,
17
+ CheckpointRollupPublicInputs,
18
+ PublicChonkVerifierPublicInputs,
19
+ RootRollupPrivateInputs,
20
20
  type RootRollupPublicInputs,
21
21
  } from '@aztec/stdlib/rollup';
22
22
  import type { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
23
- import type { BlockHeader, GlobalVariables } from '@aztec/stdlib/tx';
24
- import { VkData } from '@aztec/stdlib/vks';
23
+ import type { BlockHeader } from '@aztec/stdlib/tx';
25
24
 
26
- import { BlockProvingState } from './block-proving-state.js';
25
+ import { toProofData } from './block-building-helpers.js';
26
+ import type { ProofState } from './block-proving-state.js';
27
+ import { CheckpointProvingState } from './checkpoint-proving-state.js';
27
28
 
28
29
  export type TreeSnapshots = Map<MerkleTreeId, AppendOnlyTreeSnapshot>;
29
30
 
@@ -43,66 +44,97 @@ export type ProvingResult = { status: 'success' } | { status: 'failure'; reason:
43
44
  * Captures resolve and reject callbacks to provide a promise base interface to the consumer of our proving.
44
45
  */
45
46
  export class EpochProvingState {
46
- private blockRootOrMergeProvingOutputs: UnbalancedTreeStore<
47
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
47
+ private checkpointProofs: UnbalancedTreeStore<
48
+ ProofState<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
48
49
  >;
49
- private paddingBlockRootProvingOutput:
50
- | PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
50
+ private checkpointPaddingProof:
51
+ | ProofState<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
51
52
  | undefined;
52
- private rootRollupProvingOutput: PublicInputsAndRecursiveProof<RootRollupPublicInputs> | undefined;
53
+ private rootRollupProof: ProofState<RootRollupPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH> | undefined;
54
+ private checkpoints: (CheckpointProvingState | undefined)[] = [];
55
+ private startBlobAccumulator: BatchedBlobAccumulator;
56
+ private endBlobAccumulator: BatchedBlobAccumulator | undefined;
53
57
  private finalBatchedBlob: BatchedBlob | undefined;
54
58
  private provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED;
55
59
 
56
- // Map from tx hash to tube proof promise. Used when kickstarting tube proofs before tx processing.
57
- public readonly cachedTubeProofs = new Map<string, Promise<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>>>();
58
-
59
- public blocks: (BlockProvingState | undefined)[] = [];
60
+ // Map from tx hash to chonk verifier proof promise. Used when kickstarting chonk verifier proofs before tx processing.
61
+ public readonly cachedChonkVerifierProofs = new Map<
62
+ string,
63
+ Promise<
64
+ PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
65
+ >
66
+ >();
60
67
 
61
68
  constructor(
62
69
  public readonly epochNumber: number,
63
- public readonly firstBlockNumber: number,
64
- public readonly totalNumBlocks: number,
65
- public readonly finalBlobBatchingChallenges: FinalBlobBatchingChallenges,
70
+ public readonly totalNumCheckpoints: number,
71
+ private readonly finalBlobBatchingChallenges: FinalBlobBatchingChallenges,
72
+ private onCheckpointBlobAccumulatorSet: (checkpoint: CheckpointProvingState) => void,
66
73
  private completionCallback: (result: ProvingResult) => void,
67
74
  private rejectionCallback: (reason: string) => void,
68
75
  ) {
69
- this.blockRootOrMergeProvingOutputs = new UnbalancedTreeStore(totalNumBlocks);
76
+ this.checkpointProofs = new UnbalancedTreeStore(totalNumCheckpoints);
77
+ this.startBlobAccumulator = BatchedBlobAccumulator.newWithChallenges(finalBlobBatchingChallenges);
70
78
  }
71
79
 
72
80
  // Adds a block to the proving state, returns its index
73
81
  // Will update the proving life cycle if this is the last block
74
- public startNewBlock(
75
- globalVariables: GlobalVariables,
76
- l1ToL2Messages: Fr[],
77
- l1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot,
78
- l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>,
79
- l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot,
80
- lastArchiveSnapshot: AppendOnlyTreeSnapshot,
81
- lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
82
- newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
82
+ public startNewCheckpoint(
83
+ checkpointIndex: number,
84
+ constants: CheckpointConstantData,
85
+ totalNumBlocks: number,
86
+ totalNumBlobFields: number,
83
87
  previousBlockHeader: BlockHeader,
84
- proverId: EthAddress,
85
- ): BlockProvingState {
86
- const index = globalVariables.blockNumber - this.firstBlockNumber;
87
- const block = new BlockProvingState(
88
- index,
89
- globalVariables,
90
- l1ToL2Messages,
91
- l1ToL2MessageTreeSnapshot,
92
- l1ToL2MessageSubtreeSiblingPath,
93
- l1ToL2MessageTreeSnapshotAfterInsertion,
94
- lastArchiveSnapshot,
95
- lastArchiveSiblingPath,
96
- newArchiveSiblingPath,
88
+ lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
89
+ l1ToL2Messages: Fr[],
90
+ lastL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot,
91
+ lastL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>,
92
+ newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot,
93
+ newL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>,
94
+ ): CheckpointProvingState {
95
+ if (checkpointIndex >= this.totalNumCheckpoints) {
96
+ throw new Error(
97
+ `Unable to start a new checkpoint at index ${checkpointIndex}. Expected at most ${this.totalNumCheckpoints} checkpoints.`,
98
+ );
99
+ }
100
+
101
+ const checkpoint = new CheckpointProvingState(
102
+ checkpointIndex,
103
+ constants,
104
+ totalNumBlocks,
105
+ totalNumBlobFields,
106
+ this.finalBlobBatchingChallenges,
97
107
  previousBlockHeader,
98
- proverId,
108
+ lastArchiveSiblingPath,
109
+ l1ToL2Messages,
110
+ lastL1ToL2MessageTreeSnapshot,
111
+ lastL1ToL2MessageSubtreeRootSiblingPath,
112
+ newL1ToL2MessageTreeSnapshot,
113
+ newL1ToL2MessageSubtreeRootSiblingPath,
99
114
  this,
115
+ this.onCheckpointBlobAccumulatorSet,
100
116
  );
101
- this.blocks[index] = block;
102
- if (this.blocks.filter(b => !!b).length === this.totalNumBlocks) {
117
+ this.checkpoints[checkpointIndex] = checkpoint;
118
+
119
+ if (this.checkpoints.filter(c => !!c).length === this.totalNumCheckpoints) {
103
120
  this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_FULL;
104
121
  }
105
- return block;
122
+
123
+ return checkpoint;
124
+ }
125
+
126
+ public getCheckpointProvingState(index: number) {
127
+ return this.checkpoints[index];
128
+ }
129
+
130
+ public getCheckpointProvingStateByBlockNumber(blockNumber: number) {
131
+ return this.checkpoints.find(
132
+ c => c && blockNumber >= c.firstBlockNumber && blockNumber < c.firstBlockNumber + c.totalNumBlocks,
133
+ );
134
+ }
135
+
136
+ public getBlockProvingStateByBlockNumber(blockNumber: number) {
137
+ return this.getCheckpointProvingStateByBlockNumber(blockNumber)?.getBlockProvingStateByBlockNumber(blockNumber);
106
138
  }
107
139
 
108
140
  // Returns true if this proving state is still valid, false otherwise
@@ -113,120 +145,146 @@ export class EpochProvingState {
113
145
  );
114
146
  }
115
147
 
116
- // Returns true if we are still able to accept blocks, false otherwise
117
- public isAcceptingBlocks() {
118
- return this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED;
148
+ // Returns true if we are still able to accept checkpoints, false otherwise.
149
+ public isAcceptingCheckpoints() {
150
+ return this.checkpoints.filter(c => !!c).length < this.totalNumCheckpoints;
119
151
  }
120
152
 
121
- public setBlockRootRollupProof(
122
- blockIndex: number,
123
- proof: PublicInputsAndRecursiveProof<
124
- BlockRootOrBlockMergePublicInputs,
153
+ public setCheckpointRootRollupProof(
154
+ checkpointIndex: number,
155
+ provingOutput: PublicInputsAndRecursiveProof<
156
+ CheckpointRollupPublicInputs,
125
157
  typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
126
158
  >,
127
159
  ): TreeNodeLocation {
128
- return this.blockRootOrMergeProvingOutputs.setLeaf(blockIndex, proof);
160
+ return this.checkpointProofs.setLeaf(checkpointIndex, { provingOutput });
161
+ }
162
+
163
+ public tryStartProvingCheckpointMerge(location: TreeNodeLocation) {
164
+ if (this.checkpointProofs.getNode(location)?.isProving) {
165
+ return false;
166
+ } else {
167
+ this.checkpointProofs.setNode(location, { isProving: true });
168
+ return true;
169
+ }
129
170
  }
130
171
 
131
- public setBlockMergeRollupProof(
172
+ public setCheckpointMergeRollupProof(
132
173
  location: TreeNodeLocation,
133
- proof: PublicInputsAndRecursiveProof<
134
- BlockRootOrBlockMergePublicInputs,
174
+ provingOutput: PublicInputsAndRecursiveProof<
175
+ CheckpointRollupPublicInputs,
135
176
  typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
136
177
  >,
137
178
  ) {
138
- this.blockRootOrMergeProvingOutputs.setNode(location, proof);
179
+ this.checkpointProofs.setNode(location, { provingOutput });
139
180
  }
140
181
 
141
- public setRootRollupProof(proof: PublicInputsAndRecursiveProof<RootRollupPublicInputs>) {
142
- this.rootRollupProvingOutput = proof;
182
+ public tryStartProvingRootRollup() {
183
+ if (this.rootRollupProof?.isProving) {
184
+ return false;
185
+ } else {
186
+ this.rootRollupProof = { isProving: true };
187
+ return true;
188
+ }
189
+ }
190
+
191
+ public setRootRollupProof(provingOutput: PublicInputsAndRecursiveProof<RootRollupPublicInputs>) {
192
+ this.rootRollupProof = { provingOutput };
193
+ }
194
+
195
+ public tryStartProvingPaddingCheckpoint() {
196
+ if (this.checkpointPaddingProof?.isProving) {
197
+ return false;
198
+ } else {
199
+ this.checkpointPaddingProof = { isProving: true };
200
+ return true;
201
+ }
143
202
  }
144
203
 
145
- public setPaddingBlockRootProof(
146
- proof: PublicInputsAndRecursiveProof<
147
- BlockRootOrBlockMergePublicInputs,
204
+ public setCheckpointPaddingProof(
205
+ provingOutput: PublicInputsAndRecursiveProof<
206
+ CheckpointRollupPublicInputs,
148
207
  typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
149
208
  >,
150
209
  ) {
151
- this.paddingBlockRootProvingOutput = proof;
210
+ this.checkpointPaddingProof = { provingOutput };
152
211
  }
153
212
 
154
- public setFinalBatchedBlob(batchedBlob: BatchedBlob) {
155
- this.finalBatchedBlob = batchedBlob;
156
- }
157
-
158
- public async setBlobAccumulators(toBlock?: number) {
159
- let previousAccumulator;
160
- const end = toBlock ? toBlock - this.firstBlockNumber : this.blocks.length;
213
+ public async setBlobAccumulators() {
214
+ let previousAccumulator = this.startBlobAccumulator;
161
215
  // Accumulate blobs as far as we can for this epoch.
162
- for (let i = 0; i <= end; i++) {
163
- const block = this.blocks[i];
164
- if (!block || !block.block) {
165
- // If the block proving state does not have a .block property, it may be awaiting more txs.
216
+ for (let i = 0; i < this.totalNumCheckpoints; i++) {
217
+ const checkpoint = this.checkpoints[i];
218
+ if (!checkpoint) {
166
219
  break;
167
220
  }
168
- if (!block.startBlobAccumulator) {
169
- // startBlobAccumulator always exists for firstBlockNumber, so the below should never assign an undefined:
170
- block.setStartBlobAccumulator(previousAccumulator!);
221
+
222
+ const endAccumulator =
223
+ checkpoint.getEndBlobAccumulator() || (await checkpoint.accumulateBlobs(previousAccumulator));
224
+ if (!endAccumulator) {
225
+ break;
171
226
  }
172
- if (block.startBlobAccumulator && !block.endBlobAccumulator) {
173
- await block.accumulateBlobs();
227
+
228
+ previousAccumulator = endAccumulator;
229
+
230
+ // If this is the last checkpoint, set the end blob accumulator.
231
+ if (i === this.totalNumCheckpoints - 1) {
232
+ this.endBlobAccumulator = endAccumulator;
174
233
  }
175
- previousAccumulator = block.endBlobAccumulator;
176
234
  }
177
235
  }
178
236
 
237
+ public async finalizeBatchedBlob() {
238
+ if (!this.endBlobAccumulator) {
239
+ throw new Error('End blob accumulator not ready.');
240
+ }
241
+ this.finalBatchedBlob = await this.endBlobAccumulator.finalize(true /* verifyProof */);
242
+ }
243
+
179
244
  public getParentLocation(location: TreeNodeLocation) {
180
- return this.blockRootOrMergeProvingOutputs.getParentLocation(location);
245
+ return this.checkpointProofs.getParentLocation(location);
181
246
  }
182
247
 
183
- public getBlockMergeRollupInputs(mergeLocation: TreeNodeLocation) {
184
- const [left, right] = this.blockRootOrMergeProvingOutputs.getChildren(mergeLocation);
248
+ public getCheckpointMergeRollupInputs(mergeLocation: TreeNodeLocation) {
249
+ const [left, right] = this.checkpointProofs.getChildren(mergeLocation).map(c => c?.provingOutput);
185
250
  if (!left || !right) {
186
- throw new Error('At lease one child is not ready.');
251
+ throw new Error('At least one child is not ready for the checkpoint merge rollup.');
187
252
  }
188
253
 
189
- return new BlockMergeRollupInputs([this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)]);
254
+ return new CheckpointMergeRollupPrivateInputs([toProofData(left), toProofData(right)]);
190
255
  }
191
256
 
192
257
  public getRootRollupInputs() {
193
258
  const [left, right] = this.#getChildProofsForRoot();
194
259
  if (!left || !right) {
195
- throw new Error('At lease one child is not ready.');
260
+ throw new Error('At least one child is not ready for the root rollup.');
196
261
  }
197
262
 
198
- return RootRollupInputs.from({
199
- previousRollupData: [this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)],
263
+ return RootRollupPrivateInputs.from({
264
+ previousRollups: [toProofData(left), toProofData(right)],
200
265
  });
201
266
  }
202
267
 
203
- public getPaddingBlockRootInputs() {
204
- if (!this.blocks[0]?.isComplete()) {
205
- throw new Error('Epoch needs one completed block in order to be padded.');
206
- }
207
-
208
- return this.blocks[0].getPaddingBlockRootInputs();
209
- }
210
-
211
- // Returns a specific transaction proving state
212
- public getBlockProvingStateByBlockNumber(blockNumber: number) {
213
- return this.blocks.find(block => block?.blockNumber === blockNumber);
268
+ public getPaddingCheckpointInputs() {
269
+ return new CheckpointPaddingRollupPrivateInputs();
214
270
  }
215
271
 
216
272
  public getEpochProofResult(): { proof: Proof; publicInputs: RootRollupPublicInputs; batchedBlobInputs: BatchedBlob } {
217
- if (!this.rootRollupProvingOutput || !this.finalBatchedBlob) {
273
+ const provingOutput = this.rootRollupProof?.provingOutput;
274
+
275
+ if (!provingOutput || !this.finalBatchedBlob) {
218
276
  throw new Error('Unable to get epoch proof result. Root rollup is not ready.');
219
277
  }
220
278
 
221
279
  return {
222
- proof: this.rootRollupProvingOutput.proof.binaryProof,
223
- publicInputs: this.rootRollupProvingOutput.inputs,
280
+ proof: provingOutput.proof.binaryProof,
281
+ publicInputs: provingOutput.inputs,
224
282
  batchedBlobInputs: this.finalBatchedBlob,
225
283
  };
226
284
  }
227
285
 
228
- public isReadyForBlockMerge(location: TreeNodeLocation) {
229
- return this.blockRootOrMergeProvingOutputs.getSibling(location) !== undefined;
286
+ public isReadyForCheckpointMerge(location: TreeNodeLocation) {
287
+ return !!this.checkpointProofs.getSibling(location)?.provingOutput;
230
288
  }
231
289
 
232
290
  // Returns true if we have sufficient inputs to execute the block root rollup
@@ -263,21 +321,8 @@ export class EpochProvingState {
263
321
  #getChildProofsForRoot() {
264
322
  const rootLocation = { level: 0, index: 0 };
265
323
  // If there's only 1 block, its block root proof will be stored at the root.
266
- return this.totalNumBlocks === 1
267
- ? [this.blockRootOrMergeProvingOutputs.getNode(rootLocation), this.paddingBlockRootProvingOutput]
268
- : this.blockRootOrMergeProvingOutputs.getChildren(rootLocation);
269
- }
270
-
271
- #getPreviousRollupData({
272
- inputs,
273
- proof,
274
- verificationKey,
275
- }: PublicInputsAndRecursiveProof<
276
- BlockRootOrBlockMergePublicInputs,
277
- typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
278
- >) {
279
- const leafIndex = getVKIndex(verificationKey.keyAsFields);
280
- const vkData = new VkData(verificationKey, leafIndex, getVKSiblingPath(leafIndex));
281
- return new PreviousRollupBlockData(inputs, proof, vkData);
324
+ return this.totalNumCheckpoints === 1
325
+ ? [this.checkpointProofs.getNode(rootLocation)?.provingOutput, this.checkpointPaddingProof?.provingOutput]
326
+ : this.checkpointProofs.getChildren(rootLocation).map(c => c?.provingOutput);
282
327
  }
283
328
  }