@aztec/prover-client 1.0.0-nightly.20250606 → 1.0.0-nightly.20250608
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/light.d.ts.map +1 -1
- package/dest/block-factory/light.js +1 -2
- package/dest/orchestrator/block-building-helpers.d.ts +3 -2
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +20 -21
- package/dest/orchestrator/block-proving-state.d.ts +1 -2
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +9 -14
- package/dest/orchestrator/epoch-proving-state.d.ts +2 -2
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +5 -4
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +5 -7
- package/package.json +15 -15
- package/src/block-factory/light.ts +1 -2
- package/src/orchestrator/block-building-helpers.ts +23 -21
- package/src/orchestrator/block-proving-state.ts +8 -12
- package/src/orchestrator/epoch-proving-state.ts +2 -3
- package/src/orchestrator/orchestrator.ts +5 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/block-factory/light.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEhG,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAmB,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAQnF;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAwB,YAAW,aAAa;IASzD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,SAAS;IATnB,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAO;IAE9B,OAAO,CAAC,GAAG,CAA4B;IAEvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;gBAG5D,EAAE,EAAE,yBAAyB,EAC7B,SAAS,GAAE,eAAsC;IAGrD,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1F,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;YAIvB,UAAU;CAoBzB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAAE,EAClB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,EAAE,EAAE,EACpB,EAAE,EAAE,yBAAyB,EAC7B,SAAS,GAAE,eAAsC,
|
|
1
|
+
{"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/block-factory/light.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEhG,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAmB,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAQnF;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAwB,YAAW,aAAa;IASzD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,SAAS;IATnB,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAO;IAE9B,OAAO,CAAC,GAAG,CAA4B;IAEvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;gBAG5D,EAAE,EAAE,yBAAyB,EAC7B,SAAS,GAAE,eAAsC;IAGrD,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1F,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;YAIvB,UAAU;CAoBzB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAAE,EAClB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,EAAE,EAAE,EACpB,EAAE,EAAE,yBAAyB,EAC7B,SAAS,GAAE,eAAsC,oBAUlD"}
|
|
@@ -73,9 +73,8 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffectsAndBuildBa
|
|
|
73
73
|
* @param db - A db fork to use for block building which WILL BE MODIFIED.
|
|
74
74
|
*/ export async function buildBlockWithCleanDB(txs, globalVariables, l1ToL2Messages, db, telemetry = getTelemetryClient()) {
|
|
75
75
|
const spongeBlobState = SpongeBlob.init(toNumBlobFields(txs));
|
|
76
|
-
const l1ToL2MessageTree = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
77
76
|
for (const tx of txs){
|
|
78
|
-
await insertSideEffectsAndBuildBaseRollupHints(tx, globalVariables,
|
|
77
|
+
await insertSideEffectsAndBuildBaseRollupHints(tx, globalVariables, db, spongeBlobState);
|
|
79
78
|
}
|
|
80
79
|
const builder = new LightweightBlockFactory(db, telemetry);
|
|
81
80
|
await builder.startNewBlock(globalVariables, l1ToL2Messages);
|
|
@@ -6,7 +6,7 @@ import { PublicDataHint } from '@aztec/stdlib/avm';
|
|
|
6
6
|
import { Body } from '@aztec/stdlib/block';
|
|
7
7
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
8
8
|
import type { ParityPublicInputs } from '@aztec/stdlib/parity';
|
|
9
|
-
import { type BaseOrMergeRollupPublicInputs, type BlockRootOrBlockMergePublicInputs, PrivateBaseRollupHints, PublicBaseRollupHints } from '@aztec/stdlib/rollup';
|
|
9
|
+
import { type BaseOrMergeRollupPublicInputs, type BlockRootOrBlockMergePublicInputs, ConstantRollupData, PrivateBaseRollupHints, PublicBaseRollupHints } from '@aztec/stdlib/rollup';
|
|
10
10
|
import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
11
11
|
import { BlockHeader, type GlobalVariables, PartialStateReference, type ProcessedTx, StateReference, TxEffect } from '@aztec/stdlib/tx';
|
|
12
12
|
import type { MerkleTreeReadOperations } from '@aztec/world-state';
|
|
@@ -18,7 +18,7 @@ type BaseTreeNames = 'NoteHashTree' | 'ContractTree' | 'NullifierTree' | 'Public
|
|
|
18
18
|
* Type representing the names of the trees.
|
|
19
19
|
*/
|
|
20
20
|
export type TreeNames = BaseTreeNames | 'L1ToL2MessageTree' | 'Archive';
|
|
21
|
-
export declare const insertSideEffectsAndBuildBaseRollupHints: (tx: ProcessedTx, globalVariables: GlobalVariables,
|
|
21
|
+
export declare const insertSideEffectsAndBuildBaseRollupHints: (tx: ProcessedTx, globalVariables: GlobalVariables, db: MerkleTreeWriteOperations, startSpongeBlob: SpongeBlob) => Promise<PublicBaseRollupHints | PrivateBaseRollupHints>;
|
|
22
22
|
export declare function getPublicDataHint(db: MerkleTreeWriteOperations, leafSlot: bigint): Promise<PublicDataHint>;
|
|
23
23
|
export declare const buildBlobHints: (txEffects: TxEffect[]) => Promise<{
|
|
24
24
|
blobFields: Fr[];
|
|
@@ -48,6 +48,7 @@ export declare function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId:
|
|
|
48
48
|
readonly 0: 40;
|
|
49
49
|
readonly 2: 40;
|
|
50
50
|
}[TID]>>;
|
|
51
|
+
export declare const getConstantRollupData: (globalVariables: GlobalVariables, db: MerkleTreeReadOperations) => Promise<ConstantRollupData>;
|
|
51
52
|
export declare function getTreeSnapshot(id: MerkleTreeId, db: MerkleTreeReadOperations): Promise<AppendOnlyTreeSnapshot>;
|
|
52
53
|
export declare function makeEmptyMembershipWitness<N extends number>(height: N): MembershipWitness<N>;
|
|
53
54
|
export declare function getSubtreeSiblingPath(treeId: MerkleTreeId, subtreeHeight: number, db: MerkleTreeReadOperations): Promise<Fr[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiBxD,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,KAAK,EAAmD,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAqD,MAAM,yBAAyB,CAAC;AAI/G,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,KAAK,6BAA6B,
|
|
1
|
+
{"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,17 +12,15 @@ import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-ju
|
|
|
12
12
|
import { PublicDataHint } from '@aztec/stdlib/avm';
|
|
13
13
|
import { Body } from '@aztec/stdlib/block';
|
|
14
14
|
import { ContractClassLogFields } from '@aztec/stdlib/logs';
|
|
15
|
-
import {
|
|
15
|
+
import { ConstantRollupData, PrivateBaseRollupHints, PrivateBaseStateDiffHints, PublicBaseRollupHints } from '@aztec/stdlib/rollup';
|
|
16
16
|
import { AppendOnlyTreeSnapshot, MerkleTreeId, NullifierLeafPreimage, PublicDataTreeLeaf, PublicDataTreeLeafPreimage, getTreeHeight } from '@aztec/stdlib/trees';
|
|
17
17
|
import { BlockHeader, ContentCommitment, PartialStateReference, StateReference, TxEffect } from '@aztec/stdlib/tx';
|
|
18
18
|
import { Attributes, runInSpan } from '@aztec/telemetry-client';
|
|
19
19
|
// Builds the hints for base rollup. Updating the contract, nullifier, and data trees in the process.
|
|
20
|
-
export const insertSideEffectsAndBuildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx, globalVariables,
|
|
21
|
-
// when base parity proof is being generated.
|
|
22
|
-
l1ToL2MessageTreeSnapshot, db, startSpongeBlob)=>{
|
|
20
|
+
export const insertSideEffectsAndBuildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx, globalVariables, db, startSpongeBlob)=>{
|
|
23
21
|
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
24
22
|
// Get trees info before any changes hit
|
|
25
|
-
const
|
|
23
|
+
const constants = await getConstantRollupData(globalVariables, db);
|
|
26
24
|
const start = new PartialStateReference(await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db), await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db), await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE, db));
|
|
27
25
|
// Get the subtree sibling paths for the circuit
|
|
28
26
|
const noteHashSubtreeSiblingPathArray = await getSubtreeSiblingPath(MerkleTreeId.NOTE_HASH_TREE, NOTE_HASH_SUBTREE_HEIGHT, db);
|
|
@@ -51,13 +49,13 @@ l1ToL2MessageTreeSnapshot, db, startSpongeBlob)=>{
|
|
|
51
49
|
await startSpongeBlob.absorb(tx.txEffect.toBlobFields());
|
|
52
50
|
const contractClassLogsFields = makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, (i)=>tx.txEffect.contractClassLogs[i]?.fields || ContractClassLogFields.empty());
|
|
53
51
|
if (tx.avmProvingRequest) {
|
|
54
|
-
const blockHash = await tx.
|
|
52
|
+
const blockHash = await tx.constants.historicalHeader.hash();
|
|
55
53
|
const archiveRootMembershipWitness = await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db);
|
|
56
54
|
return PublicBaseRollupHints.from({
|
|
57
55
|
startSpongeBlob: inputSpongeBlob,
|
|
58
|
-
lastArchive,
|
|
59
56
|
archiveRootMembershipWitness,
|
|
60
|
-
contractClassLogsFields
|
|
57
|
+
contractClassLogsFields,
|
|
58
|
+
constants
|
|
61
59
|
});
|
|
62
60
|
} else {
|
|
63
61
|
if (txPublicDataUpdateRequestInfo.lowPublicDataWritesMembershipWitnesses.length > 1 || txPublicDataUpdateRequestInfo.lowPublicDataWritesPreimages.length > 1 || txPublicDataUpdateRequestInfo.publicDataWritesSiblingPaths.length > 1) {
|
|
@@ -77,15 +75,8 @@ l1ToL2MessageTreeSnapshot, db, startSpongeBlob)=>{
|
|
|
77
75
|
feeWriteLowLeafMembershipWitness,
|
|
78
76
|
feeWriteSiblingPath
|
|
79
77
|
});
|
|
80
|
-
const blockHash = await tx.
|
|
78
|
+
const blockHash = await tx.constants.historicalHeader.hash();
|
|
81
79
|
const archiveRootMembershipWitness = await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db);
|
|
82
|
-
const constants = BlockConstantData.from({
|
|
83
|
-
lastArchive,
|
|
84
|
-
lastL1ToL2: l1ToL2MessageTreeSnapshot,
|
|
85
|
-
vkTreeRoot: getVKTreeRoot(),
|
|
86
|
-
protocolContractTreeRoot,
|
|
87
|
-
globalVariables
|
|
88
|
-
});
|
|
89
80
|
return PrivateBaseRollupHints.from({
|
|
90
81
|
start,
|
|
91
82
|
startSpongeBlob: inputSpongeBlob,
|
|
@@ -204,6 +195,14 @@ export async function getRootTreeSiblingPath(treeId, db) {
|
|
|
204
195
|
const path = await db.getSiblingPath(treeId, size);
|
|
205
196
|
return padArrayEnd(path.toFields(), Fr.ZERO, getTreeHeight(treeId));
|
|
206
197
|
}
|
|
198
|
+
export const getConstantRollupData = runInSpan('BlockBuilderHelpers', 'getConstantRollupData', async (_span, globalVariables, db)=>{
|
|
199
|
+
return ConstantRollupData.from({
|
|
200
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
201
|
+
protocolContractTreeRoot,
|
|
202
|
+
lastArchive: await getTreeSnapshot(MerkleTreeId.ARCHIVE, db),
|
|
203
|
+
globalVariables
|
|
204
|
+
});
|
|
205
|
+
});
|
|
207
206
|
export async function getTreeSnapshot(id, db) {
|
|
208
207
|
const treeInfo = await db.getTreeInfo(id);
|
|
209
208
|
return new AppendOnlyTreeSnapshot(Fr.fromBuffer(treeInfo.root), Number(treeInfo.size));
|
|
@@ -269,17 +268,17 @@ function validateSimulatedTree(localTree, simulatedTree, name, label) {
|
|
|
269
268
|
}
|
|
270
269
|
}
|
|
271
270
|
export function validateTx(tx) {
|
|
272
|
-
const txHeader = tx.
|
|
273
|
-
if (txHeader.state.l1ToL2MessageTree.
|
|
271
|
+
const txHeader = tx.constants.historicalHeader;
|
|
272
|
+
if (txHeader.state.l1ToL2MessageTree.isZero()) {
|
|
274
273
|
throw new Error(`Empty L1 to L2 messages tree in tx: ${toFriendlyJSON(tx)}`);
|
|
275
274
|
}
|
|
276
|
-
if (txHeader.state.partial.noteHashTree.
|
|
275
|
+
if (txHeader.state.partial.noteHashTree.isZero()) {
|
|
277
276
|
throw new Error(`Empty note hash tree in tx: ${toFriendlyJSON(tx)}`);
|
|
278
277
|
}
|
|
279
|
-
if (txHeader.state.partial.nullifierTree.
|
|
278
|
+
if (txHeader.state.partial.nullifierTree.isZero()) {
|
|
280
279
|
throw new Error(`Empty nullifier tree in tx: ${toFriendlyJSON(tx)}`);
|
|
281
280
|
}
|
|
282
|
-
if (txHeader.state.partial.publicDataTree.
|
|
281
|
+
if (txHeader.state.partial.publicDataTree.isZero()) {
|
|
283
282
|
throw new Error(`Empty public data tree in tx: ${toFriendlyJSON(tx)}`);
|
|
284
283
|
}
|
|
285
284
|
}
|
|
@@ -21,7 +21,6 @@ export declare class BlockProvingState {
|
|
|
21
21
|
readonly index: number;
|
|
22
22
|
readonly globalVariables: GlobalVariables;
|
|
23
23
|
readonly newL1ToL2Messages: Fr[];
|
|
24
|
-
readonly l1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot;
|
|
25
24
|
private readonly l1ToL2MessageSubtreeSiblingPath;
|
|
26
25
|
private readonly l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
27
26
|
private readonly lastArchiveSnapshot;
|
|
@@ -39,7 +38,7 @@ export declare class BlockProvingState {
|
|
|
39
38
|
totalNumTxs: number;
|
|
40
39
|
private txs;
|
|
41
40
|
error: string | undefined;
|
|
42
|
-
constructor(index: number, globalVariables: GlobalVariables, newL1ToL2Messages: Fr[],
|
|
41
|
+
constructor(index: number, globalVariables: GlobalVariables, newL1ToL2Messages: Fr[], l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>, l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, lastArchiveSnapshot: AppendOnlyTreeSnapshot, lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, previousBlockHeader: BlockHeader, parentEpoch: EpochProvingState);
|
|
43
42
|
get blockNumber(): number;
|
|
44
43
|
startNewBlock(numTxs: number, numBlobFields: number): void;
|
|
45
44
|
addNewTx(tx: TxProvingState): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,wCAAwC,EAC7C,KAAK,yCAAyC,EAG/C,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,yBAAyB,CAAC;AAGrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,KAAK,kBAAkB,EAAmB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EACL,KAAK,6BAA6B,
|
|
1
|
+
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { UnbalancedTreeStore } from '@aztec/foundation/trees';
|
|
|
6
6
|
import { getVKIndex, getVKSiblingPath, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
7
7
|
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
8
8
|
import { RootParityInput, RootParityInputs } from '@aztec/stdlib/parity';
|
|
9
|
-
import {
|
|
9
|
+
import { BlockRootRollupBlobData, BlockRootRollupData, BlockRootRollupInputs, ConstantRollupData, EmptyBlockRootRollupInputs, MergeRollupInputs, PreviousRollupData, SingleTxBlockRootRollupInputs } from '@aztec/stdlib/rollup';
|
|
10
10
|
import { StateReference } from '@aztec/stdlib/tx';
|
|
11
11
|
import { VkData } from '@aztec/stdlib/vks';
|
|
12
12
|
import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-helpers.js';
|
|
@@ -17,7 +17,6 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
17
17
|
index;
|
|
18
18
|
globalVariables;
|
|
19
19
|
newL1ToL2Messages;
|
|
20
|
-
l1ToL2MessageTreeSnapshot;
|
|
21
20
|
l1ToL2MessageSubtreeSiblingPath;
|
|
22
21
|
l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
23
22
|
lastArchiveSnapshot;
|
|
@@ -35,11 +34,10 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
35
34
|
totalNumTxs;
|
|
36
35
|
txs;
|
|
37
36
|
error;
|
|
38
|
-
constructor(index, globalVariables, newL1ToL2Messages,
|
|
37
|
+
constructor(index, globalVariables, newL1ToL2Messages, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, lastArchiveSiblingPath, newArchiveSiblingPath, previousBlockHeader, parentEpoch){
|
|
39
38
|
this.index = index;
|
|
40
39
|
this.globalVariables = globalVariables;
|
|
41
40
|
this.newL1ToL2Messages = newL1ToL2Messages;
|
|
42
|
-
this.l1ToL2MessageTreeSnapshot = l1ToL2MessageTreeSnapshot;
|
|
43
41
|
this.l1ToL2MessageSubtreeSiblingPath = l1ToL2MessageSubtreeSiblingPath;
|
|
44
42
|
this.l1ToL2MessageTreeSnapshotAfterInsertion = l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
45
43
|
this.lastArchiveSnapshot = lastArchiveSnapshot;
|
|
@@ -127,9 +125,8 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
127
125
|
}
|
|
128
126
|
const data = this.#getBlockRootRollupData(proverId);
|
|
129
127
|
if (this.totalNumTxs === 0) {
|
|
130
|
-
const constants =
|
|
128
|
+
const constants = ConstantRollupData.from({
|
|
131
129
|
lastArchive: this.lastArchiveSnapshot,
|
|
132
|
-
lastL1ToL2: this.l1ToL2MessageTreeSnapshot,
|
|
133
130
|
globalVariables: this.globalVariables,
|
|
134
131
|
vkTreeRoot: getVKTreeRoot(),
|
|
135
132
|
protocolContractTreeRoot
|
|
@@ -161,21 +158,19 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
161
158
|
if (!this.rootParityProvingOutput) {
|
|
162
159
|
throw new Error('Root parity is not ready.');
|
|
163
160
|
}
|
|
164
|
-
// Use the new block header
|
|
165
|
-
const
|
|
166
|
-
const
|
|
167
|
-
const lastL1ToL2 = this.l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
161
|
+
// Use the new block header and archive of the current block as the previous header and archiver of the next padding block.
|
|
162
|
+
const newBlockHeader = await this.buildHeaderFromProvingOutputs();
|
|
163
|
+
const newArchive = this.blockRootProvingOutput.inputs.newArchive;
|
|
168
164
|
const data = BlockRootRollupData.from({
|
|
169
165
|
l1ToL2Roots: this.#getRootParityData(this.rootParityProvingOutput),
|
|
170
166
|
l1ToL2MessageSubtreeSiblingPath: this.l1ToL2MessageSubtreeSiblingPath,
|
|
171
167
|
previousArchiveSiblingPath: this.lastArchiveSiblingPath,
|
|
172
168
|
newArchiveSiblingPath: this.newArchiveSiblingPath,
|
|
173
|
-
previousBlockHeader,
|
|
169
|
+
previousBlockHeader: newBlockHeader,
|
|
174
170
|
proverId
|
|
175
171
|
});
|
|
176
|
-
const constants =
|
|
177
|
-
lastArchive,
|
|
178
|
-
lastL1ToL2,
|
|
172
|
+
const constants = ConstantRollupData.from({
|
|
173
|
+
lastArchive: newArchive,
|
|
179
174
|
globalVariables: this.globalVariables,
|
|
180
175
|
vkTreeRoot: getVKTreeRoot(),
|
|
181
176
|
protocolContractTreeRoot
|
|
@@ -35,7 +35,7 @@ export declare class EpochProvingState {
|
|
|
35
35
|
readonly cachedTubeProofs: Map<string, Promise<ProofAndVerificationKey<535>>>;
|
|
36
36
|
blocks: (BlockProvingState | undefined)[];
|
|
37
37
|
constructor(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number, completionCallback: (result: ProvingResult) => void, rejectionCallback: (reason: string) => void);
|
|
38
|
-
startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[],
|
|
38
|
+
startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[], l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>, l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, lastArchiveSnapshot: AppendOnlyTreeSnapshot, lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, previousBlockHeader: BlockHeader): BlockProvingState;
|
|
39
39
|
verifyState(): boolean;
|
|
40
40
|
isAcceptingBlocks(): boolean;
|
|
41
41
|
setBlockRootRollupProof(blockIndex: number, proof: PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): TreeNodeLocation;
|
|
@@ -44,7 +44,7 @@ export declare class EpochProvingState {
|
|
|
44
44
|
setPaddingBlockRootProof(proof: PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): void;
|
|
45
45
|
getParentLocation(location: TreeNodeLocation): TreeNodeLocation;
|
|
46
46
|
getBlockMergeRollupInputs(mergeLocation: TreeNodeLocation): BlockMergeRollupInputs;
|
|
47
|
-
getRootRollupInputs(): RootRollupInputs;
|
|
47
|
+
getRootRollupInputs(proverId: Fr): RootRollupInputs;
|
|
48
48
|
getPaddingBlockRootInputs(proverId: Fr): Promise<import("@aztec/stdlib/rollup").EmptyBlockRootRollupInputs>;
|
|
49
49
|
getBlockProvingStateByBlockNumber(blockNumber: number): BlockProvingState | undefined;
|
|
50
50
|
getEpochProofResult(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/epoch-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,wCAAwC,EACxC,yCAAyC,EAE1C,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,yBAAyB,CAAC;AAErF,OAAO,KAAK,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAC9G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,sBAAsB,EACtB,KAAK,iCAAiC,EAEtC,gBAAgB,EAChB,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;AAStE,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;;aAgBV,WAAW,EAAE,MAAM;aACnB,gBAAgB,EAAE,MAAM;aACxB,cAAc,EAAE,MAAM;IACtC,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,iBAAiB;IAnB3B,OAAO,CAAC,8BAA8B,CAEpC;IACF,OAAO,CAAC,6BAA6B,CAEvB;IACd,OAAO,CAAC,uBAAuB,CAAoE;IACnG,OAAO,CAAC,qBAAqB,CAAiD;IAG9E,SAAgB,gBAAgB,qDAAiF;IAE1G,MAAM,EAAE,CAAC,iBAAiB,GAAG,SAAS,CAAC,EAAE,CAAM;gBAGpC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EAC9B,kBAAkB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,EACnD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;IAO9C,aAAa,CAClB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,EAAE,EAAE,EACpB
|
|
1
|
+
{"version":3,"file":"epoch-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/epoch-proving-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,9 +41,9 @@ var PROVING_STATE_LIFECYCLE = /*#__PURE__*/ function(PROVING_STATE_LIFECYCLE) {
|
|
|
41
41
|
}
|
|
42
42
|
// Adds a block to the proving state, returns its index
|
|
43
43
|
// Will update the proving life cycle if this is the last block
|
|
44
|
-
startNewBlock(globalVariables, l1ToL2Messages,
|
|
44
|
+
startNewBlock(globalVariables, l1ToL2Messages, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, lastArchiveSiblingPath, newArchiveSiblingPath, previousBlockHeader) {
|
|
45
45
|
const index = globalVariables.blockNumber.toNumber() - this.firstBlockNumber;
|
|
46
|
-
const block = new BlockProvingState(index, globalVariables, l1ToL2Messages,
|
|
46
|
+
const block = new BlockProvingState(index, globalVariables, l1ToL2Messages, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, lastArchiveSiblingPath, newArchiveSiblingPath, previousBlockHeader, this);
|
|
47
47
|
this.blocks[index] = block;
|
|
48
48
|
if (this.blocks.filter((b)=>!!b).length === this.totalNumBlocks) {
|
|
49
49
|
this.provingStateLifecycle = 1;
|
|
@@ -83,7 +83,7 @@ var PROVING_STATE_LIFECYCLE = /*#__PURE__*/ function(PROVING_STATE_LIFECYCLE) {
|
|
|
83
83
|
this.#getPreviousRollupData(right)
|
|
84
84
|
]);
|
|
85
85
|
}
|
|
86
|
-
getRootRollupInputs() {
|
|
86
|
+
getRootRollupInputs(proverId) {
|
|
87
87
|
const [left, right] = this.#getChildProofsForRoot();
|
|
88
88
|
if (!left || !right) {
|
|
89
89
|
throw new Error('At lease one child is not ready.');
|
|
@@ -92,7 +92,8 @@ var PROVING_STATE_LIFECYCLE = /*#__PURE__*/ function(PROVING_STATE_LIFECYCLE) {
|
|
|
92
92
|
previousRollupData: [
|
|
93
93
|
this.#getPreviousRollupData(left),
|
|
94
94
|
this.#getPreviousRollupData(right)
|
|
95
|
-
]
|
|
95
|
+
],
|
|
96
|
+
proverId
|
|
96
97
|
});
|
|
97
98
|
}
|
|
98
99
|
getPaddingBlockRootInputs(proverId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAS9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EAGxB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAAE,KAAK,sBAAsB,EAAgB,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAmB,MAAM,kBAAkB,CAAC;AACtH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAqBjC;;;;;;;;;GASG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IASnD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAV3B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,kBAAkB,CAAyB;IAEnD,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,GAAG,CAAqD;gBAGtD,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,mBAAmB,EAClB,QAAQ,EAAE,EAAE,EAC7B,eAAe,GAAE,eAAsC;IAKzD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEM,WAAW,IAAI,EAAE;IAIjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAW1F;;;;;OAKG;IAIU,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAS9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EAGxB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAAE,KAAK,sBAAsB,EAAgB,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAmB,MAAM,kBAAkB,CAAC;AACtH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAqBjC;;;;;;;;;GASG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IASnD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAV3B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,kBAAkB,CAAyB;IAEnD,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,GAAG,CAAqD;gBAGtD,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,mBAAmB,EAClB,QAAQ,EAAE,EAAE,EAC7B,eAAe,GAAE,eAAsC;IAKzD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEM,WAAW,IAAI,EAAE;IAIjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAW1F;;;;;OAKG;IAIU,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW;IA2CnH;;;OAGG;IAIU,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDtD;;;OAGG;IAEU,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE;IAcxC;;;OAGG;IAIU,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBnG,oDAAoD;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;YAQzB,UAAU;cAqCR,kCAAkC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,sBAAsB;IAWvG;;OAEG;IACI,MAAM;IAQb;;OAEG;IACU,aAAa;;;;IAoB1B;;;;OAIG;YACW,kBAAkB;IAShC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;YAwDT,uBAAuB;YA+BvB,uBAAuB;IAmCrC,OAAO,CAAC,iBAAiB;IA8CzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,kBAAkB;YA0BZ,sBAAsB;IAmEpC,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,gCAAgC;IAUxC,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,uBAAuB;YAyBjB,mBAAmB;IA6BjC,OAAO,CAAC,iBAAiB;YA4BX,8BAA8B;YAa9B,8BAA8B;IAyB5C,OAAO,CAAC,mCAAmC;IAa3C,OAAO,CAAC,yBAAyB;IASjC;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAmDjB,OAAO,CAAC,4BAA4B;CAWrC"}
|
|
@@ -97,12 +97,12 @@ const logger = createLogger('prover-client:orchestrator');
|
|
|
97
97
|
const db = await this.dbProvider.fork(globalVariables.blockNumber.toNumber() - 1);
|
|
98
98
|
this.dbs.set(globalVariables.blockNumber.toNumber(), db);
|
|
99
99
|
// we start the block by enqueueing all of the base parity circuits
|
|
100
|
-
const {
|
|
100
|
+
const { l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, baseParityInputs } = await this.prepareBaseParityInputs(l1ToL2Messages, db);
|
|
101
101
|
// Get archive snapshot before this block lands
|
|
102
102
|
const lastArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
103
103
|
const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
104
104
|
const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
105
|
-
const blockProvingState = this.provingState.startNewBlock(globalVariables, l1ToL2Messages,
|
|
105
|
+
const blockProvingState = this.provingState.startNewBlock(globalVariables, l1ToL2Messages, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchive, lastArchiveSiblingPath, newArchiveSiblingPath, previousBlockHeader);
|
|
106
106
|
// Enqueue base parity circuits for the block
|
|
107
107
|
for(let i = 0; i < baseParityInputs.length; i++){
|
|
108
108
|
this.enqueueBaseParityCircuit(blockProvingState, baseParityInputs[i], i);
|
|
@@ -118,7 +118,7 @@ const logger = createLogger('prover-client:orchestrator');
|
|
|
118
118
|
logger.warn(`Provided no txs to orchestrator addTxs.`);
|
|
119
119
|
return;
|
|
120
120
|
}
|
|
121
|
-
const blockNumber = txs[0].globalVariables.blockNumber.toNumber();
|
|
121
|
+
const blockNumber = txs[0].constants.globalVariables.blockNumber.toNumber();
|
|
122
122
|
const provingState = this.provingState?.getBlockProvingStateByBlockNumber(blockNumber);
|
|
123
123
|
if (!provingState) {
|
|
124
124
|
throw new Error(`Block proving state for ${blockNumber} not found`);
|
|
@@ -314,13 +314,11 @@ const logger = createLogger('prover-client:orchestrator');
|
|
|
314
314
|
async prepareBaseParityInputs(l1ToL2Messages, db) {
|
|
315
315
|
const l1ToL2MessagesPadded = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 'Too many L1 to L2 messages');
|
|
316
316
|
const baseParityInputs = times(NUM_BASE_PARITY_PER_ROOT_PARITY, (i)=>BaseParityInputs.fromSlice(l1ToL2MessagesPadded, i, getVKTreeRoot()));
|
|
317
|
-
const l1ToL2MessageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
318
317
|
const l1ToL2MessageSubtreeSiblingPath = assertLength(await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, db), L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH);
|
|
319
318
|
// Update the local trees to include the new l1 to l2 messages
|
|
320
319
|
await db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2MessagesPadded);
|
|
321
320
|
const l1ToL2MessageTreeSnapshotAfterInsertion = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
322
321
|
return {
|
|
323
|
-
l1ToL2MessageTreeSnapshot,
|
|
324
322
|
l1ToL2MessageSubtreeSiblingPath,
|
|
325
323
|
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
326
324
|
baseParityInputs
|
|
@@ -335,7 +333,7 @@ const logger = createLogger('prover-client:orchestrator');
|
|
|
335
333
|
const db = this.dbs.get(provingState.blockNumber);
|
|
336
334
|
// We build the base rollup inputs using a mock proof and verification key.
|
|
337
335
|
// These will be overwritten later once we have proven the tube circuit and any public kernels
|
|
338
|
-
const [ms, hints] = await elapsed(insertSideEffectsAndBuildBaseRollupHints(tx, provingState.globalVariables,
|
|
336
|
+
const [ms, hints] = await elapsed(insertSideEffectsAndBuildBaseRollupHints(tx, provingState.globalVariables, db, provingState.spongeBlobState));
|
|
339
337
|
this.metrics.recordBaseRollupInputs(ms);
|
|
340
338
|
const promises = [
|
|
341
339
|
MerkleTreeId.NOTE_HASH_TREE,
|
|
@@ -558,7 +556,7 @@ const logger = createLogger('prover-client:orchestrator');
|
|
|
558
556
|
return;
|
|
559
557
|
}
|
|
560
558
|
logger.debug(`Preparing root rollup`);
|
|
561
|
-
const inputs = provingState.getRootRollupInputs();
|
|
559
|
+
const inputs = provingState.getRootRollupInputs(this.proverId);
|
|
562
560
|
this.deferredProving(provingState, wrapCallbackInSpan(this.tracer, 'ProvingOrchestrator.prover.getRootRollupProof', {
|
|
563
561
|
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-rollup'
|
|
564
562
|
}, (signal)=>this.prover.getRootRollupProof(inputs, signal, provingState.epochNumber)), (result)=>{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-client",
|
|
3
|
-
"version": "1.0.0-nightly.
|
|
3
|
+
"version": "1.0.0-nightly.20250608",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -64,19 +64,19 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/bb-prover": "1.0.0-nightly.
|
|
68
|
-
"@aztec/blob-lib": "1.0.0-nightly.
|
|
69
|
-
"@aztec/constants": "1.0.0-nightly.
|
|
70
|
-
"@aztec/ethereum": "1.0.0-nightly.
|
|
71
|
-
"@aztec/foundation": "1.0.0-nightly.
|
|
72
|
-
"@aztec/kv-store": "1.0.0-nightly.
|
|
73
|
-
"@aztec/noir-protocol-circuits-types": "1.0.0-nightly.
|
|
74
|
-
"@aztec/noir-types": "1.0.0-nightly.
|
|
75
|
-
"@aztec/protocol-contracts": "1.0.0-nightly.
|
|
76
|
-
"@aztec/simulator": "1.0.0-nightly.
|
|
77
|
-
"@aztec/stdlib": "1.0.0-nightly.
|
|
78
|
-
"@aztec/telemetry-client": "1.0.0-nightly.
|
|
79
|
-
"@aztec/world-state": "1.0.0-nightly.
|
|
67
|
+
"@aztec/bb-prover": "1.0.0-nightly.20250608",
|
|
68
|
+
"@aztec/blob-lib": "1.0.0-nightly.20250608",
|
|
69
|
+
"@aztec/constants": "1.0.0-nightly.20250608",
|
|
70
|
+
"@aztec/ethereum": "1.0.0-nightly.20250608",
|
|
71
|
+
"@aztec/foundation": "1.0.0-nightly.20250608",
|
|
72
|
+
"@aztec/kv-store": "1.0.0-nightly.20250608",
|
|
73
|
+
"@aztec/noir-protocol-circuits-types": "1.0.0-nightly.20250608",
|
|
74
|
+
"@aztec/noir-types": "1.0.0-nightly.20250608",
|
|
75
|
+
"@aztec/protocol-contracts": "1.0.0-nightly.20250608",
|
|
76
|
+
"@aztec/simulator": "1.0.0-nightly.20250608",
|
|
77
|
+
"@aztec/stdlib": "1.0.0-nightly.20250608",
|
|
78
|
+
"@aztec/telemetry-client": "1.0.0-nightly.20250608",
|
|
79
|
+
"@aztec/world-state": "1.0.0-nightly.20250608",
|
|
80
80
|
"@google-cloud/storage": "^7.15.0",
|
|
81
81
|
"@iarna/toml": "^2.2.5",
|
|
82
82
|
"commander": "^12.1.0",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"zod": "^3.23.8"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@aztec/noir-contracts.js": "1.0.0-nightly.
|
|
89
|
+
"@aztec/noir-contracts.js": "1.0.0-nightly.20250608",
|
|
90
90
|
"@jest/globals": "^29.5.0",
|
|
91
91
|
"@types/jest": "^29.5.0",
|
|
92
92
|
"@types/node": "^22.15.17",
|
|
@@ -99,9 +99,8 @@ export async function buildBlockWithCleanDB(
|
|
|
99
99
|
telemetry: TelemetryClient = getTelemetryClient(),
|
|
100
100
|
) {
|
|
101
101
|
const spongeBlobState = SpongeBlob.init(toNumBlobFields(txs));
|
|
102
|
-
const l1ToL2MessageTree = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
103
102
|
for (const tx of txs) {
|
|
104
|
-
await insertSideEffectsAndBuildBaseRollupHints(tx, globalVariables,
|
|
103
|
+
await insertSideEffectsAndBuildBaseRollupHints(tx, globalVariables, db, spongeBlobState);
|
|
105
104
|
}
|
|
106
105
|
const builder = new LightweightBlockFactory(db, telemetry);
|
|
107
106
|
await builder.startNewBlock(globalVariables, l1ToL2Messages);
|
|
@@ -28,8 +28,8 @@ import { ContractClassLogFields } from '@aztec/stdlib/logs';
|
|
|
28
28
|
import type { ParityPublicInputs } from '@aztec/stdlib/parity';
|
|
29
29
|
import {
|
|
30
30
|
type BaseOrMergeRollupPublicInputs,
|
|
31
|
-
BlockConstantData,
|
|
32
31
|
type BlockRootOrBlockMergePublicInputs,
|
|
32
|
+
ConstantRollupData,
|
|
33
33
|
PrivateBaseRollupHints,
|
|
34
34
|
PrivateBaseStateDiffHints,
|
|
35
35
|
PublicBaseRollupHints,
|
|
@@ -71,15 +71,12 @@ export const insertSideEffectsAndBuildBaseRollupHints = runInSpan(
|
|
|
71
71
|
span: Span,
|
|
72
72
|
tx: ProcessedTx,
|
|
73
73
|
globalVariables: GlobalVariables,
|
|
74
|
-
// Passing in the snapshot instead of getting it from the db because it might've been updated in the orchestrator
|
|
75
|
-
// when base parity proof is being generated.
|
|
76
|
-
l1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot,
|
|
77
74
|
db: MerkleTreeWriteOperations,
|
|
78
75
|
startSpongeBlob: SpongeBlob,
|
|
79
76
|
) => {
|
|
80
77
|
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
81
78
|
// Get trees info before any changes hit
|
|
82
|
-
const
|
|
79
|
+
const constants = await getConstantRollupData(globalVariables, db);
|
|
83
80
|
const start = new PartialStateReference(
|
|
84
81
|
await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db),
|
|
85
82
|
await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db),
|
|
@@ -147,7 +144,7 @@ export const insertSideEffectsAndBuildBaseRollupHints = runInSpan(
|
|
|
147
144
|
);
|
|
148
145
|
|
|
149
146
|
if (tx.avmProvingRequest) {
|
|
150
|
-
const blockHash = await tx.
|
|
147
|
+
const blockHash = await tx.constants.historicalHeader.hash();
|
|
151
148
|
const archiveRootMembershipWitness = await getMembershipWitnessFor(
|
|
152
149
|
blockHash,
|
|
153
150
|
MerkleTreeId.ARCHIVE,
|
|
@@ -157,9 +154,9 @@ export const insertSideEffectsAndBuildBaseRollupHints = runInSpan(
|
|
|
157
154
|
|
|
158
155
|
return PublicBaseRollupHints.from({
|
|
159
156
|
startSpongeBlob: inputSpongeBlob,
|
|
160
|
-
lastArchive,
|
|
161
157
|
archiveRootMembershipWitness,
|
|
162
158
|
contractClassLogsFields,
|
|
159
|
+
constants,
|
|
163
160
|
});
|
|
164
161
|
} else {
|
|
165
162
|
if (
|
|
@@ -199,7 +196,7 @@ export const insertSideEffectsAndBuildBaseRollupHints = runInSpan(
|
|
|
199
196
|
feeWriteSiblingPath,
|
|
200
197
|
});
|
|
201
198
|
|
|
202
|
-
const blockHash = await tx.
|
|
199
|
+
const blockHash = await tx.constants.historicalHeader.hash();
|
|
203
200
|
const archiveRootMembershipWitness = await getMembershipWitnessFor(
|
|
204
201
|
blockHash,
|
|
205
202
|
MerkleTreeId.ARCHIVE,
|
|
@@ -207,14 +204,6 @@ export const insertSideEffectsAndBuildBaseRollupHints = runInSpan(
|
|
|
207
204
|
db,
|
|
208
205
|
);
|
|
209
206
|
|
|
210
|
-
const constants = BlockConstantData.from({
|
|
211
|
-
lastArchive,
|
|
212
|
-
lastL1ToL2: l1ToL2MessageTreeSnapshot,
|
|
213
|
-
vkTreeRoot: getVKTreeRoot(),
|
|
214
|
-
protocolContractTreeRoot,
|
|
215
|
-
globalVariables,
|
|
216
|
-
});
|
|
217
|
-
|
|
218
207
|
return PrivateBaseRollupHints.from({
|
|
219
208
|
start,
|
|
220
209
|
startSpongeBlob: inputSpongeBlob,
|
|
@@ -414,6 +403,19 @@ export async function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: T
|
|
|
414
403
|
return padArrayEnd(path.toFields(), Fr.ZERO, getTreeHeight(treeId));
|
|
415
404
|
}
|
|
416
405
|
|
|
406
|
+
export const getConstantRollupData = runInSpan(
|
|
407
|
+
'BlockBuilderHelpers',
|
|
408
|
+
'getConstantRollupData',
|
|
409
|
+
async (_span, globalVariables: GlobalVariables, db: MerkleTreeReadOperations): Promise<ConstantRollupData> => {
|
|
410
|
+
return ConstantRollupData.from({
|
|
411
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
412
|
+
protocolContractTreeRoot,
|
|
413
|
+
lastArchive: await getTreeSnapshot(MerkleTreeId.ARCHIVE, db),
|
|
414
|
+
globalVariables,
|
|
415
|
+
});
|
|
416
|
+
},
|
|
417
|
+
);
|
|
418
|
+
|
|
417
419
|
export async function getTreeSnapshot(id: MerkleTreeId, db: MerkleTreeReadOperations): Promise<AppendOnlyTreeSnapshot> {
|
|
418
420
|
const treeInfo = await db.getTreeInfo(id);
|
|
419
421
|
return new AppendOnlyTreeSnapshot(Fr.fromBuffer(treeInfo.root), Number(treeInfo.size));
|
|
@@ -534,17 +536,17 @@ function validateSimulatedTree(
|
|
|
534
536
|
}
|
|
535
537
|
|
|
536
538
|
export function validateTx(tx: ProcessedTx) {
|
|
537
|
-
const txHeader = tx.
|
|
538
|
-
if (txHeader.state.l1ToL2MessageTree.
|
|
539
|
+
const txHeader = tx.constants.historicalHeader;
|
|
540
|
+
if (txHeader.state.l1ToL2MessageTree.isZero()) {
|
|
539
541
|
throw new Error(`Empty L1 to L2 messages tree in tx: ${toFriendlyJSON(tx)}`);
|
|
540
542
|
}
|
|
541
|
-
if (txHeader.state.partial.noteHashTree.
|
|
543
|
+
if (txHeader.state.partial.noteHashTree.isZero()) {
|
|
542
544
|
throw new Error(`Empty note hash tree in tx: ${toFriendlyJSON(tx)}`);
|
|
543
545
|
}
|
|
544
|
-
if (txHeader.state.partial.nullifierTree.
|
|
546
|
+
if (txHeader.state.partial.nullifierTree.isZero()) {
|
|
545
547
|
throw new Error(`Empty nullifier tree in tx: ${toFriendlyJSON(tx)}`);
|
|
546
548
|
}
|
|
547
|
-
if (txHeader.state.partial.publicDataTree.
|
|
549
|
+
if (txHeader.state.partial.publicDataTree.isZero()) {
|
|
548
550
|
throw new Error(`Empty public data tree in tx: ${toFriendlyJSON(tx)}`);
|
|
549
551
|
}
|
|
550
552
|
}
|
|
@@ -19,11 +19,11 @@ import type { PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/ser
|
|
|
19
19
|
import { type ParityPublicInputs, RootParityInput, RootParityInputs } from '@aztec/stdlib/parity';
|
|
20
20
|
import {
|
|
21
21
|
type BaseOrMergeRollupPublicInputs,
|
|
22
|
-
BlockConstantData,
|
|
23
22
|
type BlockRootOrBlockMergePublicInputs,
|
|
24
23
|
BlockRootRollupBlobData,
|
|
25
24
|
BlockRootRollupData,
|
|
26
25
|
BlockRootRollupInputs,
|
|
26
|
+
ConstantRollupData,
|
|
27
27
|
EmptyBlockRootRollupInputs,
|
|
28
28
|
MergeRollupInputs,
|
|
29
29
|
PreviousRollupData,
|
|
@@ -64,7 +64,6 @@ export class BlockProvingState {
|
|
|
64
64
|
public readonly index: number,
|
|
65
65
|
public readonly globalVariables: GlobalVariables,
|
|
66
66
|
public readonly newL1ToL2Messages: Fr[],
|
|
67
|
-
public readonly l1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot,
|
|
68
67
|
private readonly l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>,
|
|
69
68
|
private readonly l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot,
|
|
70
69
|
private readonly lastArchiveSnapshot: AppendOnlyTreeSnapshot,
|
|
@@ -184,9 +183,8 @@ export class BlockProvingState {
|
|
|
184
183
|
const data = this.#getBlockRootRollupData(proverId);
|
|
185
184
|
|
|
186
185
|
if (this.totalNumTxs === 0) {
|
|
187
|
-
const constants =
|
|
186
|
+
const constants = ConstantRollupData.from({
|
|
188
187
|
lastArchive: this.lastArchiveSnapshot,
|
|
189
|
-
lastL1ToL2: this.l1ToL2MessageTreeSnapshot,
|
|
190
188
|
globalVariables: this.globalVariables,
|
|
191
189
|
vkTreeRoot: getVKTreeRoot(),
|
|
192
190
|
protocolContractTreeRoot,
|
|
@@ -227,23 +225,21 @@ export class BlockProvingState {
|
|
|
227
225
|
throw new Error('Root parity is not ready.');
|
|
228
226
|
}
|
|
229
227
|
|
|
230
|
-
// Use the new block header
|
|
231
|
-
const
|
|
232
|
-
const
|
|
233
|
-
const lastL1ToL2 = this.l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
228
|
+
// Use the new block header and archive of the current block as the previous header and archiver of the next padding block.
|
|
229
|
+
const newBlockHeader = await this.buildHeaderFromProvingOutputs();
|
|
230
|
+
const newArchive = this.blockRootProvingOutput!.inputs.newArchive;
|
|
234
231
|
|
|
235
232
|
const data = BlockRootRollupData.from({
|
|
236
233
|
l1ToL2Roots: this.#getRootParityData(this.rootParityProvingOutput!),
|
|
237
234
|
l1ToL2MessageSubtreeSiblingPath: this.l1ToL2MessageSubtreeSiblingPath,
|
|
238
235
|
previousArchiveSiblingPath: this.lastArchiveSiblingPath,
|
|
239
236
|
newArchiveSiblingPath: this.newArchiveSiblingPath,
|
|
240
|
-
previousBlockHeader,
|
|
237
|
+
previousBlockHeader: newBlockHeader,
|
|
241
238
|
proverId,
|
|
242
239
|
});
|
|
243
240
|
|
|
244
|
-
const constants =
|
|
245
|
-
lastArchive,
|
|
246
|
-
lastL1ToL2,
|
|
241
|
+
const constants = ConstantRollupData.from({
|
|
242
|
+
lastArchive: newArchive,
|
|
247
243
|
globalVariables: this.globalVariables,
|
|
248
244
|
vkTreeRoot: getVKTreeRoot(),
|
|
249
245
|
protocolContractTreeRoot,
|
|
@@ -70,7 +70,6 @@ export class EpochProvingState {
|
|
|
70
70
|
public startNewBlock(
|
|
71
71
|
globalVariables: GlobalVariables,
|
|
72
72
|
l1ToL2Messages: Fr[],
|
|
73
|
-
l1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot,
|
|
74
73
|
l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>,
|
|
75
74
|
l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot,
|
|
76
75
|
lastArchiveSnapshot: AppendOnlyTreeSnapshot,
|
|
@@ -83,7 +82,6 @@ export class EpochProvingState {
|
|
|
83
82
|
index,
|
|
84
83
|
globalVariables,
|
|
85
84
|
l1ToL2Messages,
|
|
86
|
-
l1ToL2MessageTreeSnapshot,
|
|
87
85
|
l1ToL2MessageSubtreeSiblingPath,
|
|
88
86
|
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
89
87
|
lastArchiveSnapshot,
|
|
@@ -158,7 +156,7 @@ export class EpochProvingState {
|
|
|
158
156
|
return new BlockMergeRollupInputs([this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)]);
|
|
159
157
|
}
|
|
160
158
|
|
|
161
|
-
public getRootRollupInputs() {
|
|
159
|
+
public getRootRollupInputs(proverId: Fr) {
|
|
162
160
|
const [left, right] = this.#getChildProofsForRoot();
|
|
163
161
|
if (!left || !right) {
|
|
164
162
|
throw new Error('At lease one child is not ready.');
|
|
@@ -166,6 +164,7 @@ export class EpochProvingState {
|
|
|
166
164
|
|
|
167
165
|
return RootRollupInputs.from({
|
|
168
166
|
previousRollupData: [this.#getPreviousRollupData(left), this.#getPreviousRollupData(right)],
|
|
167
|
+
proverId,
|
|
169
168
|
});
|
|
170
169
|
}
|
|
171
170
|
|
|
@@ -145,12 +145,8 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
145
145
|
this.dbs.set(globalVariables.blockNumber.toNumber(), db);
|
|
146
146
|
|
|
147
147
|
// we start the block by enqueueing all of the base parity circuits
|
|
148
|
-
const {
|
|
149
|
-
|
|
150
|
-
l1ToL2MessageSubtreeSiblingPath,
|
|
151
|
-
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
152
|
-
baseParityInputs,
|
|
153
|
-
} = await this.prepareBaseParityInputs(l1ToL2Messages, db);
|
|
148
|
+
const { l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, baseParityInputs } =
|
|
149
|
+
await this.prepareBaseParityInputs(l1ToL2Messages, db);
|
|
154
150
|
|
|
155
151
|
// Get archive snapshot before this block lands
|
|
156
152
|
const lastArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
@@ -160,7 +156,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
160
156
|
const blockProvingState = this.provingState!.startNewBlock(
|
|
161
157
|
globalVariables,
|
|
162
158
|
l1ToL2Messages,
|
|
163
|
-
l1ToL2MessageTreeSnapshot,
|
|
164
159
|
l1ToL2MessageSubtreeSiblingPath,
|
|
165
160
|
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
166
161
|
lastArchive,
|
|
@@ -189,7 +184,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
189
184
|
logger.warn(`Provided no txs to orchestrator addTxs.`);
|
|
190
185
|
return;
|
|
191
186
|
}
|
|
192
|
-
const blockNumber = txs[0].globalVariables.blockNumber.toNumber();
|
|
187
|
+
const blockNumber = txs[0].constants.globalVariables.blockNumber.toNumber();
|
|
193
188
|
const provingState = this.provingState?.getBlockProvingStateByBlockNumber(blockNumber!);
|
|
194
189
|
if (!provingState) {
|
|
195
190
|
throw new Error(`Block proving state for ${blockNumber} not found`);
|
|
@@ -460,8 +455,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
460
455
|
BaseParityInputs.fromSlice(l1ToL2MessagesPadded, i, getVKTreeRoot()),
|
|
461
456
|
);
|
|
462
457
|
|
|
463
|
-
const l1ToL2MessageTreeSnapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
464
|
-
|
|
465
458
|
const l1ToL2MessageSubtreeSiblingPath = assertLength(
|
|
466
459
|
await getSubtreeSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, L1_TO_L2_MSG_SUBTREE_HEIGHT, db),
|
|
467
460
|
L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH,
|
|
@@ -472,7 +465,6 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
472
465
|
const l1ToL2MessageTreeSnapshotAfterInsertion = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
473
466
|
|
|
474
467
|
return {
|
|
475
|
-
l1ToL2MessageTreeSnapshot,
|
|
476
468
|
l1ToL2MessageSubtreeSiblingPath,
|
|
477
469
|
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
478
470
|
baseParityInputs,
|
|
@@ -497,13 +489,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
497
489
|
// We build the base rollup inputs using a mock proof and verification key.
|
|
498
490
|
// These will be overwritten later once we have proven the tube circuit and any public kernels
|
|
499
491
|
const [ms, hints] = await elapsed(
|
|
500
|
-
insertSideEffectsAndBuildBaseRollupHints(
|
|
501
|
-
tx,
|
|
502
|
-
provingState.globalVariables,
|
|
503
|
-
provingState.l1ToL2MessageTreeSnapshot,
|
|
504
|
-
db,
|
|
505
|
-
provingState.spongeBlobState,
|
|
506
|
-
),
|
|
492
|
+
insertSideEffectsAndBuildBaseRollupHints(tx, provingState.globalVariables, db, provingState.spongeBlobState),
|
|
507
493
|
);
|
|
508
494
|
|
|
509
495
|
this.metrics.recordBaseRollupInputs(ms);
|
|
@@ -839,7 +825,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
839
825
|
|
|
840
826
|
logger.debug(`Preparing root rollup`);
|
|
841
827
|
|
|
842
|
-
const inputs = provingState.getRootRollupInputs();
|
|
828
|
+
const inputs = provingState.getRootRollupInputs(this.proverId);
|
|
843
829
|
|
|
844
830
|
this.deferredProving(
|
|
845
831
|
provingState,
|