@aztec/prover-client 0.85.0 → 0.86.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/mocks/test_context.d.ts +3 -3
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +7 -10
- package/dest/orchestrator/block-building-helpers.d.ts +8 -2
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +7 -8
- package/dest/orchestrator/block-proving-state.d.ts +3 -3
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +7 -3
- package/dest/orchestrator/epoch-proving-state.d.ts +1 -1
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +2 -2
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +12 -5
- package/package.json +15 -17
- package/src/mocks/test_context.ts +6 -23
- package/src/orchestrator/block-building-helpers.ts +9 -15
- package/src/orchestrator/block-proving-state.ts +4 -3
- package/src/orchestrator/epoch-proving-state.ts +2 -0
- package/src/orchestrator/orchestrator.ts +15 -3
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { BBProverConfig } from '@aztec/bb-prover';
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
import type { Logger } from '@aztec/foundation/log';
|
|
4
|
-
import {
|
|
4
|
+
import { PublicTxSimulationTester } from '@aztec/simulator/public/fixtures';
|
|
5
|
+
import { PublicProcessor } from '@aztec/simulator/server';
|
|
5
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
7
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
7
8
|
import type { ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
@@ -13,7 +14,6 @@ import { ProvingOrchestrator } from '../orchestrator/index.js';
|
|
|
13
14
|
import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
|
|
14
15
|
import { TestBroker } from '../test/mock_prover.js';
|
|
15
16
|
export declare class TestContext {
|
|
16
|
-
publicTxSimulator: PublicTxSimulator;
|
|
17
17
|
worldState: MerkleTreeAdminDatabase;
|
|
18
18
|
publicProcessor: PublicProcessor;
|
|
19
19
|
globalVariables: GlobalVariables;
|
|
@@ -28,7 +28,7 @@ export declare class TestContext {
|
|
|
28
28
|
logger: Logger;
|
|
29
29
|
private headers;
|
|
30
30
|
private feePayerBalance;
|
|
31
|
-
constructor(
|
|
31
|
+
constructor(worldState: MerkleTreeAdminDatabase, publicProcessor: PublicProcessor, globalVariables: GlobalVariables, prover: ServerCircuitProver, broker: TestBroker, brokerProverFacade: BrokerCircuitProverFacade, orchestrator: TestProvingOrchestrator, blockNumber: number, feePayer: AztecAddress, initialFeePayerBalance: Fr, directoriesToCleanup: string[], tester: PublicTxSimulationTester, logger: Logger);
|
|
32
32
|
get epochProver(): TestProvingOrchestrator;
|
|
33
33
|
static new(logger: Logger, proverCount?: number, createProver?: (bbConfig: BBProverConfig) => Promise<ServerCircuitProver>, blockNumber?: number): Promise<TestContext>;
|
|
34
34
|
getFork(): Promise<import("@aztec/stdlib/trees").MerkleTreeWriteOperations>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_context.d.ts","sourceRoot":"","sources":["../../src/mocks/test_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAKpD,OAAO,
|
|
1
|
+
{"version":3,"file":"test_context.d.ts","sourceRoot":"","sources":["../../src/mocks/test_context.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ import { TestDateProvider } from '@aztec/foundation/timer';
|
|
|
4
4
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
5
5
|
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
6
6
|
import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
7
|
-
import {
|
|
7
|
+
import { PublicTxSimulationTester, SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
|
|
8
|
+
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
8
9
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
9
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
10
11
|
import { makeBloatedProcessedTx } from '@aztec/stdlib/testing';
|
|
@@ -21,7 +22,6 @@ import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facad
|
|
|
21
22
|
import { TestBroker } from '../test/mock_prover.js';
|
|
22
23
|
import { getEnvironmentConfig, getSimulationProvider, makeGlobals, updateExpectedTreesFromTxs } from './fixtures.js';
|
|
23
24
|
export class TestContext {
|
|
24
|
-
publicTxSimulator;
|
|
25
25
|
worldState;
|
|
26
26
|
publicProcessor;
|
|
27
27
|
globalVariables;
|
|
@@ -36,8 +36,7 @@ export class TestContext {
|
|
|
36
36
|
logger;
|
|
37
37
|
headers;
|
|
38
38
|
feePayerBalance;
|
|
39
|
-
constructor(
|
|
40
|
-
this.publicTxSimulator = publicTxSimulator;
|
|
39
|
+
constructor(worldState, publicProcessor, globalVariables, prover, broker, brokerProverFacade, orchestrator, blockNumber, feePayer, initialFeePayerBalance, directoriesToCleanup, tester, logger){
|
|
41
40
|
this.worldState = worldState;
|
|
42
41
|
this.publicProcessor = publicProcessor;
|
|
43
42
|
this.globalVariables = globalVariables;
|
|
@@ -66,14 +65,12 @@ export class TestContext {
|
|
|
66
65
|
new PublicDataTreeLeaf(feePayerSlot, initialFeePayerBalance)
|
|
67
66
|
];
|
|
68
67
|
// Separated dbs for public processor and prover - see public_processor for context
|
|
69
|
-
const ws = await NativeWorldStateService.tmp(
|
|
68
|
+
const ws = await NativeWorldStateService.tmp(/*rollupAddress=*/ undefined, /*cleanupTmpDir=*/ true, prefilledPublicData);
|
|
70
69
|
const merkleTrees = await ws.fork();
|
|
71
70
|
const contractDataSource = new SimpleContractDataSource();
|
|
72
|
-
const treesDB = new PublicTreesDB(merkleTrees);
|
|
73
|
-
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
74
71
|
const tester = new PublicTxSimulationTester(merkleTrees, contractDataSource);
|
|
75
|
-
const
|
|
76
|
-
const processor =
|
|
72
|
+
const processorFactory = new PublicProcessorFactory(contractDataSource, new TestDateProvider());
|
|
73
|
+
const processor = processorFactory.create(merkleTrees, globalVariables, /*skipFeeEnforcement=*/ false);
|
|
77
74
|
let localProver;
|
|
78
75
|
const config = await getEnvironmentConfig(logger);
|
|
79
76
|
if (!config) {
|
|
@@ -96,7 +93,7 @@ export class TestContext {
|
|
|
96
93
|
const orchestrator = new TestProvingOrchestrator(ws, facade, Fr.ZERO);
|
|
97
94
|
await broker.start();
|
|
98
95
|
facade.start();
|
|
99
|
-
return new this(
|
|
96
|
+
return new this(ws, processor, globalVariables, localProver, broker, facade, orchestrator, blockNumber, feePayer, initialFeePayerBalance, directoriesToCleanup, tester, logger);
|
|
100
97
|
}
|
|
101
98
|
getFork() {
|
|
102
99
|
return this.worldState.fork();
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
3
|
import { Blob, type SpongeBlob } from '@aztec/blob-lib';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
-
import type { Logger } from '@aztec/foundation/log';
|
|
6
5
|
import { type Tuple } from '@aztec/foundation/serialize';
|
|
7
6
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
8
7
|
import { PublicDataHint } from '@aztec/stdlib/avm';
|
|
@@ -29,7 +28,7 @@ export declare const buildBlobHints: (txEffects: TxEffect[]) => Promise<{
|
|
|
29
28
|
blobs: Blob[];
|
|
30
29
|
blobsHash: Fr;
|
|
31
30
|
}>;
|
|
32
|
-
export declare const buildHeaderFromCircuitOutputs: (previousRollupData: BaseOrMergeRollupPublicInputs[], parityPublicInputs: ParityPublicInputs, rootRollupOutputs: BlockRootOrBlockMergePublicInputs, endState: StateReference
|
|
31
|
+
export declare const buildHeaderFromCircuitOutputs: (previousRollupData: BaseOrMergeRollupPublicInputs[], parityPublicInputs: ParityPublicInputs, rootRollupOutputs: BlockRootOrBlockMergePublicInputs, endState: StateReference) => BlockHeader;
|
|
33
32
|
export declare const buildHeaderAndBodyFromTxs: (txs: ProcessedTx[], globalVariables: GlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeReadOperations) => Promise<{
|
|
34
33
|
header: BlockHeader;
|
|
35
34
|
body: Body;
|
|
@@ -37,6 +36,13 @@ export declare const buildHeaderAndBodyFromTxs: (txs: ProcessedTx[], globalVaria
|
|
|
37
36
|
export declare function getBlobsHashFromBlobs(inputs: Blob[]): Buffer;
|
|
38
37
|
export declare function validateBlockRootOutput(blockRootOutput: BlockRootOrBlockMergePublicInputs, blockHeader: BlockHeader, db: MerkleTreeReadOperations): Promise<void>;
|
|
39
38
|
export declare const validateState: (state: StateReference, db: MerkleTreeReadOperations) => Promise<void>;
|
|
39
|
+
export declare function getLastSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<Tuple<Fr, {
|
|
40
|
+
readonly 1: 40;
|
|
41
|
+
readonly 4: 29;
|
|
42
|
+
readonly 3: 39;
|
|
43
|
+
readonly 0: 40;
|
|
44
|
+
readonly 2: 40;
|
|
45
|
+
}[TID]>>;
|
|
40
46
|
export declare function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<Tuple<Fr, {
|
|
41
47
|
readonly 1: 40;
|
|
42
48
|
readonly 4: 29;
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,6 @@ import { ConstantRollupData, PrivateBaseRollupHints, PrivateBaseStateDiffHints,
|
|
|
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
|
-
import { inspect } from 'util';
|
|
20
19
|
// Builds the hints for base rollup. Updating the contract, nullifier, and data trees in the process.
|
|
21
20
|
export const buildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx, globalVariables, db, startSpongeBlob)=>{
|
|
22
21
|
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
@@ -116,7 +115,7 @@ export const buildBlobHints = runInSpan('BlockBuilderHelpers', 'buildBlobHints',
|
|
|
116
115
|
blobsHash
|
|
117
116
|
};
|
|
118
117
|
});
|
|
119
|
-
export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'buildHeaderFromCircuitOutputs',
|
|
118
|
+
export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'buildHeaderFromCircuitOutputs', (_span, previousRollupData, parityPublicInputs, rootRollupOutputs, endState)=>{
|
|
120
119
|
if (previousRollupData.length > 2) {
|
|
121
120
|
throw new Error(`There can't be more than 2 previous rollups. Received ${previousRollupData.length}.`);
|
|
122
121
|
}
|
|
@@ -129,12 +128,7 @@ export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'b
|
|
|
129
128
|
const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityPublicInputs.shaRoot.toBuffer(), outHash);
|
|
130
129
|
const accumulatedFees = previousRollupData.reduce((sum, d)=>sum.add(d.accumulatedFees), Fr.ZERO);
|
|
131
130
|
const accumulatedManaUsed = previousRollupData.reduce((sum, d)=>sum.add(d.accumulatedManaUsed), Fr.ZERO);
|
|
132
|
-
|
|
133
|
-
if (!(await header.hash()).equals(rootRollupOutputs.endBlockHash)) {
|
|
134
|
-
logger?.error(`Block header mismatch when building header from circuit outputs.` + `\n\nHeader: ${inspect(header)}` + `\n\nCircuit: ${toFriendlyJSON(rootRollupOutputs)}`);
|
|
135
|
-
throw new Error(`Block header mismatch when building from circuit outputs`);
|
|
136
|
-
}
|
|
137
|
-
return header;
|
|
131
|
+
return new BlockHeader(rootRollupOutputs.previousArchive, contentCommitment, endState, rootRollupOutputs.endGlobalVariables, accumulatedFees, accumulatedManaUsed);
|
|
138
132
|
});
|
|
139
133
|
export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs, globalVariables, l1ToL2Messages, db)=>{
|
|
140
134
|
span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber.toNumber());
|
|
@@ -191,6 +185,11 @@ export const validateState = runInSpan('BlockBuilderHelpers', 'validateState', a
|
|
|
191
185
|
validatePartialState(state.partial, snapshots);
|
|
192
186
|
validateSimulatedTree(await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db), state.l1ToL2MessageTree, 'L1ToL2MessageTree');
|
|
193
187
|
});
|
|
188
|
+
export async function getLastSiblingPath(treeId, db) {
|
|
189
|
+
const { size } = await db.getTreeInfo(treeId);
|
|
190
|
+
const path = await db.getSiblingPath(treeId, size - 1n);
|
|
191
|
+
return padArrayEnd(path.toFields(), Fr.ZERO, getTreeHeight(treeId));
|
|
192
|
+
}
|
|
194
193
|
export async function getRootTreeSiblingPath(treeId, db) {
|
|
195
194
|
const { size } = await db.getTreeInfo(treeId);
|
|
196
195
|
const path = await db.getSiblingPath(treeId, size);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { SpongeBlob } from '@aztec/blob-lib';
|
|
2
2
|
import { type ARCHIVE_HEIGHT, type L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, type NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
|
|
3
3
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
import type { Logger } from '@aztec/foundation/log';
|
|
5
4
|
import type { Tuple } from '@aztec/foundation/serialize';
|
|
6
5
|
import { type TreeNodeLocation } from '@aztec/foundation/trees';
|
|
7
6
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
@@ -25,6 +24,7 @@ export declare class BlockProvingState {
|
|
|
25
24
|
private readonly l1ToL2MessageSubtreeSiblingPath;
|
|
26
25
|
private readonly l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
27
26
|
private readonly lastArchiveSnapshot;
|
|
27
|
+
private readonly lastArchiveSiblingPath;
|
|
28
28
|
private readonly newArchiveSiblingPath;
|
|
29
29
|
private readonly previousBlockHeader;
|
|
30
30
|
private readonly parentEpoch;
|
|
@@ -38,7 +38,7 @@ export declare class BlockProvingState {
|
|
|
38
38
|
totalNumTxs: number;
|
|
39
39
|
private txs;
|
|
40
40
|
error: string | undefined;
|
|
41
|
-
constructor(index: number, globalVariables: GlobalVariables, newL1ToL2Messages: Fr[], l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>, l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, lastArchiveSnapshot: AppendOnlyTreeSnapshot, newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, previousBlockHeader: BlockHeader, parentEpoch: EpochProvingState);
|
|
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);
|
|
42
42
|
get blockNumber(): number;
|
|
43
43
|
startNewBlock(numTxs: number, numBlobFields: number): void;
|
|
44
44
|
addNewTx(tx: TxProvingState): number;
|
|
@@ -65,7 +65,7 @@ export declare class BlockProvingState {
|
|
|
65
65
|
getPaddingBlockRootInputs(proverId: Fr): Promise<EmptyBlockRootRollupInputs>;
|
|
66
66
|
getRootParityInputs(): RootParityInputs;
|
|
67
67
|
getTxProvingState(txIndex: number): TxProvingState;
|
|
68
|
-
buildHeaderFromProvingOutputs(
|
|
68
|
+
buildHeaderFromProvingOutputs(): Promise<BlockHeader>;
|
|
69
69
|
isReadyForMergeRollup(location: TreeNodeLocation): boolean;
|
|
70
70
|
isReadyForBlockRootRollup(): boolean;
|
|
71
71
|
isReadyForRootParity(): boolean;
|
|
@@ -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,EAI/C,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
19
19
|
l1ToL2MessageSubtreeSiblingPath;
|
|
20
20
|
l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
21
21
|
lastArchiveSnapshot;
|
|
22
|
+
lastArchiveSiblingPath;
|
|
22
23
|
newArchiveSiblingPath;
|
|
23
24
|
previousBlockHeader;
|
|
24
25
|
parentEpoch;
|
|
@@ -32,13 +33,14 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
32
33
|
totalNumTxs;
|
|
33
34
|
txs;
|
|
34
35
|
error;
|
|
35
|
-
constructor(index, globalVariables, newL1ToL2Messages, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, newArchiveSiblingPath, previousBlockHeader, parentEpoch){
|
|
36
|
+
constructor(index, globalVariables, newL1ToL2Messages, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, lastArchiveSiblingPath, newArchiveSiblingPath, previousBlockHeader, parentEpoch){
|
|
36
37
|
this.index = index;
|
|
37
38
|
this.globalVariables = globalVariables;
|
|
38
39
|
this.newL1ToL2Messages = newL1ToL2Messages;
|
|
39
40
|
this.l1ToL2MessageSubtreeSiblingPath = l1ToL2MessageSubtreeSiblingPath;
|
|
40
41
|
this.l1ToL2MessageTreeSnapshotAfterInsertion = l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
41
42
|
this.lastArchiveSnapshot = lastArchiveSnapshot;
|
|
43
|
+
this.lastArchiveSiblingPath = lastArchiveSiblingPath;
|
|
42
44
|
this.newArchiveSiblingPath = newArchiveSiblingPath;
|
|
43
45
|
this.previousBlockHeader = previousBlockHeader;
|
|
44
46
|
this.parentEpoch = parentEpoch;
|
|
@@ -161,6 +163,7 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
161
163
|
const data = BlockRootRollupData.from({
|
|
162
164
|
l1ToL2Roots: this.#getRootParityData(this.rootParityProvingOutput),
|
|
163
165
|
l1ToL2MessageSubtreeSiblingPath: this.l1ToL2MessageSubtreeSiblingPath,
|
|
166
|
+
previousArchiveSiblingPath: this.lastArchiveSiblingPath,
|
|
164
167
|
newArchiveSiblingPath: this.newArchiveSiblingPath,
|
|
165
168
|
previousBlockHeader: newBlockHeader,
|
|
166
169
|
proverId
|
|
@@ -188,7 +191,7 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
188
191
|
getTxProvingState(txIndex) {
|
|
189
192
|
return this.txs[txIndex];
|
|
190
193
|
}
|
|
191
|
-
async buildHeaderFromProvingOutputs(
|
|
194
|
+
async buildHeaderFromProvingOutputs() {
|
|
192
195
|
const previousRollupData = this.totalNumTxs === 0 ? [] : await Promise.all(this.#getChildProofsForBlockRoot().map((p)=>this.#getPreviousRollupData(p)));
|
|
193
196
|
let endPartialState = this.previousBlockHeader.state.partial;
|
|
194
197
|
if (this.totalNumTxs !== 0) {
|
|
@@ -200,7 +203,7 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
200
203
|
endPartialState = lastRollup.inputs.end;
|
|
201
204
|
}
|
|
202
205
|
const endState = new StateReference(this.l1ToL2MessageTreeSnapshotAfterInsertion, endPartialState);
|
|
203
|
-
return buildHeaderFromCircuitOutputs(previousRollupData.map((d)=>d.baseOrMergeRollupPublicInputs), this.rootParityProvingOutput.inputs, this.blockRootProvingOutput.inputs, endState
|
|
206
|
+
return buildHeaderFromCircuitOutputs(previousRollupData.map((d)=>d.baseOrMergeRollupPublicInputs), this.rootParityProvingOutput.inputs, this.blockRootProvingOutput.inputs, endState);
|
|
204
207
|
}
|
|
205
208
|
isReadyForMergeRollup(location) {
|
|
206
209
|
return this.baseOrMergeProvingOutputs.getSibling(location) !== undefined;
|
|
@@ -229,6 +232,7 @@ import { buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-
|
|
|
229
232
|
return BlockRootRollupData.from({
|
|
230
233
|
l1ToL2Roots: this.#getRootParityData(this.rootParityProvingOutput),
|
|
231
234
|
l1ToL2MessageSubtreeSiblingPath: this.l1ToL2MessageSubtreeSiblingPath,
|
|
235
|
+
previousArchiveSiblingPath: this.lastArchiveSiblingPath,
|
|
232
236
|
newArchiveSiblingPath: this.newArchiveSiblingPath,
|
|
233
237
|
previousBlockHeader: this.previousBlockHeader,
|
|
234
238
|
proverId
|
|
@@ -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[], l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>, l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, lastArchiveSnapshot: AppendOnlyTreeSnapshot, newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, previousBlockHeader: BlockHeader): BlockProvingState;
|
|
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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/epoch-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,wCAAwC,EAC7C,KAAK,yCAAyC,EAG/C,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAqB,KAAK,gBAAgB,EAAuB,MAAM,yBAAyB,CAAC;AAExG,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;AAErE,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,+BAA+B,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,wCAAwC,CAAC,EAC3F,uCAAuC,EAAE,sBAAsB,EAC/D,mBAAmB,EAAE,sBAAsB,EAC3C,qBAAqB,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,EACvD,mBAAmB,EAAE,WAAW,GAC/B,iBAAiB;
|
|
1
|
+
{"version":3,"file":"epoch-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/epoch-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,wCAAwC,EAC7C,KAAK,yCAAyC,EAG/C,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAqB,KAAK,gBAAgB,EAAuB,MAAM,yBAAyB,CAAC;AAExG,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;AAErE,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,+BAA+B,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,wCAAwC,CAAC,EAC3F,uCAAuC,EAAE,sBAAsB,EAC/D,mBAAmB,EAAE,sBAAsB,EAC3C,sBAAsB,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,EACxD,qBAAqB,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,EACvD,mBAAmB,EAAE,WAAW,GAC/B,iBAAiB;IAsBb,WAAW;IAQX,iBAAiB;IAIjB,uBAAuB,CAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,6BAA6B,CAClC,iCAAiC,EACjC,OAAO,yCAAyC,CACjD,GACA,gBAAgB;IAIZ,wBAAwB,CAC7B,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,6BAA6B,CAClC,iCAAiC,EACjC,OAAO,yCAAyC,CACjD;IAKI,kBAAkB,CAAC,KAAK,EAAE,6BAA6B,CAAC,sBAAsB,CAAC;IAI/E,wBAAwB,CAC7B,KAAK,EAAE,6BAA6B,CAClC,iCAAiC,EACjC,OAAO,yCAAyC,CACjD;IAKI,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB;IAI5C,yBAAyB,CAAC,aAAa,EAAE,gBAAgB;IASzD,mBAAmB,CAAC,QAAQ,EAAE,EAAE;IAYhC,yBAAyB,CAAC,QAAQ,EAAE,EAAE;IAStC,iCAAiC,CAAC,WAAW,EAAE,MAAM;IAIrD,mBAAmB,IAAI;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,YAAY,EAAE,sBAAsB,CAAA;KAAE;IAW7E,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB;IAK/C,oBAAoB;IAMpB,MAAM;IAMN,MAAM,CAAC,MAAM,EAAE,MAAM;IAUrB,OAAO,CAAC,MAAM,EAAE,aAAa;CAgCrC"}
|
|
@@ -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, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, newArchiveSiblingPath, previousBlockHeader) {
|
|
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, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, newArchiveSiblingPath, previousBlockHeader, this);
|
|
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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAQ9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EAGxB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAWzC,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;AAEtH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAQ9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EAGxB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAWzC,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;AAEtH,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;IA8CjB,OAAO,CAAC,4BAA4B;CAWrC"}
|
|
@@ -23,7 +23,7 @@ import { toNumBlobFields } from '@aztec/stdlib/tx';
|
|
|
23
23
|
import { VerificationKeyData } from '@aztec/stdlib/vks';
|
|
24
24
|
import { Attributes, getTelemetryClient, trackSpan, wrapCallbackInSpan } from '@aztec/telemetry-client';
|
|
25
25
|
import { inspect } from 'util';
|
|
26
|
-
import { buildBaseRollupHints, buildHeaderAndBodyFromTxs, getRootTreeSiblingPath, getSubtreeSiblingPath, getTreeSnapshot, validatePartialState, validateTx } from './block-building-helpers.js';
|
|
26
|
+
import { buildBaseRollupHints, buildHeaderAndBodyFromTxs, getLastSiblingPath, getRootTreeSiblingPath, getSubtreeSiblingPath, getTreeSnapshot, validatePartialState, validateTx } from './block-building-helpers.js';
|
|
27
27
|
import { EpochProvingState } from './epoch-proving-state.js';
|
|
28
28
|
import { ProvingOrchestratorMetrics } from './orchestrator_metrics.js';
|
|
29
29
|
import { TxProvingState } from './tx-proving-state.js';
|
|
@@ -101,8 +101,9 @@ const logger = createLogger('prover-client:orchestrator');
|
|
|
101
101
|
const { l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, baseParityInputs } = await this.prepareBaseParityInputs(l1ToL2Messages, db);
|
|
102
102
|
// Get archive snapshot before this block lands
|
|
103
103
|
const lastArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
104
|
+
const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
104
105
|
const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
105
|
-
const blockProvingState = this.provingState.startNewBlock(globalVariables, l1ToL2Messages, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchive, newArchiveSiblingPath, previousBlockHeader);
|
|
106
|
+
const blockProvingState = this.provingState.startNewBlock(globalVariables, l1ToL2Messages, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchive, lastArchiveSiblingPath, newArchiveSiblingPath, previousBlockHeader);
|
|
106
107
|
// Enqueue base parity circuits for the block
|
|
107
108
|
for(let i = 0; i < baseParityInputs.length; i++){
|
|
108
109
|
this.enqueueBaseParityCircuit(blockProvingState, baseParityInputs[i], i);
|
|
@@ -462,10 +463,16 @@ const logger = createLogger('prover-client:orchestrator');
|
|
|
462
463
|
}
|
|
463
464
|
}), async (result)=>{
|
|
464
465
|
provingState.setBlockRootRollupProof(result);
|
|
465
|
-
const header = await provingState.buildHeaderFromProvingOutputs(
|
|
466
|
+
const header = await provingState.buildHeaderFromProvingOutputs();
|
|
466
467
|
if (!(await header.hash()).equals(await provingState.block.header.hash())) {
|
|
467
|
-
logger.error(`Block header mismatch
|
|
468
|
-
provingState.reject(`Block header hash mismatch
|
|
468
|
+
logger.error(`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(provingState.block.header)}`);
|
|
469
|
+
provingState.reject(`Block header hash mismatch.`);
|
|
470
|
+
}
|
|
471
|
+
const dbArchiveRoot = provingState.block.archive.root;
|
|
472
|
+
const circuitArchiveRoot = result.inputs.newArchive.root;
|
|
473
|
+
if (!dbArchiveRoot.equals(circuitArchiveRoot)) {
|
|
474
|
+
logger.error(`New archive root mismatch.\nCircuit: ${result.inputs.newArchive.root}\nComputed: ${dbArchiveRoot}`);
|
|
475
|
+
provingState.reject(`New archive root mismatch.`);
|
|
469
476
|
}
|
|
470
477
|
logger.debug(`Completed ${rollupType} proof for block ${provingState.block.number}`);
|
|
471
478
|
// validatePartialState(result.inputs.end, tx.treeSnapshots); // TODO(palla/prover)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.86.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -25,8 +25,6 @@
|
|
|
25
25
|
"build": "yarn clean && tsc -b",
|
|
26
26
|
"build:dev": "tsc -b --watch",
|
|
27
27
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
28
|
-
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
29
|
-
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
30
28
|
"bb": "node --no-warnings ./dest/bb/index.js",
|
|
31
29
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --testTimeout=3500000 --forceExit",
|
|
32
30
|
"test:debug": "LOG_LEVEL=debug NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --testTimeout=1500000 --forceExit --testNamePattern prover/bb_prover/parity",
|
|
@@ -66,19 +64,19 @@
|
|
|
66
64
|
]
|
|
67
65
|
},
|
|
68
66
|
"dependencies": {
|
|
69
|
-
"@aztec/bb-prover": "0.
|
|
70
|
-
"@aztec/blob-lib": "0.
|
|
71
|
-
"@aztec/constants": "0.
|
|
72
|
-
"@aztec/ethereum": "0.
|
|
73
|
-
"@aztec/foundation": "0.
|
|
74
|
-
"@aztec/kv-store": "0.
|
|
75
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
76
|
-
"@aztec/noir-types": "0.
|
|
77
|
-
"@aztec/protocol-contracts": "0.
|
|
78
|
-
"@aztec/simulator": "0.
|
|
79
|
-
"@aztec/stdlib": "0.
|
|
80
|
-
"@aztec/telemetry-client": "0.
|
|
81
|
-
"@aztec/world-state": "0.
|
|
67
|
+
"@aztec/bb-prover": "0.86.0",
|
|
68
|
+
"@aztec/blob-lib": "0.86.0",
|
|
69
|
+
"@aztec/constants": "0.86.0",
|
|
70
|
+
"@aztec/ethereum": "0.86.0",
|
|
71
|
+
"@aztec/foundation": "0.86.0",
|
|
72
|
+
"@aztec/kv-store": "0.86.0",
|
|
73
|
+
"@aztec/noir-protocol-circuits-types": "0.86.0",
|
|
74
|
+
"@aztec/noir-types": "0.86.0",
|
|
75
|
+
"@aztec/protocol-contracts": "0.86.0",
|
|
76
|
+
"@aztec/simulator": "0.86.0",
|
|
77
|
+
"@aztec/stdlib": "0.86.0",
|
|
78
|
+
"@aztec/telemetry-client": "0.86.0",
|
|
79
|
+
"@aztec/world-state": "0.86.0",
|
|
82
80
|
"@google-cloud/storage": "^7.15.0",
|
|
83
81
|
"@iarna/toml": "^2.2.5",
|
|
84
82
|
"commander": "^12.1.0",
|
|
@@ -88,7 +86,7 @@
|
|
|
88
86
|
"zod": "^3.23.8"
|
|
89
87
|
},
|
|
90
88
|
"devDependencies": {
|
|
91
|
-
"@aztec/noir-contracts.js": "0.
|
|
89
|
+
"@aztec/noir-contracts.js": "0.86.0",
|
|
92
90
|
"@jest/globals": "^29.5.0",
|
|
93
91
|
"@types/jest": "^29.5.0",
|
|
94
92
|
"@types/node": "^18.7.23",
|
|
@@ -6,14 +6,8 @@ import { TestDateProvider } from '@aztec/foundation/timer';
|
|
|
6
6
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
7
7
|
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
8
8
|
import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
PublicProcessor,
|
|
12
|
-
PublicTreesDB,
|
|
13
|
-
PublicTxSimulationTester,
|
|
14
|
-
PublicTxSimulator,
|
|
15
|
-
SimpleContractDataSource,
|
|
16
|
-
} from '@aztec/simulator/server';
|
|
9
|
+
import { PublicTxSimulationTester, SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
|
|
10
|
+
import { PublicProcessor, PublicProcessorFactory } from '@aztec/simulator/server';
|
|
17
11
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
18
12
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
19
13
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
@@ -40,7 +34,6 @@ export class TestContext {
|
|
|
40
34
|
private feePayerBalance: Fr;
|
|
41
35
|
|
|
42
36
|
constructor(
|
|
43
|
-
public publicTxSimulator: PublicTxSimulator,
|
|
44
37
|
public worldState: MerkleTreeAdminDatabase,
|
|
45
38
|
public publicProcessor: PublicProcessor,
|
|
46
39
|
public globalVariables: GlobalVariables,
|
|
@@ -79,26 +72,17 @@ export class TestContext {
|
|
|
79
72
|
|
|
80
73
|
// Separated dbs for public processor and prover - see public_processor for context
|
|
81
74
|
const ws = await NativeWorldStateService.tmp(
|
|
82
|
-
|
|
83
|
-
|
|
75
|
+
/*rollupAddress=*/ undefined,
|
|
76
|
+
/*cleanupTmpDir=*/ true,
|
|
84
77
|
prefilledPublicData,
|
|
85
78
|
);
|
|
86
79
|
const merkleTrees = await ws.fork();
|
|
87
80
|
|
|
88
81
|
const contractDataSource = new SimpleContractDataSource();
|
|
89
|
-
const treesDB = new PublicTreesDB(merkleTrees);
|
|
90
|
-
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
91
|
-
|
|
92
82
|
const tester = new PublicTxSimulationTester(merkleTrees, contractDataSource);
|
|
93
83
|
|
|
94
|
-
const
|
|
95
|
-
const processor =
|
|
96
|
-
globalVariables,
|
|
97
|
-
treesDB,
|
|
98
|
-
contractsDB,
|
|
99
|
-
publicTxSimulator,
|
|
100
|
-
new TestDateProvider(),
|
|
101
|
-
);
|
|
84
|
+
const processorFactory = new PublicProcessorFactory(contractDataSource, new TestDateProvider());
|
|
85
|
+
const processor = processorFactory.create(merkleTrees, globalVariables, /*skipFeeEnforcement=*/ false);
|
|
102
86
|
|
|
103
87
|
let localProver: ServerCircuitProver;
|
|
104
88
|
const config = await getEnvironmentConfig(logger);
|
|
@@ -127,7 +111,6 @@ export class TestContext {
|
|
|
127
111
|
facade.start();
|
|
128
112
|
|
|
129
113
|
return new this(
|
|
130
|
-
publicTxSimulator,
|
|
131
114
|
ws,
|
|
132
115
|
processor,
|
|
133
116
|
globalVariables,
|
|
@@ -16,7 +16,6 @@ import { makeTuple } from '@aztec/foundation/array';
|
|
|
16
16
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
17
17
|
import { sha256Trunc } from '@aztec/foundation/crypto';
|
|
18
18
|
import { Fr } from '@aztec/foundation/fields';
|
|
19
|
-
import type { Logger } from '@aztec/foundation/log';
|
|
20
19
|
import { type Tuple, assertLength, serializeToBuffer, toFriendlyJSON } from '@aztec/foundation/serialize';
|
|
21
20
|
import { MembershipWitness, MerkleTreeCalculator, computeUnbalancedMerkleRoot } from '@aztec/foundation/trees';
|
|
22
21
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
@@ -55,8 +54,6 @@ import {
|
|
|
55
54
|
import { Attributes, type Span, runInSpan } from '@aztec/telemetry-client';
|
|
56
55
|
import type { MerkleTreeReadOperations } from '@aztec/world-state';
|
|
57
56
|
|
|
58
|
-
import { inspect } from 'util';
|
|
59
|
-
|
|
60
57
|
/**
|
|
61
58
|
* Type representing the names of the trees for the base rollup.
|
|
62
59
|
*/
|
|
@@ -255,13 +252,12 @@ export const buildBlobHints = runInSpan(
|
|
|
255
252
|
export const buildHeaderFromCircuitOutputs = runInSpan(
|
|
256
253
|
'BlockBuilderHelpers',
|
|
257
254
|
'buildHeaderFromCircuitOutputs',
|
|
258
|
-
|
|
255
|
+
(
|
|
259
256
|
_span,
|
|
260
257
|
previousRollupData: BaseOrMergeRollupPublicInputs[],
|
|
261
258
|
parityPublicInputs: ParityPublicInputs,
|
|
262
259
|
rootRollupOutputs: BlockRootOrBlockMergePublicInputs,
|
|
263
260
|
endState: StateReference,
|
|
264
|
-
logger?: Logger,
|
|
265
261
|
) => {
|
|
266
262
|
if (previousRollupData.length > 2) {
|
|
267
263
|
throw new Error(`There can't be more than 2 previous rollups. Received ${previousRollupData.length}.`);
|
|
@@ -286,7 +282,8 @@ export const buildHeaderFromCircuitOutputs = runInSpan(
|
|
|
286
282
|
|
|
287
283
|
const accumulatedFees = previousRollupData.reduce((sum, d) => sum.add(d.accumulatedFees), Fr.ZERO);
|
|
288
284
|
const accumulatedManaUsed = previousRollupData.reduce((sum, d) => sum.add(d.accumulatedManaUsed), Fr.ZERO);
|
|
289
|
-
|
|
285
|
+
|
|
286
|
+
return new BlockHeader(
|
|
290
287
|
rootRollupOutputs.previousArchive,
|
|
291
288
|
contentCommitment,
|
|
292
289
|
endState,
|
|
@@ -294,15 +291,6 @@ export const buildHeaderFromCircuitOutputs = runInSpan(
|
|
|
294
291
|
accumulatedFees,
|
|
295
292
|
accumulatedManaUsed,
|
|
296
293
|
);
|
|
297
|
-
if (!(await header.hash()).equals(rootRollupOutputs.endBlockHash)) {
|
|
298
|
-
logger?.error(
|
|
299
|
-
`Block header mismatch when building header from circuit outputs.` +
|
|
300
|
-
`\n\nHeader: ${inspect(header)}` +
|
|
301
|
-
`\n\nCircuit: ${toFriendlyJSON(rootRollupOutputs)}`,
|
|
302
|
-
);
|
|
303
|
-
throw new Error(`Block header mismatch when building from circuit outputs`);
|
|
304
|
-
}
|
|
305
|
-
return header;
|
|
306
294
|
},
|
|
307
295
|
);
|
|
308
296
|
|
|
@@ -398,6 +386,12 @@ export const validateState = runInSpan(
|
|
|
398
386
|
},
|
|
399
387
|
);
|
|
400
388
|
|
|
389
|
+
export async function getLastSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations) {
|
|
390
|
+
const { size } = await db.getTreeInfo(treeId);
|
|
391
|
+
const path = await db.getSiblingPath(treeId, size - 1n);
|
|
392
|
+
return padArrayEnd(path.toFields(), Fr.ZERO, getTreeHeight(treeId));
|
|
393
|
+
}
|
|
394
|
+
|
|
401
395
|
export async function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations) {
|
|
402
396
|
const { size } = await db.getTreeInfo(treeId);
|
|
403
397
|
const path = await db.getSiblingPath(treeId, size);
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
} from '@aztec/constants';
|
|
12
12
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
13
13
|
import { Fr } from '@aztec/foundation/fields';
|
|
14
|
-
import type { Logger } from '@aztec/foundation/log';
|
|
15
14
|
import type { Tuple } from '@aztec/foundation/serialize';
|
|
16
15
|
import { MembershipWitness, type TreeNodeLocation, UnbalancedTreeStore } from '@aztec/foundation/trees';
|
|
17
16
|
import { getVKIndex, getVKSiblingPath, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
@@ -68,6 +67,7 @@ export class BlockProvingState {
|
|
|
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,
|
|
70
|
+
private readonly lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
|
|
71
71
|
private readonly newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
|
|
72
72
|
private readonly previousBlockHeader: BlockHeader,
|
|
73
73
|
private readonly parentEpoch: EpochProvingState,
|
|
@@ -232,6 +232,7 @@ export class BlockProvingState {
|
|
|
232
232
|
const data = BlockRootRollupData.from({
|
|
233
233
|
l1ToL2Roots: this.#getRootParityData(this.rootParityProvingOutput!),
|
|
234
234
|
l1ToL2MessageSubtreeSiblingPath: this.l1ToL2MessageSubtreeSiblingPath,
|
|
235
|
+
previousArchiveSiblingPath: this.lastArchiveSiblingPath,
|
|
235
236
|
newArchiveSiblingPath: this.newArchiveSiblingPath,
|
|
236
237
|
previousBlockHeader: newBlockHeader,
|
|
237
238
|
proverId,
|
|
@@ -267,7 +268,7 @@ export class BlockProvingState {
|
|
|
267
268
|
return this.txs[txIndex];
|
|
268
269
|
}
|
|
269
270
|
|
|
270
|
-
public async buildHeaderFromProvingOutputs(
|
|
271
|
+
public async buildHeaderFromProvingOutputs() {
|
|
271
272
|
const previousRollupData =
|
|
272
273
|
this.totalNumTxs === 0
|
|
273
274
|
? []
|
|
@@ -289,7 +290,6 @@ export class BlockProvingState {
|
|
|
289
290
|
this.rootParityProvingOutput!.inputs,
|
|
290
291
|
this.blockRootProvingOutput!.inputs,
|
|
291
292
|
endState,
|
|
292
|
-
logger,
|
|
293
293
|
);
|
|
294
294
|
}
|
|
295
295
|
|
|
@@ -326,6 +326,7 @@ export class BlockProvingState {
|
|
|
326
326
|
return BlockRootRollupData.from({
|
|
327
327
|
l1ToL2Roots: this.#getRootParityData(this.rootParityProvingOutput!),
|
|
328
328
|
l1ToL2MessageSubtreeSiblingPath: this.l1ToL2MessageSubtreeSiblingPath,
|
|
329
|
+
previousArchiveSiblingPath: this.lastArchiveSiblingPath,
|
|
329
330
|
newArchiveSiblingPath: this.newArchiveSiblingPath,
|
|
330
331
|
previousBlockHeader: this.previousBlockHeader,
|
|
331
332
|
proverId,
|
|
@@ -73,6 +73,7 @@ export class EpochProvingState {
|
|
|
73
73
|
l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>,
|
|
74
74
|
l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot,
|
|
75
75
|
lastArchiveSnapshot: AppendOnlyTreeSnapshot,
|
|
76
|
+
lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
|
|
76
77
|
newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
|
|
77
78
|
previousBlockHeader: BlockHeader,
|
|
78
79
|
): BlockProvingState {
|
|
@@ -84,6 +85,7 @@ export class EpochProvingState {
|
|
|
84
85
|
l1ToL2MessageSubtreeSiblingPath,
|
|
85
86
|
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
86
87
|
lastArchiveSnapshot,
|
|
88
|
+
lastArchiveSiblingPath,
|
|
87
89
|
newArchiveSiblingPath,
|
|
88
90
|
previousBlockHeader,
|
|
89
91
|
this,
|
|
@@ -52,6 +52,7 @@ import { inspect } from 'util';
|
|
|
52
52
|
import {
|
|
53
53
|
buildBaseRollupHints,
|
|
54
54
|
buildHeaderAndBodyFromTxs,
|
|
55
|
+
getLastSiblingPath,
|
|
55
56
|
getRootTreeSiblingPath,
|
|
56
57
|
getSubtreeSiblingPath,
|
|
57
58
|
getTreeSnapshot,
|
|
@@ -152,6 +153,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
152
153
|
|
|
153
154
|
// Get archive snapshot before this block lands
|
|
154
155
|
const lastArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
156
|
+
const lastArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
155
157
|
const newArchiveSiblingPath = await getRootTreeSiblingPath(MerkleTreeId.ARCHIVE, db);
|
|
156
158
|
|
|
157
159
|
const blockProvingState = this.provingState!.startNewBlock(
|
|
@@ -160,6 +162,7 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
160
162
|
l1ToL2MessageSubtreeSiblingPath,
|
|
161
163
|
l1ToL2MessageTreeSnapshotAfterInsertion,
|
|
162
164
|
lastArchive,
|
|
165
|
+
lastArchiveSiblingPath,
|
|
163
166
|
newArchiveSiblingPath,
|
|
164
167
|
previousBlockHeader,
|
|
165
168
|
);
|
|
@@ -670,12 +673,21 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
670
673
|
),
|
|
671
674
|
async result => {
|
|
672
675
|
provingState.setBlockRootRollupProof(result);
|
|
673
|
-
const header = await provingState.buildHeaderFromProvingOutputs(
|
|
676
|
+
const header = await provingState.buildHeaderFromProvingOutputs();
|
|
674
677
|
if (!(await header.hash()).equals(await provingState.block!.header.hash())) {
|
|
675
678
|
logger.error(
|
|
676
|
-
`Block header mismatch
|
|
679
|
+
`Block header mismatch.\nCircuit: ${inspect(header)}\nComputed: ${inspect(provingState.block!.header)}`,
|
|
677
680
|
);
|
|
678
|
-
provingState.reject(`Block header hash mismatch
|
|
681
|
+
provingState.reject(`Block header hash mismatch.`);
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
const dbArchiveRoot = provingState.block!.archive.root;
|
|
685
|
+
const circuitArchiveRoot = result.inputs.newArchive.root;
|
|
686
|
+
if (!dbArchiveRoot.equals(circuitArchiveRoot)) {
|
|
687
|
+
logger.error(
|
|
688
|
+
`New archive root mismatch.\nCircuit: ${result.inputs.newArchive.root}\nComputed: ${dbArchiveRoot}`,
|
|
689
|
+
);
|
|
690
|
+
provingState.reject(`New archive root mismatch.`);
|
|
679
691
|
}
|
|
680
692
|
|
|
681
693
|
logger.debug(`Completed ${rollupType} proof for block ${provingState.block!.number}`);
|