@aztec/prover-client 3.0.0-canary.a9708bd → 3.0.0-devnet.2
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 +5 -3
- package/dest/block-factory/light.d.ts.map +1 -1
- package/dest/block-factory/light.js +16 -9
- package/dest/mocks/fixtures.d.ts +4 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +31 -3
- package/dest/mocks/test_context.d.ts +32 -9
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +78 -22
- package/dest/orchestrator/block-building-helpers.d.ts +33 -31
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +126 -137
- package/dest/orchestrator/block-proving-state.d.ts +60 -53
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +214 -187
- package/dest/orchestrator/checkpoint-proving-state.d.ts +63 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-proving-state.js +211 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +34 -28
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +125 -81
- package/dest/orchestrator/orchestrator.d.ts +26 -25
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +350 -218
- package/dest/orchestrator/tx-proving-state.d.ts +11 -9
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +26 -23
- package/dest/prover-client/server-epoch-prover.d.ts +8 -7
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +7 -7
- package/dest/proving_broker/broker_prover_facade.d.ts +20 -15
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +36 -21
- package/dest/proving_broker/config.d.ts +8 -8
- package/dest/proving_broker/config.js +5 -5
- package/dest/proving_broker/factory.js +1 -1
- package/dest/proving_broker/fixtures.js +1 -1
- package/dest/proving_broker/proof_store/index.d.ts +1 -0
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +1 -0
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +29 -18
- package/dest/proving_broker/proving_broker_database/persisted.js +5 -5
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +38 -18
- package/dest/test/mock_prover.d.ts +22 -17
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +35 -20
- package/package.json +16 -17
- package/src/block-factory/light.ts +35 -9
- package/src/mocks/fixtures.ts +39 -11
- package/src/mocks/test_context.ts +137 -31
- package/src/orchestrator/block-building-helpers.ts +213 -211
- package/src/orchestrator/block-proving-state.ts +235 -245
- package/src/orchestrator/checkpoint-proving-state.ts +299 -0
- package/src/orchestrator/epoch-proving-state.ts +169 -126
- package/src/orchestrator/orchestrator.ts +519 -286
- package/src/orchestrator/tx-proving-state.ts +45 -43
- package/src/prover-client/server-epoch-prover.ts +26 -16
- package/src/proving_broker/broker_prover_facade.ts +157 -88
- package/src/proving_broker/config.ts +7 -7
- package/src/proving_broker/factory.ts +1 -1
- package/src/proving_broker/fixtures.ts +1 -1
- package/src/proving_broker/proof_store/index.ts +1 -0
- package/src/proving_broker/proving_broker.ts +36 -18
- package/src/proving_broker/proving_broker_database/persisted.ts +5 -5
- package/src/proving_broker/proving_job_controller.ts +38 -18
- package/src/test/mock_prover.ts +142 -62
- package/dest/bin/get-proof-inputs.d.ts +0 -2
- package/dest/bin/get-proof-inputs.d.ts.map +0 -1
- package/dest/bin/get-proof-inputs.js +0 -51
- package/src/bin/get-proof-inputs.ts +0 -59
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { SpongeBlob } from '@aztec/blob-lib';
|
|
1
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
3
|
import { L2Block } from '@aztec/stdlib/block';
|
|
3
4
|
import type { IBlockFactory, MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
4
|
-
import {
|
|
5
|
+
import type { GlobalVariables, ProcessedTx } from '@aztec/stdlib/tx';
|
|
5
6
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
6
7
|
/**
|
|
7
8
|
* Builds a block and its header from a set of processed tx without running any circuits.
|
|
@@ -20,10 +21,11 @@ export declare class LightweightBlockFactory implements IBlockFactory {
|
|
|
20
21
|
private telemetry;
|
|
21
22
|
private globalVariables?;
|
|
22
23
|
private l1ToL2Messages?;
|
|
24
|
+
private startSpongeBlob?;
|
|
23
25
|
private txs;
|
|
24
26
|
private readonly logger;
|
|
25
27
|
constructor(db: MerkleTreeWriteOperations, telemetry?: TelemetryClient);
|
|
26
|
-
startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<void>;
|
|
28
|
+
startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[], startSpongeBlob?: SpongeBlob, isFirstBlock?: boolean): Promise<void>;
|
|
27
29
|
addTxs(txs: ProcessedTx[]): Promise<void>;
|
|
28
30
|
setBlockCompleted(): Promise<L2Block>;
|
|
29
31
|
private buildBlock;
|
|
@@ -32,5 +34,5 @@ export declare class LightweightBlockFactory implements IBlockFactory {
|
|
|
32
34
|
* Inserts the processed transactions into the DB, then creates a block.
|
|
33
35
|
* @param db - A db fork to use for block building which WILL BE MODIFIED.
|
|
34
36
|
*/
|
|
35
|
-
export declare function buildBlockWithCleanDB(txs: ProcessedTx[], globalVariables: GlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeWriteOperations, telemetry?: TelemetryClient): Promise<L2Block>;
|
|
37
|
+
export declare function buildBlockWithCleanDB(txs: ProcessedTx[], globalVariables: GlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeWriteOperations, startSpongeBlob?: SpongeBlob, isFirstBlock?: boolean, telemetry?: TelemetryClient): Promise<L2Block>;
|
|
36
38
|
//# sourceMappingURL=light.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/block-factory/light.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/block-factory/light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,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,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACrE,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;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,GAAG,CAA4B;IAEvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAG1D,EAAE,EAAE,yBAAyB,EAC7B,SAAS,GAAE,eAAsC;IAGrD,aAAa,CACjB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,EAAE,EAAE,EAEpB,eAAe,CAAC,EAAE,UAAU,EAE5B,YAAY,UAAO,GAClB,OAAO,CAAC,IAAI,CAAC;IAYhB,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;YAIvB,UAAU;CA2BzB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAAE,EAClB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,EAAE,EAAE,EACpB,EAAE,EAAE,yBAAyB,EAC7B,eAAe,CAAC,EAAE,UAAU,EAC5B,YAAY,UAAO,EACnB,SAAS,GAAE,eAAsC,oBAuBlD"}
|
|
@@ -5,7 +5,6 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { L2Block } from '@aztec/stdlib/block';
|
|
7
7
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
8
|
-
import { toNumBlobFields } from '@aztec/stdlib/tx';
|
|
9
8
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
10
9
|
import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffectsAndBuildBaseRollupHints } from '../orchestrator/block-building-helpers.js';
|
|
11
10
|
/**
|
|
@@ -24,6 +23,7 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffectsAndBuildBa
|
|
|
24
23
|
telemetry;
|
|
25
24
|
globalVariables;
|
|
26
25
|
l1ToL2Messages;
|
|
26
|
+
startSpongeBlob;
|
|
27
27
|
txs;
|
|
28
28
|
logger;
|
|
29
29
|
constructor(db, telemetry = getTelemetryClient()){
|
|
@@ -31,13 +31,16 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffectsAndBuildBa
|
|
|
31
31
|
this.telemetry = telemetry;
|
|
32
32
|
this.logger = createLogger('lightweight-block-factory');
|
|
33
33
|
}
|
|
34
|
-
async startNewBlock(globalVariables, l1ToL2Messages
|
|
34
|
+
async startNewBlock(globalVariables, l1ToL2Messages, // Must be provided to generate the correct spongeBlobHash for the block header if there's more than one block in the checkpoint.
|
|
35
|
+
startSpongeBlob, // Only insert l1 to l2 messages for the first block in a checkpoint.
|
|
36
|
+
isFirstBlock = true) {
|
|
35
37
|
this.logger.debug('Starting new block', {
|
|
36
38
|
globalVariables: globalVariables.toInspect(),
|
|
37
39
|
l1ToL2Messages
|
|
38
40
|
});
|
|
39
41
|
this.globalVariables = globalVariables;
|
|
40
|
-
this.l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
42
|
+
this.l1ToL2Messages = isFirstBlock ? padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP) : [];
|
|
43
|
+
this.startSpongeBlob = startSpongeBlob;
|
|
41
44
|
this.txs = undefined;
|
|
42
45
|
// Update L1 to L2 tree
|
|
43
46
|
await this.db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, this.l1ToL2Messages);
|
|
@@ -56,9 +59,10 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffectsAndBuildBa
|
|
|
56
59
|
return this.buildBlock();
|
|
57
60
|
}
|
|
58
61
|
async buildBlock() {
|
|
59
|
-
const { header, body } = await buildHeaderAndBodyFromTxs(this.txs ?? [], this.globalVariables, this.l1ToL2Messages, this.db);
|
|
62
|
+
const { header, body } = await buildHeaderAndBodyFromTxs(this.txs ?? [], this.globalVariables, this.l1ToL2Messages, this.db, this.startSpongeBlob);
|
|
60
63
|
header.state.validate();
|
|
61
|
-
|
|
64
|
+
const blockHeader = header.toBlockHeader();
|
|
65
|
+
await this.db.updateArchive(blockHeader);
|
|
62
66
|
const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db);
|
|
63
67
|
const block = new L2Block(newArchive, header, body);
|
|
64
68
|
this.logger.debug(`Built block ${block.number}`, {
|
|
@@ -74,13 +78,16 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffectsAndBuildBa
|
|
|
74
78
|
/**
|
|
75
79
|
* Inserts the processed transactions into the DB, then creates a block.
|
|
76
80
|
* @param db - A db fork to use for block building which WILL BE MODIFIED.
|
|
77
|
-
*/ export async function buildBlockWithCleanDB(txs, globalVariables, l1ToL2Messages, db, telemetry = getTelemetryClient()) {
|
|
78
|
-
const
|
|
81
|
+
*/ export async function buildBlockWithCleanDB(txs, globalVariables, l1ToL2Messages, db, startSpongeBlob, isFirstBlock = true, telemetry = getTelemetryClient()) {
|
|
82
|
+
const lastArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
79
83
|
const builder = new LightweightBlockFactory(db, telemetry);
|
|
80
|
-
await builder.startNewBlock(globalVariables, l1ToL2Messages);
|
|
84
|
+
await builder.startNewBlock(globalVariables, l1ToL2Messages, startSpongeBlob, isFirstBlock);
|
|
81
85
|
const l1ToL2MessageTree = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db);
|
|
82
86
|
for (const tx of txs){
|
|
83
|
-
|
|
87
|
+
// startSpongeBlob and proverId are only used for constructing private inputs of the base rollup.
|
|
88
|
+
// Their values don't matter here because we are not using the return private inputs to build the block.
|
|
89
|
+
const proverId = Fr.ZERO;
|
|
90
|
+
await insertSideEffectsAndBuildBaseRollupHints(tx, lastArchive, l1ToL2MessageTree, startSpongeBlob?.clone() ?? SpongeBlob.empty(), proverId, db);
|
|
84
91
|
}
|
|
85
92
|
await builder.addTxs(txs);
|
|
86
93
|
return await builder.setBlockCompleted();
|
package/dest/mocks/fixtures.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Logger } from '@aztec/foundation/log';
|
|
2
|
+
import type { FieldsOf } from '@aztec/foundation/types';
|
|
2
3
|
import { type CircuitSimulator } from '@aztec/simulator/server';
|
|
3
4
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
5
|
+
import { CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
4
6
|
import type { ProcessedTx } from '@aztec/stdlib/tx';
|
|
5
7
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
6
8
|
export declare const getEnvironmentConfig: (logger: Logger) => Promise<{
|
|
@@ -16,5 +18,6 @@ export declare function getSimulator(config: {
|
|
|
16
18
|
acvmBinaryPath: string | undefined;
|
|
17
19
|
}, logger?: Logger): Promise<CircuitSimulator>;
|
|
18
20
|
export declare const updateExpectedTreesFromTxs: (db: MerkleTreeWriteOperations, txs: ProcessedTx[]) => Promise<void>;
|
|
19
|
-
export declare const makeGlobals: (blockNumber: number) => GlobalVariables;
|
|
21
|
+
export declare const makeGlobals: (blockNumber: number, slotNumber?: number, overrides?: Partial<FieldsOf<GlobalVariables> & FieldsOf<CheckpointConstantData>>) => GlobalVariables;
|
|
22
|
+
export declare const makeCheckpointConstants: (slotNumber: number, overrides?: Partial<FieldsOf<CheckpointConstantData>>) => CheckpointConstantData;
|
|
20
23
|
//# sourceMappingURL=fixtures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/mocks/fixtures.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/mocks/fixtures.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAE,KAAK,gBAAgB,EAA+C,MAAM,yBAAyB,CAAC;AAG7G,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAiBnD,eAAO,MAAM,oBAAoB,GAAU,QAAQ,MAAM;;;;;;;cAkCxD,CAAC;AAEF,wBAAsB,YAAY,CAChC,MAAM,EAAE;IAAE,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACxF,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CAe3B;AAGD,eAAO,MAAM,0BAA0B,GAAU,IAAI,yBAAyB,EAAE,KAAK,WAAW,EAAE,kBAgBjG,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,aAAa,MAAM,EACnB,mBAAwB,EACxB,YAAW,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,sBAAsB,CAAC,CAAM,oBActF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,YAAY,MAAM,EAClB,YAAW,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAM,2BAc1D,CAAC"}
|
package/dest/mocks/fixtures.js
CHANGED
|
@@ -4,9 +4,12 @@ import { randomBytes } from '@aztec/foundation/crypto';
|
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
6
|
import { fileURLToPath } from '@aztec/foundation/url';
|
|
7
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
8
|
+
import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
7
9
|
import { NativeACVMSimulator, WASMSimulatorWithBlobs } from '@aztec/simulator/server';
|
|
8
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
11
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
12
|
+
import { CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
10
13
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
11
14
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
12
15
|
import { promises as fs } from 'fs';
|
|
@@ -15,7 +18,7 @@ const { BB_RELEASE_DIR = 'cpp/build/bin', TEMP_DIR = '/tmp', BB_BINARY_PATH = ''
|
|
|
15
18
|
// Determines if we have access to the bb binary and a tmp folder for temp files
|
|
16
19
|
export const getEnvironmentConfig = async (logger)=>{
|
|
17
20
|
try {
|
|
18
|
-
const expectedBBPath = BB_BINARY_PATH ? BB_BINARY_PATH : `${path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../barretenberg/', BB_RELEASE_DIR)}/bb`;
|
|
21
|
+
const expectedBBPath = BB_BINARY_PATH ? BB_BINARY_PATH : `${path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../barretenberg/', BB_RELEASE_DIR)}/bb-avm`;
|
|
19
22
|
await fs.access(expectedBBPath, fs.constants.R_OK);
|
|
20
23
|
const tempWorkingDirectory = `${TEMP_DIR}/${randomBytes(4).toString('hex')}`;
|
|
21
24
|
const bbWorkingDirectory = BB_WORKING_DIRECTORY ? BB_WORKING_DIRECTORY : `${tempWorkingDirectory}/bb`;
|
|
@@ -72,6 +75,31 @@ export const updateExpectedTreesFromTxs = async (db, txs)=>{
|
|
|
72
75
|
await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, tx.txEffect.publicDataWrites.map((write)=>write.toBuffer()));
|
|
73
76
|
}
|
|
74
77
|
};
|
|
75
|
-
export const makeGlobals = (blockNumber)=>{
|
|
76
|
-
|
|
78
|
+
export const makeGlobals = (blockNumber, slotNumber = blockNumber, overrides = {})=>{
|
|
79
|
+
const checkpointConstants = makeCheckpointConstants(slotNumber, overrides);
|
|
80
|
+
return GlobalVariables.from({
|
|
81
|
+
chainId: checkpointConstants.chainId,
|
|
82
|
+
version: checkpointConstants.version,
|
|
83
|
+
blockNumber,
|
|
84
|
+
slotNumber: new Fr(slotNumber),
|
|
85
|
+
timestamp: BigInt(blockNumber),
|
|
86
|
+
coinbase: checkpointConstants.coinbase,
|
|
87
|
+
feeRecipient: checkpointConstants.feeRecipient,
|
|
88
|
+
gasFees: checkpointConstants.gasFees,
|
|
89
|
+
...overrides
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
export const makeCheckpointConstants = (slotNumber, overrides = {})=>{
|
|
93
|
+
return CheckpointConstantData.from({
|
|
94
|
+
chainId: Fr.ZERO,
|
|
95
|
+
version: Fr.ZERO,
|
|
96
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
97
|
+
protocolContractsHash,
|
|
98
|
+
proverId: Fr.ZERO,
|
|
99
|
+
slotNumber: new Fr(slotNumber),
|
|
100
|
+
coinbase: EthAddress.ZERO,
|
|
101
|
+
feeRecipient: AztecAddress.ZERO,
|
|
102
|
+
gasFees: GasFees.empty(),
|
|
103
|
+
...overrides
|
|
104
|
+
});
|
|
77
105
|
};
|
|
@@ -1,19 +1,21 @@
|
|
|
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 type { FieldsOf } from '@aztec/foundation/types';
|
|
4
5
|
import { SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
|
|
5
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
-
import { type L2Block } from '@aztec/stdlib/block';
|
|
7
7
|
import type { ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
8
|
+
import type { CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
8
9
|
import { makeBloatedProcessedTx } from '@aztec/stdlib/testing';
|
|
9
|
-
import { type AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
10
10
|
import { type BlockHeader, type GlobalVariables, type ProcessedTx, type Tx } from '@aztec/stdlib/tx';
|
|
11
11
|
import type { MerkleTreeAdminDatabase } from '@aztec/world-state';
|
|
12
|
+
import type { BlockProvingState } from '../orchestrator/block-proving-state.js';
|
|
12
13
|
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
17
|
worldState: MerkleTreeAdminDatabase;
|
|
18
|
+
firstCheckpointNumber: Fr;
|
|
17
19
|
globalVariables: GlobalVariables;
|
|
18
20
|
prover: ServerCircuitProver;
|
|
19
21
|
broker: TestBroker;
|
|
@@ -25,26 +27,47 @@ export declare class TestContext {
|
|
|
25
27
|
logger: Logger;
|
|
26
28
|
private headers;
|
|
27
29
|
private feePayerBalance;
|
|
28
|
-
constructor(worldState: MerkleTreeAdminDatabase, globalVariables: GlobalVariables, prover: ServerCircuitProver, broker: TestBroker, brokerProverFacade: BrokerCircuitProverFacade, orchestrator: TestProvingOrchestrator, blockNumber: number, feePayer: AztecAddress, initialFeePayerBalance: Fr, directoriesToCleanup: string[], logger: Logger);
|
|
30
|
+
constructor(worldState: MerkleTreeAdminDatabase, firstCheckpointNumber: Fr, globalVariables: GlobalVariables, prover: ServerCircuitProver, broker: TestBroker, brokerProverFacade: BrokerCircuitProverFacade, orchestrator: TestProvingOrchestrator, blockNumber: number, feePayer: AztecAddress, initialFeePayerBalance: Fr, directoriesToCleanup: string[], logger: Logger);
|
|
29
31
|
get epochProver(): TestProvingOrchestrator;
|
|
30
|
-
|
|
32
|
+
getCheckpointConstants(checkpointIndex?: number): CheckpointConstantData;
|
|
33
|
+
static new(logger: Logger, { proverCount, createProver, slotNumber, blockNumber, }?: {
|
|
31
34
|
proverCount?: number;
|
|
32
35
|
createProver?: (bbConfig: BBProverConfig) => Promise<ServerCircuitProver>;
|
|
36
|
+
slotNumber?: number;
|
|
33
37
|
blockNumber?: number;
|
|
34
38
|
}): Promise<TestContext>;
|
|
35
39
|
getFork(): Promise<import("@aztec/stdlib/trees").MerkleTreeWriteOperations>;
|
|
36
40
|
getBlockHeader(blockNumber: 0): BlockHeader;
|
|
37
41
|
getBlockHeader(blockNumber: number): BlockHeader | undefined;
|
|
38
|
-
setBlockHeader(header: BlockHeader, blockNumber: number): void;
|
|
39
42
|
getPreviousBlockHeader(currentBlockNumber?: number): BlockHeader;
|
|
40
43
|
cleanup(): Promise<void>;
|
|
41
|
-
|
|
44
|
+
makeProcessedTx(opts?: Parameters<typeof makeBloatedProcessedTx>[0]): Promise<ProcessedTx>;
|
|
42
45
|
/** Creates a block with the given number of txs and adds it to world-state */
|
|
43
|
-
makePendingBlock(numTxs: number,
|
|
44
|
-
|
|
46
|
+
makePendingBlock(numTxs: number, { checkpointIndex, numL1ToL2Messages, blockNumber, makeProcessedTxOpts, }?: {
|
|
47
|
+
checkpointIndex?: number;
|
|
48
|
+
numL1ToL2Messages?: number;
|
|
49
|
+
blockNumber?: number;
|
|
50
|
+
makeProcessedTxOpts?: (index: number) => Partial<Parameters<typeof makeBloatedProcessedTx>[0]>;
|
|
51
|
+
}): Promise<{
|
|
52
|
+
block: import("@aztec/stdlib/block").L2Block;
|
|
45
53
|
txs: ProcessedTx[];
|
|
46
54
|
l1ToL2Messages: Fr[];
|
|
47
55
|
}>;
|
|
56
|
+
makePendingBlocksInCheckpoint(numBlocks: number, { checkpointIndex, numTxsPerBlock, numL1ToL2Messages, firstBlockNumber, makeGlobalVariablesOpts, makeProcessedTxOpts, }?: {
|
|
57
|
+
checkpointIndex?: number;
|
|
58
|
+
numTxsPerBlock?: number | number[];
|
|
59
|
+
numL1ToL2Messages?: number;
|
|
60
|
+
firstBlockNumber?: number;
|
|
61
|
+
makeGlobalVariablesOpts?: (blockNumber: number, checkpointIndex: number) => Partial<FieldsOf<GlobalVariables> & FieldsOf<CheckpointConstantData>>;
|
|
62
|
+
makeProcessedTxOpts?: (blockGlobalVariables: GlobalVariables, txIndex: number) => Partial<Parameters<typeof makeBloatedProcessedTx>[0]>;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
blocks: {
|
|
65
|
+
header: BlockHeader;
|
|
66
|
+
txs: ProcessedTx[];
|
|
67
|
+
}[];
|
|
68
|
+
l1ToL2Messages: Fr[];
|
|
69
|
+
blobFields: Fr[];
|
|
70
|
+
}>;
|
|
48
71
|
processPublicFunctions(txs: Tx[], { maxTransactions, numL1ToL2Messages, contractDataSource, }?: {
|
|
49
72
|
maxTransactions?: number;
|
|
50
73
|
numL1ToL2Messages?: number;
|
|
@@ -54,7 +77,7 @@ export declare class TestContext {
|
|
|
54
77
|
}
|
|
55
78
|
declare class TestProvingOrchestrator extends ProvingOrchestrator {
|
|
56
79
|
isVerifyBuiltBlockAgainstSyncedStateEnabled: boolean;
|
|
57
|
-
protected verifyBuiltBlockAgainstSyncedState(
|
|
80
|
+
protected verifyBuiltBlockAgainstSyncedState(provingState: BlockProvingState): Promise<void>;
|
|
58
81
|
}
|
|
59
82
|
export {};
|
|
60
83
|
//# sourceMappingURL=test_context.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"test_context.d.ts","sourceRoot":"","sources":["../../src/mocks/test_context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,32 @@
|
|
|
1
|
+
import { TestCircuitProver } from '@aztec/bb-prover';
|
|
2
|
+
import { SpongeBlob } from '@aztec/blob-lib';
|
|
1
3
|
import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
2
4
|
import { padArrayEnd, times, timesParallel } from '@aztec/foundation/collection';
|
|
3
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
6
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
5
7
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
6
|
-
import {
|
|
8
|
+
import { ProtocolContractsList } from '@aztec/protocol-contracts';
|
|
7
9
|
import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
8
10
|
import { SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
|
|
9
11
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
10
12
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
11
13
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
14
|
import { EthAddress } from '@aztec/stdlib/block';
|
|
15
|
+
import { getCheckpointBlobFields } from '@aztec/stdlib/checkpoint';
|
|
13
16
|
import { makeBloatedProcessedTx } from '@aztec/stdlib/testing';
|
|
14
17
|
import { MerkleTreeId, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
15
18
|
import { TreeSnapshots } from '@aztec/stdlib/tx';
|
|
16
19
|
import { NativeWorldStateService } from '@aztec/world-state/native';
|
|
17
20
|
import { promises as fs } from 'fs';
|
|
18
|
-
// TODO(#12613) This means of sharing test code is not ideal.
|
|
19
|
-
// eslint-disable-next-line import/no-relative-packages
|
|
20
|
-
import { TestCircuitProver } from '../../../bb-prover/src/test/test_circuit_prover.js';
|
|
21
21
|
import { buildBlockWithCleanDB } from '../block-factory/light.js';
|
|
22
22
|
import { getTreeSnapshot } from '../orchestrator/block-building-helpers.js';
|
|
23
23
|
import { ProvingOrchestrator } from '../orchestrator/index.js';
|
|
24
24
|
import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
|
|
25
25
|
import { TestBroker } from '../test/mock_prover.js';
|
|
26
|
-
import { getEnvironmentConfig, getSimulator, makeGlobals, updateExpectedTreesFromTxs } from './fixtures.js';
|
|
26
|
+
import { getEnvironmentConfig, getSimulator, makeCheckpointConstants, makeGlobals, updateExpectedTreesFromTxs } from './fixtures.js';
|
|
27
27
|
export class TestContext {
|
|
28
28
|
worldState;
|
|
29
|
+
firstCheckpointNumber;
|
|
29
30
|
globalVariables;
|
|
30
31
|
prover;
|
|
31
32
|
broker;
|
|
@@ -37,8 +38,9 @@ export class TestContext {
|
|
|
37
38
|
logger;
|
|
38
39
|
headers;
|
|
39
40
|
feePayerBalance;
|
|
40
|
-
constructor(worldState, globalVariables, prover, broker, brokerProverFacade, orchestrator, blockNumber, feePayer, initialFeePayerBalance, directoriesToCleanup, logger){
|
|
41
|
+
constructor(worldState, firstCheckpointNumber, globalVariables, prover, broker, brokerProverFacade, orchestrator, blockNumber, feePayer, initialFeePayerBalance, directoriesToCleanup, logger){
|
|
41
42
|
this.worldState = worldState;
|
|
43
|
+
this.firstCheckpointNumber = firstCheckpointNumber;
|
|
42
44
|
this.globalVariables = globalVariables;
|
|
43
45
|
this.prover = prover;
|
|
44
46
|
this.broker = broker;
|
|
@@ -54,9 +56,13 @@ export class TestContext {
|
|
|
54
56
|
get epochProver() {
|
|
55
57
|
return this.orchestrator;
|
|
56
58
|
}
|
|
57
|
-
|
|
59
|
+
getCheckpointConstants(checkpointIndex = 0) {
|
|
60
|
+
return makeCheckpointConstants(this.firstCheckpointNumber.toNumber() + checkpointIndex);
|
|
61
|
+
}
|
|
62
|
+
static async new(logger, { proverCount = 4, createProver = async (bbConfig)=>new TestCircuitProver(await getSimulator(bbConfig, logger)), slotNumber = 1, blockNumber = 1 } = {}) {
|
|
58
63
|
const directoriesToCleanup = [];
|
|
59
|
-
const
|
|
64
|
+
const firstCheckpointNumber = new Fr(slotNumber);
|
|
65
|
+
const globalVariables = makeGlobals(blockNumber, slotNumber);
|
|
60
66
|
const feePayer = AztecAddress.fromNumber(42222);
|
|
61
67
|
const initialFeePayerBalance = new Fr(10n ** 20n);
|
|
62
68
|
const feePayerSlot = await computeFeePayerBalanceLeafSlot(feePayer);
|
|
@@ -89,7 +95,7 @@ export class TestContext {
|
|
|
89
95
|
const orchestrator = new TestProvingOrchestrator(ws, facade, EthAddress.ZERO);
|
|
90
96
|
await broker.start();
|
|
91
97
|
facade.start();
|
|
92
|
-
return new this(ws, globalVariables, localProver, broker, facade, orchestrator, blockNumber, feePayer, initialFeePayerBalance, directoriesToCleanup, logger);
|
|
98
|
+
return new this(ws, firstCheckpointNumber, globalVariables, localProver, broker, facade, orchestrator, blockNumber, feePayer, initialFeePayerBalance, directoriesToCleanup, logger);
|
|
93
99
|
}
|
|
94
100
|
getFork() {
|
|
95
101
|
return this.worldState.fork();
|
|
@@ -97,9 +103,6 @@ export class TestContext {
|
|
|
97
103
|
getBlockHeader(blockNumber = 0) {
|
|
98
104
|
return blockNumber === 0 ? this.worldState.getCommitted().getInitialHeader() : this.headers.get(blockNumber);
|
|
99
105
|
}
|
|
100
|
-
setBlockHeader(header, blockNumber) {
|
|
101
|
-
this.headers.set(blockNumber, header);
|
|
102
|
-
}
|
|
103
106
|
getPreviousBlockHeader(currentBlockNumber = this.blockNumber) {
|
|
104
107
|
return this.getBlockHeader(currentBlockNumber - 1);
|
|
105
108
|
}
|
|
@@ -119,13 +122,14 @@ export class TestContext {
|
|
|
119
122
|
}
|
|
120
123
|
}
|
|
121
124
|
async makeProcessedTx(opts) {
|
|
122
|
-
const
|
|
123
|
-
const
|
|
125
|
+
const globalVariables = opts?.globalVariables ?? this.globalVariables;
|
|
126
|
+
const blockNumber = globalVariables.blockNumber;
|
|
127
|
+
const header = opts?.header ?? this.getBlockHeader(blockNumber - 1);
|
|
124
128
|
const tx = await makeBloatedProcessedTx({
|
|
125
129
|
header,
|
|
126
130
|
vkTreeRoot: getVKTreeRoot(),
|
|
127
|
-
|
|
128
|
-
globalVariables
|
|
131
|
+
protocolContracts: ProtocolContractsList,
|
|
132
|
+
globalVariables,
|
|
129
133
|
feePayer: this.feePayer,
|
|
130
134
|
...opts
|
|
131
135
|
});
|
|
@@ -136,8 +140,9 @@ export class TestContext {
|
|
|
136
140
|
}
|
|
137
141
|
return tx;
|
|
138
142
|
}
|
|
139
|
-
/** Creates a block with the given number of txs and adds it to world-state */ async makePendingBlock(numTxs, numL1ToL2Messages = 0,
|
|
140
|
-
const
|
|
143
|
+
/** Creates a block with the given number of txs and adds it to world-state */ async makePendingBlock(numTxs, { checkpointIndex = 0, numL1ToL2Messages = 0, blockNumber = this.blockNumber, makeProcessedTxOpts = ()=>({}) } = {}) {
|
|
144
|
+
const slotNumber = this.firstCheckpointNumber.toNumber() + checkpointIndex;
|
|
145
|
+
const globalVariables = makeGlobals(blockNumber, slotNumber);
|
|
141
146
|
const blockNum = globalVariables.blockNumber;
|
|
142
147
|
const db = await this.worldState.fork();
|
|
143
148
|
const l1ToL2Messages = times(numL1ToL2Messages, (i)=>new Fr(blockNum * 100 + i));
|
|
@@ -152,7 +157,7 @@ export class TestContext {
|
|
|
152
157
|
}));
|
|
153
158
|
await this.setTreeRoots(txs);
|
|
154
159
|
const block = await buildBlockWithCleanDB(txs, globalVariables, l1ToL2Messages, db);
|
|
155
|
-
this.headers.set(blockNum, block.
|
|
160
|
+
this.headers.set(blockNum, block.getBlockHeader());
|
|
156
161
|
await this.worldState.handleL2BlockAndMessages(block, l1ToL2Messages);
|
|
157
162
|
return {
|
|
158
163
|
block,
|
|
@@ -160,12 +165,63 @@ export class TestContext {
|
|
|
160
165
|
l1ToL2Messages
|
|
161
166
|
};
|
|
162
167
|
}
|
|
168
|
+
async makePendingBlocksInCheckpoint(numBlocks, { checkpointIndex = 0, numTxsPerBlock = 1, numL1ToL2Messages = 0, firstBlockNumber = this.blockNumber + checkpointIndex * numBlocks, makeGlobalVariablesOpts = ()=>({}), makeProcessedTxOpts = ()=>({}) } = {}) {
|
|
169
|
+
const slotNumber = this.firstCheckpointNumber.toNumber() + checkpointIndex;
|
|
170
|
+
const l1ToL2Messages = times(numL1ToL2Messages, (i)=>new Fr(slotNumber * 100 + i));
|
|
171
|
+
const merkleTrees = await this.worldState.fork();
|
|
172
|
+
await merkleTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
|
|
173
|
+
const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, merkleTrees);
|
|
174
|
+
const blockGlobalVariables = times(numBlocks, (i)=>makeGlobals(firstBlockNumber + i, slotNumber, makeGlobalVariablesOpts(firstBlockNumber + i, checkpointIndex)));
|
|
175
|
+
let totalTxs = 0;
|
|
176
|
+
const blockTxs = await timesParallel(numBlocks, (blockIndex)=>{
|
|
177
|
+
const txIndexOffset = totalTxs;
|
|
178
|
+
const numTxs = typeof numTxsPerBlock === 'number' ? numTxsPerBlock : numTxsPerBlock[blockIndex];
|
|
179
|
+
totalTxs += numTxs;
|
|
180
|
+
return timesParallel(numTxs, (txIndex)=>this.makeProcessedTx({
|
|
181
|
+
seed: (txIndexOffset + txIndex + 1) * 321 + (checkpointIndex + 1) * 123456,
|
|
182
|
+
globalVariables: blockGlobalVariables[blockIndex],
|
|
183
|
+
header: this.getBlockHeader(firstBlockNumber - 1),
|
|
184
|
+
newL1ToL2Snapshot,
|
|
185
|
+
...makeProcessedTxOpts(blockGlobalVariables[blockIndex], txIndexOffset + txIndex)
|
|
186
|
+
}));
|
|
187
|
+
});
|
|
188
|
+
const blobFields = getCheckpointBlobFields(blockTxs.map((txs)=>txs.map((tx)=>tx.txEffect)));
|
|
189
|
+
const spongeBlobState = await SpongeBlob.init(blobFields.length);
|
|
190
|
+
const blocks = [];
|
|
191
|
+
for(let i = 0; i < numBlocks; i++){
|
|
192
|
+
const isFirstBlock = i === 0;
|
|
193
|
+
const blockNumber = firstBlockNumber + i;
|
|
194
|
+
const globalVariables = blockGlobalVariables[i];
|
|
195
|
+
const txs = blockTxs[i];
|
|
196
|
+
await this.setTreeRoots(txs);
|
|
197
|
+
const fork = await this.worldState.fork();
|
|
198
|
+
const blockMsgs = isFirstBlock ? l1ToL2Messages : [];
|
|
199
|
+
const block = await buildBlockWithCleanDB(txs, globalVariables, blockMsgs, fork, spongeBlobState, isFirstBlock);
|
|
200
|
+
const header = block.getBlockHeader();
|
|
201
|
+
this.headers.set(blockNumber, header);
|
|
202
|
+
await this.worldState.handleL2BlockAndMessages(block, blockMsgs, isFirstBlock);
|
|
203
|
+
const blockBlobFields = block.body.toBlobFields();
|
|
204
|
+
await spongeBlobState.absorb(blockBlobFields);
|
|
205
|
+
blocks.push({
|
|
206
|
+
header,
|
|
207
|
+
txs
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
blocks,
|
|
212
|
+
l1ToL2Messages,
|
|
213
|
+
blobFields
|
|
214
|
+
};
|
|
215
|
+
}
|
|
163
216
|
async processPublicFunctions(txs, { maxTransactions = txs.length, numL1ToL2Messages = 0, contractDataSource } = {}) {
|
|
164
217
|
const l1ToL2Messages = times(numL1ToL2Messages, (i)=>new Fr(this.blockNumber * 100 + i));
|
|
165
218
|
const merkleTrees = await this.worldState.fork();
|
|
166
219
|
await merkleTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
|
|
167
220
|
const processorFactory = new PublicProcessorFactory(contractDataSource ?? new SimpleContractDataSource(), new TestDateProvider());
|
|
168
|
-
const publicProcessor = processorFactory.create(merkleTrees, this.globalVariables,
|
|
221
|
+
const publicProcessor = processorFactory.create(merkleTrees, this.globalVariables, {
|
|
222
|
+
skipFeeEnforcement: false,
|
|
223
|
+
clientInitiatedSimulation: false
|
|
224
|
+
});
|
|
169
225
|
return await publicProcessor.process(txs, {
|
|
170
226
|
maxTransactions
|
|
171
227
|
});
|
|
@@ -190,9 +246,9 @@ class TestProvingOrchestrator extends ProvingOrchestrator {
|
|
|
190
246
|
isVerifyBuiltBlockAgainstSyncedStateEnabled = false;
|
|
191
247
|
// Disable this check by default, since it requires seeding world state with the block being built
|
|
192
248
|
// This is only enabled in some tests with multiple blocks that populate the pending chain via makePendingBlock
|
|
193
|
-
verifyBuiltBlockAgainstSyncedState(
|
|
249
|
+
verifyBuiltBlockAgainstSyncedState(provingState) {
|
|
194
250
|
if (this.isVerifyBuiltBlockAgainstSyncedStateEnabled) {
|
|
195
|
-
return super.verifyBuiltBlockAgainstSyncedState(
|
|
251
|
+
return super.verifyBuiltBlockAgainstSyncedState(provingState);
|
|
196
252
|
}
|
|
197
253
|
return Promise.resolve();
|
|
198
254
|
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { BatchedBlobAccumulator,
|
|
2
|
-
import {
|
|
3
|
-
import { type Tuple } from '@aztec/foundation/serialize';
|
|
1
|
+
import { BatchedBlobAccumulator, SpongeBlob } from '@aztec/blob-lib';
|
|
2
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
3
|
+
import { type Bufferable, type Tuple } from '@aztec/foundation/serialize';
|
|
4
4
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import { type BaseOrMergeRollupPublicInputs, type BlockRootOrBlockMergePublicInputs, PrivateBaseRollupHints, PublicBaseRollupHints } from '@aztec/stdlib/rollup';
|
|
5
|
+
import { Body, L2BlockHeader } from '@aztec/stdlib/block';
|
|
6
|
+
import type { MerkleTreeWriteOperations, PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
|
|
7
|
+
import { ProofData, RecursiveProof } from '@aztec/stdlib/proofs';
|
|
8
|
+
import { BlockRollupPublicInputs, PrivateBaseRollupHints, PublicBaseRollupHints, PublicTubePrivateInputs } from '@aztec/stdlib/rollup';
|
|
10
9
|
import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
11
|
-
import { BlockHeader,
|
|
10
|
+
import { BlockHeader, GlobalVariables, PartialStateReference, type ProcessedTx, Tx } from '@aztec/stdlib/tx';
|
|
12
11
|
import type { MerkleTreeReadOperations } from '@aztec/world-state';
|
|
13
12
|
/**
|
|
14
13
|
* Type representing the names of the trees for the base rollup.
|
|
@@ -18,38 +17,40 @@ type BaseTreeNames = 'NoteHashTree' | 'ContractTree' | 'NullifierTree' | 'Public
|
|
|
18
17
|
* Type representing the names of the trees.
|
|
19
18
|
*/
|
|
20
19
|
export type TreeNames = BaseTreeNames | 'L1ToL2MessageTree' | 'Archive';
|
|
21
|
-
export declare const insertSideEffectsAndBuildBaseRollupHints: (tx: ProcessedTx,
|
|
22
|
-
export declare function
|
|
23
|
-
export declare
|
|
24
|
-
|
|
25
|
-
blobCommitments: BLS12Point[];
|
|
26
|
-
blobs: Blob[];
|
|
20
|
+
export declare const insertSideEffectsAndBuildBaseRollupHints: (tx: ProcessedTx, lastArchive: AppendOnlyTreeSnapshot, newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, startSpongeBlob: SpongeBlob, proverId: Fr, db: MerkleTreeWriteOperations) => Promise<PublicBaseRollupHints | PrivateBaseRollupHints>;
|
|
21
|
+
export declare function getCivcProofFromTx(tx: Tx | ProcessedTx): RecursiveProof<2084>;
|
|
22
|
+
export declare function getPublicTubePrivateInputsFromTx(tx: Tx | ProcessedTx, proverId: Fr): PublicTubePrivateInputs;
|
|
23
|
+
export declare const buildBlobHints: (blobFields: Fr[]) => {
|
|
24
|
+
blobCommitments: import("@aztec/foundation/fields").BLS12Point[];
|
|
25
|
+
blobs: import("@aztec/blob-lib").Blob[];
|
|
27
26
|
blobsHash: Fr;
|
|
27
|
+
};
|
|
28
|
+
export declare const buildBlobDataFromTxs: (txsPerCheckpoint: ProcessedTx[][]) => Promise<{
|
|
29
|
+
blobFieldsLengths: number[];
|
|
30
|
+
finalBlobChallenges: import("@aztec/blob-lib").FinalBlobBatchingChallenges;
|
|
28
31
|
}>;
|
|
29
|
-
export declare const
|
|
30
|
-
export declare const
|
|
31
|
-
export declare const
|
|
32
|
-
|
|
32
|
+
export declare const buildFinalBlobChallenges: (blobFieldsPerCheckpoint: Fr[][]) => Promise<import("@aztec/blob-lib").FinalBlobBatchingChallenges>;
|
|
33
|
+
export declare const accumulateBlobs: (blobFields: Fr[], startBlobAccumulator: BatchedBlobAccumulator) => Promise<BatchedBlobAccumulator>;
|
|
34
|
+
export declare const buildHeaderFromCircuitOutputs: (blockRootRollupOutput: BlockRollupPublicInputs) => Promise<BlockHeader>;
|
|
35
|
+
export declare const buildHeaderAndBodyFromTxs: (txs: ProcessedTx[], globalVariables: GlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeReadOperations, startSpongeBlob?: SpongeBlob | undefined) => Promise<{
|
|
36
|
+
header: L2BlockHeader;
|
|
33
37
|
body: Body;
|
|
34
38
|
}>;
|
|
39
|
+
export declare const buildBlockHeaderFromTxs: (txs: ProcessedTx[], globalVariables: GlobalVariables, startSpongeBlob: SpongeBlob, db: MerkleTreeReadOperations) => Promise<BlockHeader>;
|
|
35
40
|
/** Computes the inHash for a block's ContentCommitment given its l1 to l2 messages. */
|
|
36
41
|
export declare function computeInHashFromL1ToL2Messages(unpaddedL1ToL2Messages: Fr[]): Promise<Fr>;
|
|
37
|
-
export declare function getBlobsHashFromBlobs(inputs: Blob[]): Fr;
|
|
38
|
-
export declare function getEmptyBlockBlobsHash(): Promise<Fr>;
|
|
39
|
-
export declare function validateBlockRootOutput(blockRootOutput: BlockRootOrBlockMergePublicInputs, blockHeader: BlockHeader, db: MerkleTreeReadOperations): Promise<void>;
|
|
40
|
-
export declare const validateState: (state: StateReference, db: MerkleTreeReadOperations) => Promise<void>;
|
|
41
42
|
export declare function getLastSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<Tuple<Fr, {
|
|
42
|
-
readonly 1:
|
|
43
|
-
readonly 4:
|
|
44
|
-
readonly 3:
|
|
45
|
-
readonly 0:
|
|
43
|
+
readonly 1: 42;
|
|
44
|
+
readonly 4: 30;
|
|
45
|
+
readonly 3: 36;
|
|
46
|
+
readonly 0: 42;
|
|
46
47
|
readonly 2: 40;
|
|
47
48
|
}[TID]>>;
|
|
48
49
|
export declare function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<Tuple<Fr, {
|
|
49
|
-
readonly 1:
|
|
50
|
-
readonly 4:
|
|
51
|
-
readonly 3:
|
|
52
|
-
readonly 0:
|
|
50
|
+
readonly 1: 42;
|
|
51
|
+
readonly 4: 30;
|
|
52
|
+
readonly 3: 36;
|
|
53
|
+
readonly 0: 42;
|
|
53
54
|
readonly 2: 40;
|
|
54
55
|
}[TID]>>;
|
|
55
56
|
export declare function getTreeSnapshot(id: MerkleTreeId, db: MerkleTreeReadOperations): Promise<AppendOnlyTreeSnapshot>;
|
|
@@ -58,5 +59,6 @@ export declare function getSubtreeSiblingPath(treeId: MerkleTreeId, subtreeHeigh
|
|
|
58
59
|
export declare function getMembershipWitnessFor<N extends number>(value: Fr, treeId: MerkleTreeId, height: N, db: MerkleTreeReadOperations): Promise<MembershipWitness<N>>;
|
|
59
60
|
export declare function validatePartialState(partialState: PartialStateReference, treeSnapshots: Map<MerkleTreeId, AppendOnlyTreeSnapshot>): void;
|
|
60
61
|
export declare function validateTx(tx: ProcessedTx): void;
|
|
62
|
+
export declare function toProofData<T extends Bufferable, PROOF_LENGTH extends number>({ inputs, proof, verificationKey }: PublicInputsAndRecursiveProof<T, PROOF_LENGTH>, vkIndex?: number): ProofData<T, PROOF_LENGTH>;
|
|
61
63
|
export {};
|
|
62
64
|
//# sourceMappingURL=block-building-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"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"}
|