@aztec/end-to-end 0.85.0-alpha-testnet.1 → 0.85.0-alpha-testnet.3
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/bench/client_flows/data_extractor.js +12 -7
- package/dest/e2e_epochs/epochs_test.d.ts +1 -1
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +3 -1
- package/dest/e2e_prover/e2e_prover_test.d.ts.map +1 -1
- package/dest/e2e_prover/e2e_prover_test.js +5 -4
- package/dest/fixtures/snapshot_manager.js +6 -2
- package/dest/fixtures/utils.d.ts +5 -2
- package/dest/fixtures/utils.d.ts.map +1 -1
- package/dest/fixtures/utils.js +16 -10
- package/dest/shared/capture_private_execution_steps.d.ts.map +1 -1
- package/dest/shared/capture_private_execution_steps.js +3 -17
- package/package.json +34 -34
- package/src/bench/client_flows/data_extractor.ts +10 -6
- package/src/e2e_epochs/epochs_test.ts +5 -2
- package/src/e2e_prover/e2e_prover_test.ts +5 -4
- package/src/fixtures/snapshot_manager.ts +2 -2
- package/src/fixtures/utils.ts +18 -22
- package/src/shared/capture_private_execution_steps.ts +3 -19
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BBNativePrivateKernelProver } from '@aztec/bb-prover';
|
|
2
|
-
import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/wasm/bundle';
|
|
1
|
+
import { BBNativePrivateKernelProver } from '@aztec/bb-prover/client/native';
|
|
2
|
+
import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/client/wasm/bundle';
|
|
3
3
|
import { createLogger, logger } from '@aztec/foundation/log';
|
|
4
4
|
import { WASMSimulator } from '@aztec/simulator/client';
|
|
5
|
-
import {
|
|
5
|
+
import { Decoder } from 'msgpackr';
|
|
6
6
|
import assert from 'node:assert';
|
|
7
7
|
import { readFile, readdir, writeFile } from 'node:fs/promises';
|
|
8
8
|
import { join } from 'node:path';
|
|
@@ -131,8 +131,10 @@ async function main() {
|
|
|
131
131
|
const userLog = createLogger('client_ivc_flows:data_processor');
|
|
132
132
|
for (const flow of flows){
|
|
133
133
|
userLog.info(`Processing flow ${flow}`);
|
|
134
|
-
const
|
|
135
|
-
const
|
|
134
|
+
const ivcInputs = await readFile(join(ivcFolder, flow, 'ivc-inputs.msgpack'));
|
|
135
|
+
const stepsFromFile = new Decoder({
|
|
136
|
+
useRecords: false
|
|
137
|
+
}).unpack(ivcInputs);
|
|
136
138
|
const witnesses = await readFile(join(ivcFolder, flow, 'witnesses.json'));
|
|
137
139
|
const witnessStack = JSON.parse(witnesses.toString()).map((witnessMap)=>{
|
|
138
140
|
return new Map(Object.entries(witnessMap).map(([k, v])=>[
|
|
@@ -145,8 +147,11 @@ async function main() {
|
|
|
145
147
|
const privateExecutionSteps = executionSteps.map((step, i)=>({
|
|
146
148
|
functionName: step.fnName,
|
|
147
149
|
gateCount: step.gateCount,
|
|
148
|
-
bytecode:
|
|
149
|
-
witness
|
|
150
|
+
bytecode: stepsFromFile[i].bytecode,
|
|
151
|
+
// TODO(AD) do we still want to take this from witness.json?
|
|
152
|
+
witness: witnessStack[i],
|
|
153
|
+
// This can be left empty. If so, the prover will generate a vk on the fly (~25% slower).
|
|
154
|
+
vk: Buffer.from([])
|
|
150
155
|
}));
|
|
151
156
|
let stats;
|
|
152
157
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -12,7 +12,7 @@ export declare const L2_SLOT_DURATION_IN_L1_SLOTS = 2;
|
|
|
12
12
|
export declare const WORLD_STATE_BLOCK_HISTORY = 2;
|
|
13
13
|
export declare const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
14
14
|
export declare const ARCHIVER_POLL_INTERVAL = 50;
|
|
15
|
-
export type EpochsTestOpts = Partial<Pick<SetupOptions, 'startProverNode' | 'aztecProofSubmissionWindow' | 'aztecEpochDuration' | 'proverTestDelayMs'>>;
|
|
15
|
+
export type EpochsTestOpts = Partial<Pick<SetupOptions, 'startProverNode' | 'aztecProofSubmissionWindow' | 'aztecEpochDuration' | 'proverTestDelayMs' | 'proverNodeConfig'>>;
|
|
16
16
|
/**
|
|
17
17
|
* Tests building of epochs using fast block times and short epochs.
|
|
18
18
|
* Spawns an aztec node and a prover node with fake proofs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAM,KAAK,MAAM,EAA8D,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAkB,KAAK,OAAO,EAAwB,MAAM,sBAAsB,CAAC;AAGxG,OAAO,EAAE,UAAU,EAAuB,MAAM,oBAAoB,CAAC;AAIrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,KAAK,EAAO,YAAY,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAIlB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,kBAAkB,QAAsE,CAAC;AACtG,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC,IAAI,
|
|
1
|
+
{"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAM,KAAK,MAAM,EAA8D,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAkB,KAAK,OAAO,EAAwB,MAAM,sBAAsB,CAAC;AAGxG,OAAO,EAAE,UAAU,EAAuB,MAAM,oBAAoB,CAAC;AAIrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,KAAK,EAAO,YAAY,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAIlB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,kBAAkB,QAAsE,CAAC;AACtG,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AACnD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC,IAAI,CACF,YAAY,EACZ,iBAAiB,GAAG,4BAA4B,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,kBAAkB,CACnH,CACF,CAAC;AAEF;;;;GAIG;AACH,qBAAa,iBAAiB;IACrB,OAAO,EAAG,eAAe,CAAC;IAC1B,QAAQ,EAAG,YAAY,CAAC;IACxB,MAAM,EAAG,cAAc,CAAC;IACxB,SAAS,EAAG,iBAAiB,CAAC;IAC9B,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAG,YAAY,CAAC;IACvB,aAAa,EAAG,OAAO,CAAC;IACxB,gBAAgB,EAAG,OAAO,CAAC;IAE3B,WAAW,EAAE,UAAU,EAAE,CAAM;IAC/B,KAAK,EAAE,gBAAgB,EAAE,CAAM;IAE/B,aAAa,EAAG,MAAM,CAAC;WAEV,KAAK,CAAC,IAAI,GAAE,cAAmB;IAMtC,KAAK,CAAC,IAAI,GAAE,cAAmB;IAoE/B,QAAQ;IAOR,gBAAgB;IAgBhB,sBAAsB;IAcnC,OAAO,CAAC,iBAAiB;IAKzB,0FAA0F;IAC7E,oBAAoB,CAAC,KAAK,EAAE,MAAM;IAO/C,sDAAsD;IACzC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,SAAK;IAShE,iEAAiE;IACpD,4BAA4B,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,SAAK;IASjE,mEAAmE;IACtD,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU;IAclF,0EAA0E;IAC7D,mBAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,OAAO;CAUtF"}
|
|
@@ -105,7 +105,9 @@ export const ARCHIVER_POLL_INTERVAL = 50;
|
|
|
105
105
|
const proverNode = await withLogNameSuffix(suffix, ()=>createAndSyncProverNode(proverNodePrivateKey, {
|
|
106
106
|
...this.context.config,
|
|
107
107
|
proverId: Fr.fromString(suffix)
|
|
108
|
-
},
|
|
108
|
+
}, {
|
|
109
|
+
dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex'))
|
|
110
|
+
}, this.context.aztecNode));
|
|
109
111
|
this.proverNodes.push(proverNode);
|
|
110
112
|
return proverNode;
|
|
111
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2e_prover_test.d.ts","sourceRoot":"","sources":["../../src/e2e_prover/e2e_prover_test.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,UAAU,EACV,KAAK,MAAM,EAGZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAqB,KAAK,6BAA6B,EAAuB,MAAM,kBAAkB,CAAC;AAE9G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,KAAK,2BAA2B,EAAoB,MAAM,iBAAiB,CAAC;AAGrF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAQtE,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASlE;;;;;GAKG;AAEH,qBAAa,cAAc;IA6BvB,OAAO,CAAC,sBAAsB;IAE9B,OAAO,CAAC,UAAU;IA9BpB,MAAM,CAAC,UAAU,SAAU;IAC3B,MAAM,CAAC,YAAY,SAAS;IAC5B,MAAM,CAAC,cAAc,SAAO;IAC5B,OAAO,CAAC,eAAe,CAAmB;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,kBAAkB,EAAE,CAAM;IAC5C,OAAO,EAAE,0BAA0B,EAAE,CAAM;IAC3C,QAAQ,EAAE,eAAe,EAAE,CAAM;IACjC,eAAe,EAAG,aAAa,CAAC;IAChC,QAAQ,EAAG,cAAc,CAAC;IAC1B,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;IAChC,GAAG,EAAG,UAAU,CAAC;IACjB,UAAU,EAAG,UAAU,CAAC;IACxB,QAAQ,EAAG,cAAc,CAAC;IAC1B,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAsB;IAC9C,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAChD,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;IACrD,YAAY,EAAE,aAAa,EAAE,CAAM;IACnC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,mBAAmB,CAAc;IAClC,WAAW,EAAG,2BAA2B,CAAC;IAC1C,aAAa,EAAG,UAAU,CAAC;gBAGhC,QAAQ,EAAE,MAAM,EACR,sBAAsB,EAAE,MAAM,EACtC,QAAQ,EAAE,UAAU,EACZ,UAAU,UAAO;IAW3B;;;;OAIG;IACG,kBAAkB;IAqDlB,KAAK;
|
|
1
|
+
{"version":3,"file":"e2e_prover_test.d.ts","sourceRoot":"","sources":["../../src/e2e_prover/e2e_prover_test.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,UAAU,EACV,KAAK,MAAM,EAGZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAqB,KAAK,6BAA6B,EAAuB,MAAM,kBAAkB,CAAC;AAE9G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,KAAK,2BAA2B,EAAoB,MAAM,iBAAiB,CAAC;AAGrF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAQtE,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASlE;;;;;GAKG;AAEH,qBAAa,cAAc;IA6BvB,OAAO,CAAC,sBAAsB;IAE9B,OAAO,CAAC,UAAU;IA9BpB,MAAM,CAAC,UAAU,SAAU;IAC3B,MAAM,CAAC,YAAY,SAAS;IAC5B,MAAM,CAAC,cAAc,SAAO;IAC5B,OAAO,CAAC,eAAe,CAAmB;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,kBAAkB,EAAE,CAAM;IAC5C,OAAO,EAAE,0BAA0B,EAAE,CAAM;IAC3C,QAAQ,EAAE,eAAe,EAAE,CAAM;IACjC,eAAe,EAAG,aAAa,CAAC;IAChC,QAAQ,EAAG,cAAc,CAAC;IAC1B,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;IAChC,GAAG,EAAG,UAAU,CAAC;IACjB,UAAU,EAAG,UAAU,CAAC;IACxB,QAAQ,EAAG,cAAc,CAAC;IAC1B,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAsB;IAC9C,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAChD,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;IACrD,YAAY,EAAE,aAAa,EAAE,CAAM;IACnC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,mBAAmB,CAAc;IAClC,WAAW,EAAG,2BAA2B,CAAC;IAC1C,aAAa,EAAG,UAAU,CAAC;gBAGhC,QAAQ,EAAE,MAAM,EACR,sBAAsB,EAAE,MAAM,EACtC,QAAQ,EAAE,UAAU,EACZ,UAAU,UAAO;IAW3B;;;;OAIG;IACG,kBAAkB;IAqDlB,KAAK;YA+JG,WAAW;IAQzB,QAAQ,YACA,MAAM,SACL,CAAC,OAAO,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,YACxC,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,QAAQ,IAAI,CAAC,KACtE,QAAQ,IAAI,CAAC,CAAwD;IAElE,QAAQ;IAeR,iBAAiB;IA+CjB,cAAc;CA4BrB"}
|
|
@@ -186,7 +186,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
186
186
|
this.logger.verbose('Starting prover node');
|
|
187
187
|
const proverConfig = {
|
|
188
188
|
...this.context.aztecNodeConfig,
|
|
189
|
-
|
|
189
|
+
proverCoordinationNodeUrls: [],
|
|
190
190
|
dataDirectory: undefined,
|
|
191
191
|
proverId: this.proverAddress.toField(),
|
|
192
192
|
realProofs: this.realProofs,
|
|
@@ -195,9 +195,10 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
195
195
|
proverNodeMaxPendingJobs: 100,
|
|
196
196
|
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
197
197
|
proverNodePollingIntervalMs: 100,
|
|
198
|
-
txGatheringTimeoutMs: 60000,
|
|
199
198
|
txGatheringIntervalMs: 1000,
|
|
200
|
-
|
|
199
|
+
txGatheringBatchSize: 10,
|
|
200
|
+
txGatheringMaxParallelRequestsPerNode: 100,
|
|
201
|
+
proverNodeFailedEpochStore: undefined
|
|
201
202
|
};
|
|
202
203
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
203
204
|
const { prefilledPublicData } = await getGenesisValues(this.context.initialFundedAccounts.map((a)=>a.address).concat(sponsoredFPCAddress));
|
|
@@ -208,7 +209,7 @@ const { E2E_DATA_PATH: dataPath } = process.env;
|
|
|
208
209
|
}, {
|
|
209
210
|
prefilledPublicData
|
|
210
211
|
});
|
|
211
|
-
this.proverNode.start();
|
|
212
|
+
await this.proverNode.start();
|
|
212
213
|
this.logger.warn(`Proofs are now enabled`);
|
|
213
214
|
return this;
|
|
214
215
|
}
|
|
@@ -328,7 +328,9 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
328
328
|
let proverNode = undefined;
|
|
329
329
|
if (opts.startProverNode) {
|
|
330
330
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
331
|
-
proverNode = await createAndSyncProverNode(`0x${proverNodePrivateKey.toString('hex')}`, aztecNodeConfig,
|
|
331
|
+
proverNode = await createAndSyncProverNode(`0x${proverNodePrivateKey.toString('hex')}`, aztecNodeConfig, {
|
|
332
|
+
dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex'))
|
|
333
|
+
}, aztecNode, prefilledPublicData);
|
|
332
334
|
}
|
|
333
335
|
logger.verbose('Creating pxe...');
|
|
334
336
|
const pxeConfig = getPXEServiceConfig();
|
|
@@ -422,7 +424,9 @@ export function createSnapshotManager(testName, dataPath, config = {}, deployL1C
|
|
|
422
424
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
423
425
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
424
426
|
const proverNodePrivateKeyHex = `0x${proverNodePrivateKey.toString('hex')}`;
|
|
425
|
-
proverNode = await createAndSyncProverNode(proverNodePrivateKeyHex, aztecNodeConfig,
|
|
427
|
+
proverNode = await createAndSyncProverNode(proverNodePrivateKeyHex, aztecNodeConfig, {
|
|
428
|
+
dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex'))
|
|
429
|
+
}, aztecNode, prefilledPublicData);
|
|
426
430
|
}
|
|
427
431
|
logger.verbose('Creating pxe...');
|
|
428
432
|
const pxeConfig = getPXEServiceConfig();
|
package/dest/fixtures/utils.d.ts
CHANGED
|
@@ -10,8 +10,9 @@ import { startAnvil } from '@aztec/ethereum/test';
|
|
|
10
10
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
11
11
|
import { Fr } from '@aztec/foundation/fields';
|
|
12
12
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
13
|
+
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
13
14
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
14
|
-
import { type ProverNode } from '@aztec/prover-node';
|
|
15
|
+
import { type ProverNode, type ProverNodeConfig } from '@aztec/prover-node';
|
|
15
16
|
import { type PXEService, type PXEServiceConfig } from '@aztec/pxe/server';
|
|
16
17
|
import type { SequencerClient } from '@aztec/sequencer-client';
|
|
17
18
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
@@ -78,6 +79,8 @@ export type SetupOptions = {
|
|
|
78
79
|
};
|
|
79
80
|
/** Public data that will be inserted in the tree in genesis */
|
|
80
81
|
genesisPublicData?: PublicDataTreeLeaf[];
|
|
82
|
+
/** Specific config for the prover node, if set. */
|
|
83
|
+
proverNodeConfig?: Partial<ProverNodeConfig>;
|
|
81
84
|
} & Partial<AztecNodeConfig>;
|
|
82
85
|
/** Context for an end-to-end test as returned by the `setup` function */
|
|
83
86
|
export type EndToEndContext = {
|
|
@@ -158,6 +161,6 @@ export declare function getSponsoredFPCAddress(): Promise<AztecAddress>;
|
|
|
158
161
|
*/
|
|
159
162
|
export declare function setupSponsoredFPC(pxe: PXE): Promise<SponsoredFPCContract>;
|
|
160
163
|
export declare function waitForProvenChain(node: AztecNode, targetBlock?: number, timeoutSec?: number, intervalSec?: number): Promise<void>;
|
|
161
|
-
export declare function createAndSyncProverNode(proverNodePrivateKey: `0x${string}`, aztecNodeConfig: AztecNodeConfig,
|
|
164
|
+
export declare function createAndSyncProverNode(proverNodePrivateKey: `0x${string}`, aztecNodeConfig: AztecNodeConfig, proverNodeConfig: Partial<ProverNodeConfig> & Pick<DataStoreConfig, 'dataDirectory'>, aztecNode: AztecNode, prefilledPublicData?: PublicDataTreeLeaf[]): Promise<ProverNode>;
|
|
162
165
|
export declare function createForwarderContract(aztecNodeConfig: AztecNodeConfig, privateKey: `0x${string}`, rollupAddress: Hex): Promise<ForwarderContract>;
|
|
163
166
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/utils.ts"],"names":[],"mappings":";;AACA,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,KAAK,eAAe,EAAsC,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,SAAS,EAEd,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,GAAG,EAER,KAAK,MAAM,EAMZ,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,yBAAyB,CAAC;AAGpF,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,iBAAiB,EAOlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA0C,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAG7E,OAAO,EAAE,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fixtures/utils.ts"],"names":[],"mappings":"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"}
|
package/dest/fixtures/utils.js
CHANGED
|
@@ -337,7 +337,12 @@ export const setupL1Contracts = async (l1RpcUrls, account, logger, args = {}, ch
|
|
|
337
337
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
338
338
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
339
339
|
const proverNodePrivateKeyHex = `0x${proverNodePrivateKey.toString('hex')}`;
|
|
340
|
-
|
|
340
|
+
const proverNodeDataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
341
|
+
const proverNodeConfig = {
|
|
342
|
+
...config.proverNodeConfig,
|
|
343
|
+
dataDirectory: proverNodeDataDirectory
|
|
344
|
+
};
|
|
345
|
+
proverNode = await createAndSyncProverNode(proverNodePrivateKeyHex, config, proverNodeConfig, aztecNode);
|
|
341
346
|
}
|
|
342
347
|
logger.verbose('Creating a pxe...');
|
|
343
348
|
const { pxe, teardown: pxeTeardown } = await setupPXEService(aztecNode, pxeOpts, logger);
|
|
@@ -513,10 +518,10 @@ export async function waitForProvenChain(node, targetBlock, timeoutSec = 60, int
|
|
|
513
518
|
targetBlock ??= await node.getBlockNumber();
|
|
514
519
|
await retryUntil(async ()=>await node.getProvenBlockNumber() >= targetBlock, 'proven chain status', timeoutSec, intervalSec);
|
|
515
520
|
}
|
|
516
|
-
export async function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig,
|
|
521
|
+
export async function createAndSyncProverNode(proverNodePrivateKey, aztecNodeConfig, proverNodeConfig, aztecNode, prefilledPublicData = []) {
|
|
517
522
|
// Disable stopping the aztec node as the prover coordination test will kill it otherwise
|
|
518
523
|
// This is only required when stopping the prover node for testing
|
|
519
|
-
const
|
|
524
|
+
const aztecNodeTxProvider = {
|
|
520
525
|
getTxByHash: aztecNode.getTxByHash.bind(aztecNode),
|
|
521
526
|
getTxsByHash: aztecNode.getTxsByHash.bind(aztecNode),
|
|
522
527
|
stop: ()=>Promise.resolve()
|
|
@@ -525,7 +530,7 @@ export async function createAndSyncProverNode(proverNodePrivateKey, aztecNodeCon
|
|
|
525
530
|
// Creating temp store and archiver for simulated prover node
|
|
526
531
|
const archiverConfig = {
|
|
527
532
|
...aztecNodeConfig,
|
|
528
|
-
dataDirectory
|
|
533
|
+
dataDirectory: proverNodeConfig.dataDirectory
|
|
529
534
|
};
|
|
530
535
|
const archiver = await createArchiver(archiverConfig, blobSinkClient, {
|
|
531
536
|
blockUntilSync: true
|
|
@@ -533,21 +538,22 @@ export async function createAndSyncProverNode(proverNodePrivateKey, aztecNodeCon
|
|
|
533
538
|
// Prover node config is for simulated proofs
|
|
534
539
|
const proverConfig = {
|
|
535
540
|
...aztecNodeConfig,
|
|
536
|
-
|
|
537
|
-
dataDirectory: undefined,
|
|
541
|
+
proverCoordinationNodeUrls: [],
|
|
538
542
|
realProofs: false,
|
|
539
543
|
proverAgentCount: 2,
|
|
540
544
|
publisherPrivateKey: proverNodePrivateKey,
|
|
541
545
|
proverNodeMaxPendingJobs: 10,
|
|
542
546
|
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
543
547
|
proverNodePollingIntervalMs: 200,
|
|
544
|
-
txGatheringTimeoutMs: 60000,
|
|
545
548
|
txGatheringIntervalMs: 1000,
|
|
546
|
-
|
|
549
|
+
txGatheringBatchSize: 10,
|
|
550
|
+
txGatheringMaxParallelRequestsPerNode: 10,
|
|
551
|
+
proverNodeFailedEpochStore: undefined,
|
|
552
|
+
...proverNodeConfig
|
|
547
553
|
};
|
|
548
554
|
const l1TxUtils = createDelayedL1TxUtils(aztecNodeConfig, proverNodePrivateKey, 'prover-node');
|
|
549
555
|
const proverNode = await createProverNode(proverConfig, {
|
|
550
|
-
aztecNodeTxProvider
|
|
556
|
+
aztecNodeTxProvider,
|
|
551
557
|
archiver: archiver,
|
|
552
558
|
l1TxUtils
|
|
553
559
|
}, {
|
|
@@ -556,7 +562,7 @@ export async function createAndSyncProverNode(proverNodePrivateKey, aztecNodeCon
|
|
|
556
562
|
getLogger().info(`Created and synced prover node`, {
|
|
557
563
|
publisherAddress: l1TxUtils.walletClient.account.address
|
|
558
564
|
});
|
|
559
|
-
proverNode.start();
|
|
565
|
+
await proverNode.start();
|
|
560
566
|
return proverNode;
|
|
561
567
|
}
|
|
562
568
|
function createDelayedL1TxUtils(aztecNodeConfig, privateKey, logName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture_private_execution_steps.d.ts","sourceRoot":"","sources":["../../src/shared/capture_private_execution_steps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,2BAA2B,EAC3B,YAAY,EACZ,aAAa,EACb,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"capture_private_execution_steps.d.ts","sourceRoot":"","sources":["../../src/shared/capture_private_execution_steps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,2BAA2B,EAC3B,YAAY,EACZ,aAAa,EACb,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AASnC,wBAAsB,oCAAoC,CACxD,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,2BAA2B,GAAG,YAAY,EACvD,IAAI,CAAC,EAAE,IAAI,CAAC,oBAAoB,GAAG,aAAa,EAAE,aAAa,CAAC,EAChE,aAAa,CAAC,EAAE,MAAM,iBAsCvB"}
|
|
@@ -2,25 +2,10 @@
|
|
|
2
2
|
* This module exposes the ability to capture the private exection steps that go into our "Client IVC" prover.
|
|
3
3
|
* These are used for debugging and benchmarking barretenberg (the prover component).
|
|
4
4
|
*/ import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import {
|
|
6
|
-
import { encode } from '@msgpack/msgpack';
|
|
5
|
+
import { serializePrivateExecutionSteps } from '@aztec/stdlib/kernel';
|
|
7
6
|
import { promises as fs } from 'fs';
|
|
8
7
|
import path from 'path';
|
|
9
8
|
const logger = createLogger('e2e:capture-private-execution-steps');
|
|
10
|
-
// TODO(#7371): This is duplicated.
|
|
11
|
-
// Longer term we won't use this hacked together msgpack format
|
|
12
|
-
// Leaving duplicated as this eventually bb will provide a serialization
|
|
13
|
-
// helper for passing to a generic msgpack RPC endpoint.
|
|
14
|
-
async function _createClientIvcProofFiles(directory, executionSteps) {
|
|
15
|
-
const acirPath = path.join(directory, 'acir.msgpack');
|
|
16
|
-
const witnessPath = path.join(directory, 'witnesses.msgpack');
|
|
17
|
-
await fs.writeFile(acirPath, encode(executionSteps.map((map)=>map.bytecode)));
|
|
18
|
-
await fs.writeFile(witnessPath, encode(executionSteps.map((map)=>serializeWitness(map.witness))));
|
|
19
|
-
return {
|
|
20
|
-
acirPath,
|
|
21
|
-
witnessPath
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
9
|
export async function capturePrivateExecutionStepsIfEnvSet(label, interaction, opts, expectedSteps) {
|
|
25
10
|
// Not included in env_var.ts as internal to e2e tests.
|
|
26
11
|
const ivcFolder = process.env.CAPTURE_IVC_FOLDER;
|
|
@@ -45,7 +30,8 @@ export async function capturePrivateExecutionStepsIfEnvSet(label, interaction, o
|
|
|
45
30
|
recursive: true
|
|
46
31
|
});
|
|
47
32
|
// Write the client IVC files read by the prover.
|
|
48
|
-
|
|
33
|
+
const ivcInputsPath = path.join(resultsDirectory, 'ivc-inputs.msgpack');
|
|
34
|
+
await fs.writeFile(ivcInputsPath, serializePrivateExecutionSteps(result.executionSteps));
|
|
49
35
|
if (profileMode === 'full') {
|
|
50
36
|
// If we have gate counts, write the steps in human-readable format.
|
|
51
37
|
await fs.writeFile(path.join(resultsDirectory, 'steps.json'), JSON.stringify(result.executionSteps.map((step)=>({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/end-to-end",
|
|
3
|
-
"version": "0.85.0-alpha-testnet.
|
|
3
|
+
"version": "0.85.0-alpha-testnet.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"inherits": [
|
|
@@ -26,41 +26,40 @@
|
|
|
26
26
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@aztec/accounts": "0.85.0-alpha-testnet.
|
|
30
|
-
"@aztec/archiver": "0.85.0-alpha-testnet.
|
|
31
|
-
"@aztec/aztec": "0.85.0-alpha-testnet.
|
|
32
|
-
"@aztec/aztec-node": "0.85.0-alpha-testnet.
|
|
33
|
-
"@aztec/aztec.js": "0.85.0-alpha-testnet.
|
|
34
|
-
"@aztec/bb-prover": "0.85.0-alpha-testnet.
|
|
35
|
-
"@aztec/blob-lib": "0.85.0-alpha-testnet.
|
|
36
|
-
"@aztec/blob-sink": "0.85.0-alpha-testnet.
|
|
37
|
-
"@aztec/bot": "0.85.0-alpha-testnet.
|
|
38
|
-
"@aztec/cli": "0.85.0-alpha-testnet.
|
|
39
|
-
"@aztec/constants": "0.85.0-alpha-testnet.
|
|
40
|
-
"@aztec/entrypoints": "0.85.0-alpha-testnet.
|
|
41
|
-
"@aztec/epoch-cache": "0.85.0-alpha-testnet.
|
|
42
|
-
"@aztec/ethereum": "0.85.0-alpha-testnet.
|
|
43
|
-
"@aztec/foundation": "0.85.0-alpha-testnet.
|
|
44
|
-
"@aztec/kv-store": "0.85.0-alpha-testnet.
|
|
45
|
-
"@aztec/l1-artifacts": "0.85.0-alpha-testnet.
|
|
46
|
-
"@aztec/merkle-tree": "0.85.0-alpha-testnet.
|
|
47
|
-
"@aztec/noir-contracts.js": "0.85.0-alpha-testnet.
|
|
48
|
-
"@aztec/noir-noirc_abi": "0.85.0-alpha-testnet.
|
|
49
|
-
"@aztec/noir-protocol-circuits-types": "0.85.0-alpha-testnet.
|
|
50
|
-
"@aztec/p2p": "0.85.0-alpha-testnet.
|
|
51
|
-
"@aztec/protocol-contracts": "0.85.0-alpha-testnet.
|
|
52
|
-
"@aztec/prover-client": "0.85.0-alpha-testnet.
|
|
53
|
-
"@aztec/prover-node": "0.85.0-alpha-testnet.
|
|
54
|
-
"@aztec/pxe": "0.85.0-alpha-testnet.
|
|
55
|
-
"@aztec/sequencer-client": "0.85.0-alpha-testnet.
|
|
56
|
-
"@aztec/simulator": "0.85.0-alpha-testnet.
|
|
57
|
-
"@aztec/stdlib": "0.85.0-alpha-testnet.
|
|
58
|
-
"@aztec/telemetry-client": "0.85.0-alpha-testnet.
|
|
59
|
-
"@aztec/validator-client": "0.85.0-alpha-testnet.
|
|
60
|
-
"@aztec/world-state": "0.85.0-alpha-testnet.
|
|
29
|
+
"@aztec/accounts": "0.85.0-alpha-testnet.3",
|
|
30
|
+
"@aztec/archiver": "0.85.0-alpha-testnet.3",
|
|
31
|
+
"@aztec/aztec": "0.85.0-alpha-testnet.3",
|
|
32
|
+
"@aztec/aztec-node": "0.85.0-alpha-testnet.3",
|
|
33
|
+
"@aztec/aztec.js": "0.85.0-alpha-testnet.3",
|
|
34
|
+
"@aztec/bb-prover": "0.85.0-alpha-testnet.3",
|
|
35
|
+
"@aztec/blob-lib": "0.85.0-alpha-testnet.3",
|
|
36
|
+
"@aztec/blob-sink": "0.85.0-alpha-testnet.3",
|
|
37
|
+
"@aztec/bot": "0.85.0-alpha-testnet.3",
|
|
38
|
+
"@aztec/cli": "0.85.0-alpha-testnet.3",
|
|
39
|
+
"@aztec/constants": "0.85.0-alpha-testnet.3",
|
|
40
|
+
"@aztec/entrypoints": "0.85.0-alpha-testnet.3",
|
|
41
|
+
"@aztec/epoch-cache": "0.85.0-alpha-testnet.3",
|
|
42
|
+
"@aztec/ethereum": "0.85.0-alpha-testnet.3",
|
|
43
|
+
"@aztec/foundation": "0.85.0-alpha-testnet.3",
|
|
44
|
+
"@aztec/kv-store": "0.85.0-alpha-testnet.3",
|
|
45
|
+
"@aztec/l1-artifacts": "0.85.0-alpha-testnet.3",
|
|
46
|
+
"@aztec/merkle-tree": "0.85.0-alpha-testnet.3",
|
|
47
|
+
"@aztec/noir-contracts.js": "0.85.0-alpha-testnet.3",
|
|
48
|
+
"@aztec/noir-noirc_abi": "0.85.0-alpha-testnet.3",
|
|
49
|
+
"@aztec/noir-protocol-circuits-types": "0.85.0-alpha-testnet.3",
|
|
50
|
+
"@aztec/p2p": "0.85.0-alpha-testnet.3",
|
|
51
|
+
"@aztec/protocol-contracts": "0.85.0-alpha-testnet.3",
|
|
52
|
+
"@aztec/prover-client": "0.85.0-alpha-testnet.3",
|
|
53
|
+
"@aztec/prover-node": "0.85.0-alpha-testnet.3",
|
|
54
|
+
"@aztec/pxe": "0.85.0-alpha-testnet.3",
|
|
55
|
+
"@aztec/sequencer-client": "0.85.0-alpha-testnet.3",
|
|
56
|
+
"@aztec/simulator": "0.85.0-alpha-testnet.3",
|
|
57
|
+
"@aztec/stdlib": "0.85.0-alpha-testnet.3",
|
|
58
|
+
"@aztec/telemetry-client": "0.85.0-alpha-testnet.3",
|
|
59
|
+
"@aztec/validator-client": "0.85.0-alpha-testnet.3",
|
|
60
|
+
"@aztec/world-state": "0.85.0-alpha-testnet.3",
|
|
61
61
|
"@iarna/toml": "^2.2.5",
|
|
62
62
|
"@jest/globals": "^29.5.0",
|
|
63
|
-
"@msgpack/msgpack": "^3.0.0-beta2",
|
|
64
63
|
"@noble/curves": "^1.0.0",
|
|
65
64
|
"@swc/core": "^1.4.11",
|
|
66
65
|
"@swc/jest": "^0.2.36",
|
|
@@ -85,6 +84,7 @@
|
|
|
85
84
|
"lodash.compact": "^3.0.1",
|
|
86
85
|
"lodash.every": "^4.6.0",
|
|
87
86
|
"lodash.omit": "^4.5.0",
|
|
87
|
+
"msgpackr": "^1.11.2",
|
|
88
88
|
"process": "^0.11.10",
|
|
89
89
|
"stream-browserify": "^3.0.0",
|
|
90
90
|
"string-argv": "^0.3.2",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { Logger } from '@aztec/aztec.js';
|
|
2
|
-
import { BBNativePrivateKernelProver } from '@aztec/bb-prover';
|
|
3
|
-
import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/wasm/bundle';
|
|
2
|
+
import { BBNativePrivateKernelProver } from '@aztec/bb-prover/client/native';
|
|
3
|
+
import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/client/wasm/bundle';
|
|
4
4
|
import { createLogger, logger } from '@aztec/foundation/log';
|
|
5
5
|
import { WASMSimulator } from '@aztec/simulator/client';
|
|
6
6
|
import type { PrivateExecutionStep } from '@aztec/stdlib/kernel';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { Decoder } from 'msgpackr';
|
|
9
9
|
import assert from 'node:assert';
|
|
10
10
|
import { readFile, readdir, writeFile } from 'node:fs/promises';
|
|
11
11
|
import { join } from 'node:path';
|
|
@@ -149,9 +149,10 @@ async function main() {
|
|
|
149
149
|
|
|
150
150
|
for (const flow of flows) {
|
|
151
151
|
userLog.info(`Processing flow ${flow}`);
|
|
152
|
-
const
|
|
153
|
-
const
|
|
152
|
+
const ivcInputs = await readFile(join(ivcFolder, flow, 'ivc-inputs.msgpack'));
|
|
153
|
+
const stepsFromFile: PrivateExecutionStep[] = new Decoder({ useRecords: false }).unpack(ivcInputs);
|
|
154
154
|
const witnesses = await readFile(join(ivcFolder, flow, 'witnesses.json'));
|
|
155
|
+
|
|
155
156
|
const witnessStack = JSON.parse(witnesses.toString()).map((witnessMap: Record<string, string>) => {
|
|
156
157
|
return new Map<number, string>(Object.entries(witnessMap).map(([k, v]) => [Number(k), v]));
|
|
157
158
|
});
|
|
@@ -160,8 +161,11 @@ async function main() {
|
|
|
160
161
|
const privateExecutionSteps: PrivateExecutionStep[] = executionSteps.map((step, i) => ({
|
|
161
162
|
functionName: step.fnName,
|
|
162
163
|
gateCount: step.gateCount,
|
|
163
|
-
bytecode:
|
|
164
|
+
bytecode: stepsFromFile[i].bytecode,
|
|
165
|
+
// TODO(AD) do we still want to take this from witness.json?
|
|
164
166
|
witness: witnessStack[i],
|
|
167
|
+
// This can be left empty. If so, the prover will generate a vk on the fly (~25% slower).
|
|
168
|
+
vk: Buffer.from([]),
|
|
165
169
|
}));
|
|
166
170
|
let stats: { duration: number; eventName: string; proofSize: number } | undefined;
|
|
167
171
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -30,7 +30,10 @@ export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
|
|
|
30
30
|
export const ARCHIVER_POLL_INTERVAL = 50;
|
|
31
31
|
|
|
32
32
|
export type EpochsTestOpts = Partial<
|
|
33
|
-
Pick<
|
|
33
|
+
Pick<
|
|
34
|
+
SetupOptions,
|
|
35
|
+
'startProverNode' | 'aztecProofSubmissionWindow' | 'aztecEpochDuration' | 'proverTestDelayMs' | 'proverNodeConfig'
|
|
36
|
+
>
|
|
34
37
|
>;
|
|
35
38
|
|
|
36
39
|
/**
|
|
@@ -142,8 +145,8 @@ export class EpochsTestContext {
|
|
|
142
145
|
createAndSyncProverNode(
|
|
143
146
|
proverNodePrivateKey,
|
|
144
147
|
{ ...this.context.config, proverId: Fr.fromString(suffix) },
|
|
148
|
+
{ dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')) },
|
|
145
149
|
this.context.aztecNode,
|
|
146
|
-
join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
|
|
147
150
|
),
|
|
148
151
|
);
|
|
149
152
|
this.proverNodes.push(proverNode);
|
|
@@ -282,7 +282,7 @@ export class FullProverTest {
|
|
|
282
282
|
this.logger.verbose('Starting prover node');
|
|
283
283
|
const proverConfig: ProverNodeConfig = {
|
|
284
284
|
...this.context.aztecNodeConfig,
|
|
285
|
-
|
|
285
|
+
proverCoordinationNodeUrls: [],
|
|
286
286
|
dataDirectory: undefined,
|
|
287
287
|
proverId: this.proverAddress.toField(),
|
|
288
288
|
realProofs: this.realProofs,
|
|
@@ -291,9 +291,10 @@ export class FullProverTest {
|
|
|
291
291
|
proverNodeMaxPendingJobs: 100,
|
|
292
292
|
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
293
293
|
proverNodePollingIntervalMs: 100,
|
|
294
|
-
txGatheringTimeoutMs: 60000,
|
|
295
294
|
txGatheringIntervalMs: 1000,
|
|
296
|
-
|
|
295
|
+
txGatheringBatchSize: 10,
|
|
296
|
+
txGatheringMaxParallelRequestsPerNode: 100,
|
|
297
|
+
proverNodeFailedEpochStore: undefined,
|
|
297
298
|
};
|
|
298
299
|
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
299
300
|
const { prefilledPublicData } = await getGenesisValues(
|
|
@@ -308,7 +309,7 @@ export class FullProverTest {
|
|
|
308
309
|
},
|
|
309
310
|
{ prefilledPublicData },
|
|
310
311
|
);
|
|
311
|
-
this.proverNode.start();
|
|
312
|
+
await this.proverNode.start();
|
|
312
313
|
|
|
313
314
|
this.logger.warn(`Proofs are now enabled`);
|
|
314
315
|
return this;
|
|
@@ -437,8 +437,8 @@ async function setupFromFresh(
|
|
|
437
437
|
proverNode = await createAndSyncProverNode(
|
|
438
438
|
`0x${proverNodePrivateKey!.toString('hex')}`,
|
|
439
439
|
aztecNodeConfig,
|
|
440
|
+
{ dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex')) },
|
|
440
441
|
aztecNode,
|
|
441
|
-
path.join(directoryToCleanup, randomBytes(8).toString('hex')),
|
|
442
442
|
prefilledPublicData,
|
|
443
443
|
);
|
|
444
444
|
}
|
|
@@ -561,8 +561,8 @@ async function setupFromState(statePath: string, logger: Logger): Promise<Subsys
|
|
|
561
561
|
proverNode = await createAndSyncProverNode(
|
|
562
562
|
proverNodePrivateKeyHex,
|
|
563
563
|
aztecNodeConfig,
|
|
564
|
+
{ dataDirectory: path.join(directoryToCleanup, randomBytes(8).toString('hex')) },
|
|
564
565
|
aztecNode,
|
|
565
|
-
path.join(directoryToCleanup, randomBytes(8).toString('hex')),
|
|
566
566
|
prefilledPublicData,
|
|
567
567
|
);
|
|
568
568
|
}
|
package/src/fixtures/utils.ts
CHANGED
|
@@ -48,6 +48,7 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
48
48
|
import { Fr } from '@aztec/foundation/fields';
|
|
49
49
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
50
50
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
51
|
+
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
51
52
|
import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
|
|
52
53
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
53
54
|
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
@@ -296,6 +297,8 @@ export type SetupOptions = {
|
|
|
296
297
|
telemetryConfig?: Partial<TelemetryClientConfig> & { benchmark?: boolean };
|
|
297
298
|
/** Public data that will be inserted in the tree in genesis */
|
|
298
299
|
genesisPublicData?: PublicDataTreeLeaf[];
|
|
300
|
+
/** Specific config for the prover node, if set. */
|
|
301
|
+
proverNodeConfig?: Partial<ProverNodeConfig>;
|
|
299
302
|
} & Partial<AztecNodeConfig>;
|
|
300
303
|
|
|
301
304
|
/** Context for an end-to-end test as returned by the `setup` function */
|
|
@@ -534,12 +537,9 @@ export async function setup(
|
|
|
534
537
|
logger.verbose('Creating and syncing a simulated prover node...');
|
|
535
538
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
536
539
|
const proverNodePrivateKeyHex: Hex = `0x${proverNodePrivateKey!.toString('hex')}`;
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
aztecNode,
|
|
541
|
-
path.join(directoryToCleanup, randomBytes(8).toString('hex')),
|
|
542
|
-
);
|
|
540
|
+
const proverNodeDataDirectory = path.join(directoryToCleanup, randomBytes(8).toString('hex'));
|
|
541
|
+
const proverNodeConfig = { ...config.proverNodeConfig, dataDirectory: proverNodeDataDirectory };
|
|
542
|
+
proverNode = await createAndSyncProverNode(proverNodePrivateKeyHex, config, proverNodeConfig, aztecNode);
|
|
543
543
|
}
|
|
544
544
|
|
|
545
545
|
logger.verbose('Creating a pxe...');
|
|
@@ -779,54 +779,50 @@ export async function waitForProvenChain(node: AztecNode, targetBlock?: number,
|
|
|
779
779
|
export async function createAndSyncProverNode(
|
|
780
780
|
proverNodePrivateKey: `0x${string}`,
|
|
781
781
|
aztecNodeConfig: AztecNodeConfig,
|
|
782
|
+
proverNodeConfig: Partial<ProverNodeConfig> & Pick<DataStoreConfig, 'dataDirectory'>,
|
|
782
783
|
aztecNode: AztecNode,
|
|
783
|
-
dataDirectory: string,
|
|
784
784
|
prefilledPublicData: PublicDataTreeLeaf[] = [],
|
|
785
785
|
) {
|
|
786
786
|
// Disable stopping the aztec node as the prover coordination test will kill it otherwise
|
|
787
787
|
// This is only required when stopping the prover node for testing
|
|
788
|
-
const
|
|
788
|
+
const aztecNodeTxProvider = {
|
|
789
789
|
getTxByHash: aztecNode.getTxByHash.bind(aztecNode),
|
|
790
790
|
getTxsByHash: aztecNode.getTxsByHash.bind(aztecNode),
|
|
791
791
|
stop: () => Promise.resolve(),
|
|
792
792
|
};
|
|
793
793
|
|
|
794
794
|
const blobSinkClient = createBlobSinkClient(aztecNodeConfig);
|
|
795
|
+
|
|
795
796
|
// Creating temp store and archiver for simulated prover node
|
|
796
|
-
const archiverConfig = { ...aztecNodeConfig, dataDirectory };
|
|
797
|
-
const archiver = await createArchiver(archiverConfig, blobSinkClient, {
|
|
798
|
-
blockUntilSync: true,
|
|
799
|
-
});
|
|
797
|
+
const archiverConfig = { ...aztecNodeConfig, dataDirectory: proverNodeConfig.dataDirectory };
|
|
798
|
+
const archiver = await createArchiver(archiverConfig, blobSinkClient, { blockUntilSync: true });
|
|
800
799
|
|
|
801
800
|
// Prover node config is for simulated proofs
|
|
802
801
|
const proverConfig: ProverNodeConfig = {
|
|
803
802
|
...aztecNodeConfig,
|
|
804
|
-
|
|
805
|
-
dataDirectory: undefined,
|
|
803
|
+
proverCoordinationNodeUrls: [],
|
|
806
804
|
realProofs: false,
|
|
807
805
|
proverAgentCount: 2,
|
|
808
806
|
publisherPrivateKey: proverNodePrivateKey,
|
|
809
807
|
proverNodeMaxPendingJobs: 10,
|
|
810
808
|
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
811
809
|
proverNodePollingIntervalMs: 200,
|
|
812
|
-
txGatheringTimeoutMs: 60000,
|
|
813
810
|
txGatheringIntervalMs: 1000,
|
|
814
|
-
|
|
811
|
+
txGatheringBatchSize: 10,
|
|
812
|
+
txGatheringMaxParallelRequestsPerNode: 10,
|
|
813
|
+
proverNodeFailedEpochStore: undefined,
|
|
814
|
+
...proverNodeConfig,
|
|
815
815
|
};
|
|
816
816
|
|
|
817
817
|
const l1TxUtils = createDelayedL1TxUtils(aztecNodeConfig, proverNodePrivateKey, 'prover-node');
|
|
818
818
|
|
|
819
819
|
const proverNode = await createProverNode(
|
|
820
820
|
proverConfig,
|
|
821
|
-
{
|
|
822
|
-
aztecNodeTxProvider: aztecNodeWithoutStop,
|
|
823
|
-
archiver: archiver as Archiver,
|
|
824
|
-
l1TxUtils,
|
|
825
|
-
},
|
|
821
|
+
{ aztecNodeTxProvider, archiver: archiver as Archiver, l1TxUtils },
|
|
826
822
|
{ prefilledPublicData },
|
|
827
823
|
);
|
|
828
824
|
getLogger().info(`Created and synced prover node`, { publisherAddress: l1TxUtils.walletClient.account.address });
|
|
829
|
-
proverNode.start();
|
|
825
|
+
await proverNode.start();
|
|
830
826
|
return proverNode;
|
|
831
827
|
}
|
|
832
828
|
|
|
@@ -9,30 +9,13 @@ import type {
|
|
|
9
9
|
ProfileMethodOptions,
|
|
10
10
|
} from '@aztec/aztec.js/contracts';
|
|
11
11
|
import { createLogger } from '@aztec/foundation/log';
|
|
12
|
-
import {
|
|
13
|
-
import type { PrivateExecutionStep } from '@aztec/stdlib/kernel';
|
|
12
|
+
import { serializePrivateExecutionSteps } from '@aztec/stdlib/kernel';
|
|
14
13
|
|
|
15
|
-
import { encode } from '@msgpack/msgpack';
|
|
16
14
|
import { promises as fs } from 'fs';
|
|
17
15
|
import path from 'path';
|
|
18
16
|
|
|
19
17
|
const logger = createLogger('e2e:capture-private-execution-steps');
|
|
20
18
|
|
|
21
|
-
// TODO(#7371): This is duplicated.
|
|
22
|
-
// Longer term we won't use this hacked together msgpack format
|
|
23
|
-
// Leaving duplicated as this eventually bb will provide a serialization
|
|
24
|
-
// helper for passing to a generic msgpack RPC endpoint.
|
|
25
|
-
async function _createClientIvcProofFiles(directory: string, executionSteps: PrivateExecutionStep[]) {
|
|
26
|
-
const acirPath = path.join(directory, 'acir.msgpack');
|
|
27
|
-
const witnessPath = path.join(directory, 'witnesses.msgpack');
|
|
28
|
-
await fs.writeFile(acirPath, encode(executionSteps.map(map => map.bytecode)));
|
|
29
|
-
await fs.writeFile(witnessPath, encode(executionSteps.map(map => serializeWitness(map.witness))));
|
|
30
|
-
return {
|
|
31
|
-
acirPath,
|
|
32
|
-
witnessPath,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
19
|
export async function capturePrivateExecutionStepsIfEnvSet(
|
|
37
20
|
label: string,
|
|
38
21
|
interaction: ContractFunctionInteraction | DeployMethod,
|
|
@@ -56,7 +39,8 @@ export async function capturePrivateExecutionStepsIfEnvSet(
|
|
|
56
39
|
logger.info(`Writing private execution steps to ${resultsDirectory}`);
|
|
57
40
|
await fs.mkdir(resultsDirectory, { recursive: true });
|
|
58
41
|
// Write the client IVC files read by the prover.
|
|
59
|
-
|
|
42
|
+
const ivcInputsPath = path.join(resultsDirectory, 'ivc-inputs.msgpack');
|
|
43
|
+
await fs.writeFile(ivcInputsPath, serializePrivateExecutionSteps(result.executionSteps));
|
|
60
44
|
if (profileMode === 'full') {
|
|
61
45
|
// If we have gate counts, write the steps in human-readable format.
|
|
62
46
|
await fs.writeFile(
|