@aztec/bb-prover 0.47.1 → 0.48.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.
@@ -19,23 +19,23 @@ export declare class ProverInstrumentation {
19
19
  * Records the duration of a circuit operation.
20
20
  * @param metric - The metric to record
21
21
  * @param circuitName - The name of the circuit
22
- * @param timerOrS - The duration
22
+ * @param timerOrMS - The duration
23
23
  */
24
- recordDuration(metric: 'simulationDuration' | 'witGenDuration' | 'provingDuration', circuitName: CircuitName, timerOrS: Timer | number): void;
24
+ recordDuration(metric: 'simulationDuration' | 'witGenDuration' | 'provingDuration', circuitName: CircuitName | 'tubeCircuit', timerOrMS: Timer | number): void;
25
25
  /**
26
26
  * Records the duration of an AVM circuit operation.
27
27
  * @param metric - The metric to record
28
28
  * @param appCircuitName - The name of the function circuit (should be a `contract:function` string)
29
- * @param timerOrS - The duration
29
+ * @param timerOrMS - The duration
30
30
  */
31
- recordAvmDuration(metric: 'witGenDuration' | 'provingDuration', appCircuitName: string, timerOrS: Timer | number): void;
31
+ recordAvmDuration(metric: 'witGenDuration' | 'provingDuration', appCircuitName: string, timerOrMS: Timer | number): void;
32
32
  /**
33
33
  * Records the size of a circuit operation.
34
34
  * @param metric - Records the size of a circuit operation.
35
35
  * @param circuitName - The name of the circuit
36
36
  * @param size - The size
37
37
  */
38
- recordSize(metric: 'witGenInputSize' | 'witGenOutputSize' | 'proofSize' | 'circuitSize' | 'circuitPublicInputCount', circuitName: CircuitName, size: number): void;
38
+ recordSize(metric: 'witGenInputSize' | 'witGenOutputSize' | 'proofSize' | 'circuitSize' | 'circuitPublicInputCount', circuitName: CircuitName | 'tubeCircuit', size: number): void;
39
39
  /**
40
40
  * Records the size of an AVM circuit operation.
41
41
  * @param metric - The metric to record
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAEZ,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,eAAe,CAAQ;IAE/B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,gBAAgB,CAAQ;IAEhC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,uBAAuB,CAAQ;IAEvC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IAwDpD;;;;;OAKG;IACH,cAAc,CACZ,MAAM,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,iBAAiB,EACnE,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,KAAK,GAAG,MAAM;IAS1B;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,MAAM;IAOhH;;;;;OAKG;IACH,UAAU,CACR,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,yBAAyB,EACxG,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,MAAM;IAQd;;;;;OAKG;IACH,aAAa,CACX,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,yBAAyB,EACxG,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM;CAMf"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,eAAe,CAAY;IAEnC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,gBAAgB,CAAQ;IAEhC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,uBAAuB,CAAQ;IAEvC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IA4DpD;;;;;OAKG;IACH,cAAc,CACZ,MAAM,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,iBAAiB,EACnE,WAAW,EAAE,WAAW,GAAG,aAAa,EACxC,SAAS,EAAE,KAAK,GAAG,MAAM;IAS3B;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM;IAOjH;;;;;OAKG;IACH,UAAU,CACR,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,yBAAyB,EACxG,WAAW,EAAE,WAAW,GAAG,aAAa,EACxC,IAAI,EAAE,MAAM;IAQd;;;;;OAKG;IACH,aAAa,CACX,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,yBAAyB,EACxG,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM;CAMf"}
@@ -1,4 +1,4 @@
1
- import { Attributes, Metrics, ValueType, } from '@aztec/telemetry-client';
1
+ import { Attributes, Metrics, ValueType, millisecondBuckets, } from '@aztec/telemetry-client';
2
2
  /**
3
3
  * Instrumentation class for Prover implementations.
4
4
  */
@@ -8,23 +8,27 @@ export class ProverInstrumentation {
8
8
  const meter = telemetry.getMeter(name);
9
9
  this.simulationDuration = meter.createHistogram(Metrics.CIRCUIT_SIMULATION_DURATION, {
10
10
  description: 'Records how long it takes to simulate a circuit',
11
- unit: 's',
12
- valueType: ValueType.DOUBLE,
11
+ unit: 'ms',
12
+ valueType: ValueType.INT,
13
13
  advice: {
14
- explicitBucketBoundaries: [0.1, 0.25, 0.5, 1, 2.5, 5, 10, 30, 60],
14
+ explicitBucketBoundaries: millisecondBuckets(1), // 10ms -> ~327s
15
15
  },
16
16
  });
17
- this.witGenDuration = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_DURATION, {
17
+ this.witGenDuration = meter.createHistogram(Metrics.CIRCUIT_WITNESS_GEN_DURATION, {
18
18
  description: 'Records how long it takes to generate the partial witness for a circuit',
19
- unit: 's',
20
- valueType: ValueType.DOUBLE,
19
+ unit: 'ms',
20
+ valueType: ValueType.INT,
21
+ advice: {
22
+ explicitBucketBoundaries: millisecondBuckets(1),
23
+ },
21
24
  });
22
- // ideally this would be a histogram, but proving takes a long time on the server
23
- // and they don't happen that often so Prometheus & Grafana have a hard time handling it
24
- this.provingDuration = meter.createGauge(Metrics.CIRCUIT_PROVING_DURATION, {
25
- unit: 's',
25
+ this.provingDuration = meter.createHistogram(Metrics.CIRCUIT_PROVING_DURATION, {
26
+ unit: 'ms',
26
27
  description: 'Records how long it takes to prove a circuit',
27
- valueType: ValueType.DOUBLE,
28
+ valueType: ValueType.INT,
29
+ advice: {
30
+ explicitBucketBoundaries: millisecondBuckets(2), // 100ms -> 54 minutes
31
+ },
28
32
  });
29
33
  this.witGenInputSize = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_INPUT_SIZE, {
30
34
  unit: 'By',
@@ -54,11 +58,11 @@ export class ProverInstrumentation {
54
58
  * Records the duration of a circuit operation.
55
59
  * @param metric - The metric to record
56
60
  * @param circuitName - The name of the circuit
57
- * @param timerOrS - The duration
61
+ * @param timerOrMS - The duration
58
62
  */
59
- recordDuration(metric, circuitName, timerOrS) {
60
- const s = typeof timerOrS === 'number' ? timerOrS : timerOrS.s();
61
- this[metric].record(s, {
63
+ recordDuration(metric, circuitName, timerOrMS) {
64
+ const ms = typeof timerOrMS === 'number' ? timerOrMS : timerOrMS.ms();
65
+ this[metric].record(Math.ceil(ms), {
62
66
  [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
63
67
  [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
64
68
  });
@@ -67,11 +71,11 @@ export class ProverInstrumentation {
67
71
  * Records the duration of an AVM circuit operation.
68
72
  * @param metric - The metric to record
69
73
  * @param appCircuitName - The name of the function circuit (should be a `contract:function` string)
70
- * @param timerOrS - The duration
74
+ * @param timerOrMS - The duration
71
75
  */
72
- recordAvmDuration(metric, appCircuitName, timerOrS) {
73
- const s = typeof timerOrS === 'number' ? timerOrS : timerOrS.s();
74
- this[metric].record(s, {
76
+ recordAvmDuration(metric, appCircuitName, timerOrMS) {
77
+ const ms = typeof timerOrMS === 'number' ? timerOrMS : timerOrMS.s();
78
+ this[metric].record(Math.ceil(ms), {
75
79
  [Attributes.APP_CIRCUIT_NAME]: appCircuitName,
76
80
  });
77
81
  }
@@ -99,4 +103,4 @@ export class ProverInstrumentation {
99
103
  });
100
104
  }
101
105
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsVUFBVSxFQUdWLE9BQU8sRUFHUCxTQUFTLEdBQ1YsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQzs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFjaEMsWUFBWSxTQUEwQixFQUFFLElBQVk7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFO1lBQ25GLFdBQVcsRUFBRSxpREFBaUQ7WUFDOUQsSUFBSSxFQUFFLEdBQUc7WUFDVCxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07WUFDM0IsTUFBTSxFQUFFO2dCQUNOLHdCQUF3QixFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDbEU7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFO1lBQzVFLFdBQVcsRUFBRSx5RUFBeUU7WUFDdEYsSUFBSSxFQUFFLEdBQUc7WUFDVCxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07U0FDNUIsQ0FBQyxDQUFDO1FBRUgsaUZBQWlGO1FBQ2pGLHdGQUF3RjtRQUN4RixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLHdCQUF3QixF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
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsVUFBVSxFQUdWLE9BQU8sRUFHUCxTQUFTLEVBQ1Qsa0JBQWtCLEdBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFFakM7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBY2hDLFlBQVksU0FBMEIsRUFBRSxJQUFZO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRTtZQUNuRixXQUFXLEVBQUUsaURBQWlEO1lBQzlELElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1lBQ3hCLE1BQU0sRUFBRTtnQkFDTix3QkFBd0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0I7YUFDbEU7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFO1lBQ2hGLFdBQVcsRUFBRSx5RUFBeUU7WUFDdEYsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7WUFDeEIsTUFBTSxFQUFFO2dCQUNOLHdCQUF3QixFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQzthQUNoRDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUU7WUFDN0UsSUFB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
@@ -1,5 +1,5 @@
1
1
  import { type ProofAndVerificationKey, type PublicInputsAndRecursiveProof, type PublicKernelNonTailRequest, type PublicKernelTailRequest, type ServerCircuitProver } from '@aztec/circuit-types';
2
- import { type AvmCircuitInputs, type BaseOrMergeRollupPublicInputs, type BaseParityInputs, type BaseRollupInputs, type KernelCircuitPublicInputs, type MergeRollupInputs, NESTED_RECURSIVE_PROOF_LENGTH, type PrivateKernelEmptyInputData, Proof, type PublicKernelCircuitPublicInputs, RECURSIVE_PROOF_LENGTH, RecursiveProof, RootParityInput, type RootParityInputs, type RootRollupInputs, type RootRollupPublicInputs, TUBE_PROOF_LENGTH, TubeInputs, type VerificationKeyAsFields, type VerificationKeyData } from '@aztec/circuits.js';
2
+ import { type AvmCircuitInputs, type BaseOrMergeRollupPublicInputs, type BaseParityInputs, type BaseRollupInputs, type KernelCircuitPublicInputs, type MergeRollupInputs, NESTED_RECURSIVE_PROOF_LENGTH, type PrivateKernelEmptyInputData, Proof, type PublicKernelCircuitPublicInputs, RECURSIVE_PROOF_LENGTH, RecursiveProof, RootParityInput, type RootParityInputs, type RootRollupInputs, type RootRollupPublicInputs, TUBE_PROOF_LENGTH, type TubeInputs, type VerificationKeyAsFields, type VerificationKeyData } from '@aztec/circuits.js';
3
3
  import { type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
4
4
  import { type TelemetryClient } from '@aztec/telemetry-client';
5
5
  import type { ACVMConfig, BBConfig } from '../config.js';
@@ -1 +1 @@
1
- {"version":3,"file":"bb_prover.d.ts","sourceRoot":"","sources":["../../src/prover/bb_prover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bb_prover.d.ts","sourceRoot":"","sources":["../../src/prover/bb_prover.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
2
  /* eslint-disable require-await */
3
3
  import { makePublicInputsAndRecursiveProof, } from '@aztec/circuit-types';
4
- import { AGGREGATION_OBJECT_LENGTH, EmptyNestedCircuitInputs, EmptyNestedData, Fr, NESTED_RECURSIVE_PROOF_LENGTH, PrivateKernelEmptyInputs, Proof, RECURSIVE_PROOF_LENGTH, RecursiveProof, RootParityInput, TUBE_PROOF_LENGTH, TubeInputs, makeRecursiveProofFromBinary, } from '@aztec/circuits.js';
4
+ import { AGGREGATION_OBJECT_LENGTH, EmptyNestedCircuitInputs, EmptyNestedData, Fr, NESTED_RECURSIVE_PROOF_LENGTH, PrivateKernelEmptyInputs, Proof, RECURSIVE_PROOF_LENGTH, RecursiveProof, RootParityInput, TUBE_PROOF_LENGTH, makeRecursiveProofFromBinary, } from '@aztec/circuits.js';
5
5
  import { runInDirectory } from '@aztec/foundation/fs';
6
6
  import { createDebugLogger } from '@aztec/foundation/log';
7
7
  import { Timer } from '@aztec/foundation/timer';
@@ -94,13 +94,6 @@ let BBNativeRollupProver = (() => {
94
94
  }
95
95
  // We may need to convert the recursive proof into fields format
96
96
  kernelRequest.inputs.previousKernel.proof = await this.ensureValidProof(kernelRequest.inputs.previousKernel.proof, kernelOps.artifact, kernelRequest.inputs.previousKernel.vk);
97
- // PUBLIC KERNEL: kernel request should be nonempty at start of public kernel proving but it is not
98
- // TODO(#7369): We should properly enqueue the tube in the public kernel lifetime
99
- if (!kernelRequest.inputs.previousKernel.clientIvcProof.isEmpty()) {
100
- const { tubeVK, tubeProof } = await this.getTubeProof(new TubeInputs(kernelRequest.inputs.previousKernel.clientIvcProof));
101
- kernelRequest.inputs.previousKernel.vk = tubeVK;
102
- kernelRequest.inputs.previousKernel.proof = tubeProof;
103
- }
104
97
  await this.verifyWithKey(kernelRequest.inputs.previousKernel.vk, kernelRequest.inputs.previousKernel.proof.binaryProof);
105
98
  const { circuitOutput, proof } = await this.createRecursiveProof(kernelRequest.inputs, kernelOps.artifact, NESTED_RECURSIVE_PROOF_LENGTH, kernelOps.convertInputs, kernelOps.convertOutputs);
106
99
  const verificationKey = await this.getVerificationKeyDataForCircuit(kernelOps.artifact);
@@ -126,9 +119,7 @@ let BBNativeRollupProver = (() => {
126
119
  async getBaseRollupProof(baseRollupInput) {
127
120
  // We may need to convert the recursive proof into fields format
128
121
  logger.debug(`kernel Data proof: ${baseRollupInput.kernelData.proof}`);
129
- logger.info(`in getBaseRollupProof`);
130
- logger.info(`Number of public inputs in baseRollupInput: ${baseRollupInput.kernelData.vk.numPublicInputs}`);
131
- logger.info(`Number of public inputs ${baseRollupInput.kernelData.publicInputs}`);
122
+ logger.debug(`Number of public inputs in baseRollupInput: ${baseRollupInput.kernelData.vk.numPublicInputs}`);
132
123
  baseRollupInput.kernelData.proof = await this.ensureValidProof(baseRollupInput.kernelData.proof, 'BaseRollupArtifact', baseRollupInput.kernelData.vk);
133
124
  const { circuitOutput, proof } = await this.createRecursiveProof(baseRollupInput, // BaseRollupInputs
134
125
  'BaseRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, // WORKTODO: this should be BASE_ROLLUP_PROOF_LENGTH or something like this
@@ -217,7 +208,7 @@ let BBNativeRollupProver = (() => {
217
208
  this.instrumentation.recordDuration('witGenDuration', circuitName, timer);
218
209
  this.instrumentation.recordSize('witGenInputSize', circuitName, input.toBuffer().length);
219
210
  this.instrumentation.recordSize('witGenOutputSize', circuitName, output.toBuffer().length);
220
- logger.debug(`Generated witness`, {
211
+ logger.info(`Generated witness`, {
221
212
  circuitName,
222
213
  duration: timer.ms(),
223
214
  inputSize: input.toBuffer().length,
@@ -246,7 +237,7 @@ let BBNativeRollupProver = (() => {
246
237
  const rawProof = await fs.readFile(`${provingResult.proofPath}/${PROOF_FILENAME}`);
247
238
  const proof = new Proof(rawProof, vkData.numPublicInputs);
248
239
  const circuitName = mapProtocolArtifactNameToCircuitName(circuitType);
249
- this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs / 1000);
240
+ this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs);
250
241
  this.instrumentation.recordSize('proofSize', circuitName, proof.buffer.length);
251
242
  this.instrumentation.recordSize('circuitPublicInputCount', circuitName, vkData.numPublicInputs);
252
243
  this.instrumentation.recordSize('circuitSize', circuitName, vkData.circuitSize);
@@ -327,6 +318,10 @@ let BBNativeRollupProver = (() => {
327
318
  // Read the proof as fields
328
319
  const tubeVK = await extractVkData(provingResult.vkPath);
329
320
  const tubeProof = await this.readTubeProofAsFields(provingResult.proofPath, tubeVK, TUBE_PROOF_LENGTH);
321
+ this.instrumentation.recordDuration('provingDuration', 'tubeCircuit', provingResult.durationMs);
322
+ this.instrumentation.recordSize('proofSize', 'tubeCircuit', tubeProof.binaryProof.buffer.length);
323
+ this.instrumentation.recordSize('circuitPublicInputCount', 'tubeCircuit', tubeVK.numPublicInputs);
324
+ this.instrumentation.recordSize('circuitSize', 'tubeCircuit', tubeVK.circuitSize);
330
325
  // Sanity check the tube proof (can be removed later)
331
326
  await this.verifyWithKey(tubeVK, tubeProof.binaryProof);
332
327
  // TODO(#7369): properly time tube construction
@@ -351,7 +346,7 @@ let BBNativeRollupProver = (() => {
351
346
  // Read the proof as fields
352
347
  const proof = await this.readProofAsFields(provingResult.proofPath, circuitType, proofLength);
353
348
  const circuitName = mapProtocolArtifactNameToCircuitName(circuitType);
354
- this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs / 1000);
349
+ this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs);
355
350
  this.instrumentation.recordSize('proofSize', circuitName, proof.binaryProof.buffer.length);
356
351
  this.instrumentation.recordSize('circuitPublicInputCount', circuitName, vkData.numPublicInputs);
357
352
  this.instrumentation.recordSize('circuitSize', circuitName, vkData.circuitSize);
@@ -564,4 +559,4 @@ let BBNativeRollupProver = (() => {
564
559
  _a;
565
560
  })();
566
561
  export { BBNativeRollupProver };
567
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci9iYl9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGtDQUFrQztBQUNsQyxPQUFPLEVBTUwsaUNBQWlDLEdBQ2xDLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLHlCQUF5QixFQUt6Qix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLEVBQUUsRUFHRiw2QkFBNkIsRUFFN0Isd0JBQXdCLEVBQ3hCLEtBQUssRUFFTCxzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLGVBQWUsRUFJZixpQkFBaUIsRUFDakIsVUFBVSxFQUdWLDRCQUE0QixHQUM3QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixzQkFBc0IsRUFFdEIsbUNBQW1DLEVBQ25DLHNDQUFzQyxFQUN0QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG9DQUFvQyxFQUNwQyx1Q0FBdUMsRUFDdkMsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QyxtQ0FBbUMsRUFDbkMscUNBQXFDLEVBQ3JDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsbUNBQW1DLEVBQ25DLHNDQUFzQyxFQUN0QyxnQkFBZ0IsR0FDakIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUF3QixTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsT0FBTyxN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
562
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci9iYl9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGtDQUFrQztBQUNsQyxPQUFPLEVBTUwsaUNBQWlDLEdBQ2xDLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLHlCQUF5QixFQUt6Qix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLEVBQUUsRUFHRiw2QkFBNkIsRUFFN0Isd0JBQXdCLEVBQ3hCLEtBQUssRUFFTCxzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLGVBQWUsRUFJZixpQkFBaUIsRUFJakIsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUV0QixtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsb0NBQW9DLEVBQ3BDLHVDQUF1QyxFQUN2QywyQ0FBMkMsRUFDM0MsOENBQThDLEVBQzlDLG1DQUFtQyxFQUNuQyxxQ0FBcUMsRUFDckMsbUNBQW1DLEVBQ25DLHNDQUFzQyxFQUN0QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLGdCQUFnQixHQUNqQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQXdCLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXRGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLE1BQU0sTUFBTSxR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
@@ -9,10 +9,13 @@ import { type TelemetryClient } from '@aztec/telemetry-client';
9
9
  */
10
10
  export declare class TestCircuitProver implements ServerCircuitProver {
11
11
  private simulationProvider?;
12
- private logger;
12
+ private opts;
13
13
  private wasmSimulator;
14
14
  private instrumentation;
15
- constructor(telemetry: TelemetryClient, simulationProvider?: SimulationProvider | undefined, logger?: import("@aztec/foundation/log").Logger);
15
+ private logger;
16
+ constructor(telemetry: TelemetryClient, simulationProvider?: SimulationProvider | undefined, opts?: {
17
+ proverTestDelayMs: number;
18
+ });
16
19
  get tracer(): import("@aztec/telemetry-client").Tracer;
17
20
  getEmptyPrivateKernelProof(inputs: PrivateKernelEmptyInputData): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>>;
18
21
  getEmptyTubeProof(inputs: PrivateKernelEmptyInputData): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>>;
@@ -53,6 +56,7 @@ export declare class TestCircuitProver implements ServerCircuitProver {
53
56
  getPublicKernelProof(kernelRequest: PublicKernelNonTailRequest): Promise<PublicInputsAndRecursiveProof<PublicKernelCircuitPublicInputs>>;
54
57
  getPublicTailProof(kernelRequest: PublicKernelTailRequest): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>>;
55
58
  getAvmProof(_inputs: AvmCircuitInputs): Promise<ProofAndVerificationKey>;
59
+ private delay;
56
60
  verifyProof(_1: ServerProtocolArtifact, _2: Proof): Promise<void>;
57
61
  }
58
62
  //# sourceMappingURL=test_circuit_prover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test_circuit_prover.d.ts","sourceRoot":"","sources":["../../src/test/test_circuit_prover.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EAEzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,6BAA6B,EAClC,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAErB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,6BAA6B,EAC7B,KAAK,2BAA2B,EAEhC,KAAK,KAAK,EACV,KAAK,+BAA+B,EACpC,sBAAsB,EACtB,KAAK,cAAc,EACnB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,KAAK,UAAU,EACf,mBAAmB,EAIpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAGL,KAAK,sBAAsB,EAkB5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,yBAAyB,CAAC;AAM1E;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,mBAAmB;IAMzD,OAAO,CAAC,kBAAkB,CAAC;IAC3B,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,eAAe,CAAwB;gBAG7C,SAAS,EAAE,eAAe,EAClB,kBAAkB,CAAC,gCAAoB,EACvC,MAAM,yCAAyC;IAKzD,IAAI,MAAM,6CAET;IAEY,0BAA0B,CACrC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IA0BvD,iBAAiB,CAC5B,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IA0BpE;;;;OAIG;IAEU,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,sBAAsB,CAAC,CAAC;IA+BlH;;;;OAIG;IAEU,kBAAkB,CAC7B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,CAAC,OAAO,6BAA6B,CAAC,CAAC;IA+BjE;;;;OAIG;IAEU,kBAAkB,CAC7B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,CAAC;IA2BjE,YAAY,CACjB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC;QAAE,MAAM,EAAE,mBAAmB,CAAC;QAAC,SAAS,EAAE,cAAc,CAAC,OAAO,iBAAiB,CAAC,CAAA;KAAE,CAAC;IAOhG;;;;OAIG;IAEU,mBAAmB,CAC9B,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,CAAC;IA2BxE;;;;OAIG;IAEU,kBAAkB,CAC7B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,CAAC;IA4BpD,oBAAoB,CAC/B,aAAa,EAAE,0BAA0B,GACxC,OAAO,CAAC,6BAA6B,CAAC,+BAA+B,CAAC,CAAC;IAgC7D,kBAAkB,CAC7B,aAAa,EAAE,uBAAuB,GACrC,OAAO,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IA0BpE,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQjE,WAAW,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzE"}
1
+ {"version":3,"file":"test_circuit_prover.d.ts","sourceRoot":"","sources":["../../src/test/test_circuit_prover.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EAEzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,6BAA6B,EAClC,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAErB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,6BAA6B,EAC7B,KAAK,2BAA2B,EAEhC,KAAK,KAAK,EACV,KAAK,+BAA+B,EACpC,sBAAsB,EACtB,KAAK,cAAc,EACnB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,KAAK,UAAU,EACf,mBAAmB,EAIpB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAGL,KAAK,sBAAsB,EAkB5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,yBAAyB,CAAC;AAM1E;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,mBAAmB;IAOzD,OAAO,CAAC,kBAAkB,CAAC;IAC3B,OAAO,CAAC,IAAI;IAPd,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,MAAM,CAA0C;gBAGtD,SAAS,EAAE,eAAe,EAClB,kBAAkB,CAAC,gCAAoB,EACvC,IAAI,GAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAA6B;IAKxE,IAAI,MAAM,6CAET;IAEY,0BAA0B,CACrC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IA0BvD,iBAAiB,CAC5B,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IA0BpE;;;;OAIG;IAEU,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,sBAAsB,CAAC,CAAC;IA+BlH;;;;OAIG;IAEU,kBAAkB,CAC7B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,CAAC,OAAO,6BAA6B,CAAC,CAAC;IA+BjE;;;;OAIG;IAEU,kBAAkB,CAC7B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,CAAC;IA4B3D,YAAY,CACvB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC;QAAE,MAAM,EAAE,mBAAmB,CAAC;QAAC,SAAS,EAAE,cAAc,CAAC,OAAO,iBAAiB,CAAC,CAAA;KAAE,CAAC;IAQhG;;;;OAIG;IAEU,mBAAmB,CAC9B,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,CAAC;IA4BxE;;;;OAIG;IAEU,kBAAkB,CAC7B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,CAAC;IA6BpD,oBAAoB,CAC/B,aAAa,EAAE,0BAA0B,GACxC,OAAO,CAAC,6BAA6B,CAAC,+BAA+B,CAAC,CAAC;IAgC7D,kBAAkB,CAC7B,aAAa,EAAE,uBAAuB,GACrC,OAAO,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IA0BvD,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC;YAQvE,KAAK;IAOZ,WAAW,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzE"}
@@ -2,6 +2,7 @@ import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { makePublicInputsAndRecursiveProof, } from '@aztec/circuit-types';
3
3
  import { EmptyNestedData, NESTED_RECURSIVE_PROOF_LENGTH, PrivateKernelEmptyInputs, RECURSIVE_PROOF_LENGTH, RootParityInput, TUBE_PROOF_LENGTH, VerificationKeyData, makeEmptyProof, makeEmptyRecursiveProof, makeRecursiveProof, } from '@aztec/circuits.js';
4
4
  import { createDebugLogger } from '@aztec/foundation/log';
5
+ import { sleep } from '@aztec/foundation/sleep';
5
6
  import { Timer } from '@aztec/foundation/timer';
6
7
  import { ProtocolCircuitVkIndexes, ProtocolCircuitVks, SimulatedServerCircuitArtifacts, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap, convertPrivateKernelEmptyInputsToWitnessMap, convertPrivateKernelEmptyOutputsFromWitnessMap, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, convertSimulatedBaseRollupInputsToWitnessMap, convertSimulatedBaseRollupOutputsFromWitnessMap, convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap, convertSimulatedPublicTailInputsToWitnessMap, convertSimulatedPublicTailOutputFromWitnessMap, getVKSiblingPath, } from '@aztec/noir-protocol-circuits-types';
7
8
  import { WASMSimulator, emitCircuitSimulationStats } from '@aztec/simulator';
@@ -24,10 +25,11 @@ let TestCircuitProver = (() => {
24
25
  let _getPublicKernelProof_decorators;
25
26
  let _getPublicTailProof_decorators;
26
27
  return _a = class TestCircuitProver {
27
- constructor(telemetry, simulationProvider, logger = createDebugLogger('aztec:test-prover')) {
28
+ constructor(telemetry, simulationProvider, opts = { proverTestDelayMs: 0 }) {
28
29
  this.simulationProvider = (__runInitializers(this, _instanceExtraInitializers), simulationProvider);
29
- this.logger = logger;
30
+ this.opts = opts;
30
31
  this.wasmSimulator = new WASMSimulator();
32
+ this.logger = createDebugLogger('aztec:test-prover');
31
33
  this.instrumentation = new ProverInstrumentation(telemetry, 'TestCircuitProver');
32
34
  }
33
35
  get tracer() {
@@ -39,6 +41,7 @@ let TestCircuitProver = (() => {
39
41
  const witnessMap = convertPrivateKernelEmptyInputsToWitnessMap(kernelInputs);
40
42
  const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.PrivateKernelEmptyArtifact);
41
43
  const result = convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap(witness);
44
+ await this.delay();
42
45
  return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['PrivateKernelEmptyArtifact']);
43
46
  }
44
47
  async getEmptyTubeProof(inputs) {
@@ -47,6 +50,7 @@ let TestCircuitProver = (() => {
47
50
  const witnessMap = convertPrivateKernelEmptyInputsToWitnessMap(kernelInputs);
48
51
  const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.PrivateKernelEmptyArtifact);
49
52
  const result = convertPrivateKernelEmptyOutputsFromWitnessMap(witness);
53
+ await this.delay();
50
54
  return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), VerificationKeyData.makeFake());
51
55
  }
52
56
  /**
@@ -63,6 +67,7 @@ let TestCircuitProver = (() => {
63
67
  const rootParityInput = new RootParityInput(makeRecursiveProof(RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['BaseParityArtifact'].keyAsFields, getVKSiblingPath(ProtocolCircuitVkIndexes['BaseParityArtifact']), result);
64
68
  this.instrumentation.recordDuration('simulationDuration', 'base-parity', timer);
65
69
  emitCircuitSimulationStats('base-parity', timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
70
+ await this.delay();
66
71
  return Promise.resolve(rootParityInput);
67
72
  }
68
73
  /**
@@ -79,6 +84,7 @@ let TestCircuitProver = (() => {
79
84
  const rootParityInput = new RootParityInput(makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['RootParityArtifact'].keyAsFields, getVKSiblingPath(ProtocolCircuitVkIndexes['RootParityArtifact']), result);
80
85
  this.instrumentation.recordDuration('simulationDuration', 'root-parity', timer);
81
86
  emitCircuitSimulationStats('root-parity', timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
87
+ await this.delay();
82
88
  return Promise.resolve(rootParityInput);
83
89
  }
84
90
  /**
@@ -94,13 +100,15 @@ let TestCircuitProver = (() => {
94
100
  const result = convertSimulatedBaseRollupOutputsFromWitnessMap(witness);
95
101
  this.instrumentation.recordDuration('simulationDuration', 'base-rollup', timer);
96
102
  emitCircuitSimulationStats('base-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
103
+ await this.delay();
97
104
  return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['BaseRollupArtifact']);
98
105
  }
99
- getTubeProof(_tubeInput) {
100
- return Promise.resolve({
106
+ async getTubeProof(_tubeInput) {
107
+ await this.delay();
108
+ return {
101
109
  tubeVK: VerificationKeyData.makeFake(),
102
110
  tubeProof: makeEmptyRecursiveProof(TUBE_PROOF_LENGTH),
103
- });
111
+ };
104
112
  }
105
113
  /**
106
114
  * Simulates the merge rollup circuit from its inputs.
@@ -115,6 +123,7 @@ let TestCircuitProver = (() => {
115
123
  const result = convertMergeRollupOutputsFromWitnessMap(witness);
116
124
  this.instrumentation.recordDuration('simulationDuration', 'merge-rollup', timer);
117
125
  emitCircuitSimulationStats('merge-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
126
+ await this.delay();
118
127
  return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['MergeRollupArtifact']);
119
128
  }
120
129
  /**
@@ -130,6 +139,7 @@ let TestCircuitProver = (() => {
130
139
  const result = convertRootRollupOutputsFromWitnessMap(witness);
131
140
  this.instrumentation.recordDuration('simulationDuration', 'root-rollup', timer);
132
141
  emitCircuitSimulationStats('root-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
142
+ await this.delay();
133
143
  return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['RootRollupArtifact']);
134
144
  }
135
145
  async getPublicKernelProof(kernelRequest) {
@@ -144,6 +154,7 @@ let TestCircuitProver = (() => {
144
154
  const circuitName = mapPublicKernelToCircuitName(kernelRequest.type);
145
155
  this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
146
156
  emitCircuitSimulationStats(circuitName, timer.ms(), kernelRequest.inputs.toBuffer().length, result.toBuffer().length, this.logger);
157
+ await this.delay();
147
158
  return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[kernelOps.artifact]);
148
159
  }
149
160
  async getPublicTailProof(kernelRequest) {
@@ -154,13 +165,20 @@ let TestCircuitProver = (() => {
154
165
  const result = convertSimulatedPublicTailOutputFromWitnessMap(witness);
155
166
  this.instrumentation.recordDuration('simulationDuration', 'public-kernel-tail', timer);
156
167
  emitCircuitSimulationStats('public-kernel-tail', timer.ms(), kernelRequest.inputs.toBuffer().length, result.toBuffer().length, this.logger);
168
+ await this.delay();
157
169
  return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['PublicKernelTailArtifact']);
158
170
  }
159
- getAvmProof(_inputs) {
171
+ async getAvmProof(_inputs) {
160
172
  // We can't simulate the AVM because we don't have enough context to do so (e.g., DBs).
161
173
  // We just return an empty proof and VK data.
162
174
  this.logger.debug('Skipping AVM simulation in TestCircuitProver.');
163
- return Promise.resolve({ proof: makeEmptyProof(), verificationKey: VerificationKeyData.makeFake() });
175
+ await this.delay();
176
+ return { proof: makeEmptyProof(), verificationKey: VerificationKeyData.makeFake() };
177
+ }
178
+ async delay() {
179
+ if (this.opts.proverTestDelayMs > 0) {
180
+ await sleep(this.opts.proverTestDelayMs);
181
+ }
164
182
  }
165
183
  // Not implemented for test circuits
166
184
  verifyProof(_1, _2) {
@@ -188,4 +206,4 @@ let TestCircuitProver = (() => {
188
206
  _a;
189
207
  })();
190
208
  export { TestCircuitProver };
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jaXJjdWl0X3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfY2lyY3VpdF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFNTCxpQ0FBaUMsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBS0wsZUFBZSxFQUdmLDZCQUE2QixFQUU3Qix3QkFBd0IsRUFHeEIsc0JBQXNCLEVBRXRCLGVBQWUsRUFJZixpQkFBaUIsRUFFakIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsa0JBQWtCLEdBQ25CLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsa0JBQWtCLEVBRWxCLCtCQUErQixFQUMvQixtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG9DQUFvQyxFQUNwQyx1Q0FBdUMsRUFDdkMsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsNENBQTRDLEVBQzVDLCtDQUErQyxFQUMvQyx1REFBdUQsRUFDdkQsNENBQTRDLEVBQzVDLDhDQUE4QyxFQUM5QyxnQkFBZ0IsR0FDakIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQTJCLGFBQWEsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RHLE9BQU8sRUFBd0IsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0Us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
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jaXJjdWl0X3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfY2lyY3VpdF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFNTCxpQ0FBaUMsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBS0wsZUFBZSxFQUdmLDZCQUE2QixFQUU3Qix3QkFBd0IsRUFHeEIsc0JBQXNCLEVBRXRCLGVBQWUsRUFJZixpQkFBaUIsRUFFakIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsa0JBQWtCLEdBQ25CLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUVsQiwrQkFBK0IsRUFDL0IsbUNBQW1DLEVBQ25DLHNDQUFzQyxFQUN0QyxvQ0FBb0MsRUFDcEMsdUNBQXVDLEVBQ3ZDLDJDQUEyQyxFQUMzQyw4Q0FBOEMsRUFDOUMsbUNBQW1DLEVBQ25DLHNDQUFzQyxFQUN0QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLDRDQUE0QyxFQUM1QywrQ0FBK0MsRUFDL0MsdURBQXVELEVBQ3ZELDRDQUE0QyxFQUM1Qyw4Q0FBOEMsRUFDOUMsZ0JBQWdCLEdBQ2pCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUEyQixhQUFhLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RyxPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUzRDs7O0dBR0c7SUFDVSxpQkFBaUI7Ozs7Ozs7Ozs7c0JBQWpCLGlCQUFpQjtZQUs1QixZQUNFLFNBQTBCLEVBQ2xCLGtCQUF1QyxFQUN2QyxPQUFzQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRTtnQkFEOUQsdUJBQWtCLElBUGpCLG1EQUFpQixFQU9sQixrQkFBa0IsRUFBcUI7Z0JBQ3ZDLFNBQUksR0FBSixJQUFJLENBQTBEO2dCQVBoRSxrQkFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBRXBDLFdBQU0sR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQU90RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUkscUJBQXFCLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUVELElBQUksTUFBTTtnQkFDUixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1lBQ3JDLENBQUM7WUFFTSxLQUFLLENBQUMsMEJBQTBCLENBQ3JDLE1BQW1DO2dCQUVuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FDckMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsRUFDMUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQ3RELENBQUM7Z0JBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSx3QkFBd0IsQ0FDL0MsV0FBVyxFQUNYLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLE9BQU8sRUFDZCxNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxVQUFVLENBQ2xCLENBQUM7Z0JBQ0YsTUFBTSxVQUFVLEdBQUcsMkNBQTJDLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQywwQkFBMEIsQ0FDM0QsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBRyx1REFBdUQsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEYsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8saUNBQWlDLENBQ3RDLE1BQU0sRUFDTixrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQyxFQUNqRCxrQkFBa0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUNqRCxDQUFDO1lBQ0osQ0FBQztZQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FDNUIsTUFBbUM7Z0JBRW5DLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUNyQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUMxQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFdBQVcsQ0FDdEQsQ0FBQztnQkFDRixNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUF3QixDQUMvQyxXQUFXLEVBQ1gsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRywyQ0FBMkMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDN0UsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDdEQsVUFBVSxFQUNWLCtCQUErQixDQUFDLDBCQUEwQixDQUMzRCxDQUFDO2dCQUNGLE1BQU0sTUFBTSxHQUFHLDhDQUE4QyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxpQ0FBaUMsQ0FDdEMsTUFBTSxFQUNOLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLEVBQ2pELG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUMvQixDQUFDO1lBQ0osQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBd0I7Z0JBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sVUFBVSxHQUFHLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUUvRCxtREFBbUQ7Z0JBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQyxrQkFBa0IsQ0FDbkQsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBRyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFL0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQ3pDLGtCQUFrQixDQUFnQyxzQkFBc0IsQ0FBQyxFQUN6RSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsRUFDcEQsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUNoRSxNQUFNLENBQ1AsQ0FBQztnQkFFRixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRWhGLDBCQUEwQixDQUN4QixhQUFhLEVBQ2IsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUNWLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3hCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFFRDs7OztlQUlHO1lBRUksS0FBSyxDQUFDLGtCQUFrQixDQUM3QixNQUF3QjtnQkFFeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxVQUFVLEdBQUcsbUNBQW1DLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRS9ELG1EQUFtRDtnQkFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDdEQsVUFBVSxFQUNWLCtCQUErQixDQUFDLGtCQUFrQixDQUNuRCxDQUFDO2dCQUVGLE1BQU0sTUFBTSxHQUFHLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUUvRCxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FDekMsa0JBQWtCLENBQXVDLDZCQUE2QixDQUFDLEVBQ3ZGLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxFQUNwRCxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQ2hFLE1BQU0sQ0FDUCxDQUFDO2dCQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEYsMEJBQTBCLENBQ3hCLGFBQWEsRUFDYixLQUFLLENBQUMsRUFBRSxFQUFFLEVBQ1YsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLEtBQXVCO2dCQUV2QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyw0Q0FBNEMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdkUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDekUsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQyxrQkFBa0IsQ0FDbkQsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRywrQ0FBK0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoRiwwQkFBMEIsQ0FDeEIsYUFBYSxFQUNiLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFDVixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN2QixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN4QixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8saUNBQWlDLENBQ3RDLE1BQU0sRUFDTixrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQyxFQUNqRCxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUN6QyxDQUFDO1lBQ0osQ0FBQztZQUVNLEtBQUssQ0FBQyxZQUFZLENBQ3ZCLFVBQXNCO2dCQUV0QixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsT0FBTztvQkFDTCxNQUFNLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFO29CQUN0QyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsaUJBQWlCLENBQUM7aUJBQ3RELENBQUM7WUFDSixDQUFDO1lBRUQ7Ozs7ZUFJRztZQUVJLEtBQUssQ0FBQyxtQkFBbUIsQ0FDOUIsS0FBd0I7Z0JBRXhCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sVUFBVSxHQUFHLG9DQUFvQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUUvRCxtREFBbUQ7Z0JBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQyxtQkFBbUIsQ0FDcEQsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRyx1Q0FBdUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqRiwwQkFBMEIsQ0FDeEIsY0FBYyxFQUNkLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFDVixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN2QixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN4QixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8saUNBQWlDLENBQ3RDLE1BQU0sRUFDTix1QkFBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxFQUN0RCxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUMxQyxDQUFDO1lBQ0osQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLEtBQXVCO2dCQUV2QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFOUQsbURBQW1EO2dCQUNuRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUN0RCxVQUFVLEVBQ1YsK0JBQStCLENBQUMsa0JBQWtCLENBQ25ELENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsc0NBQXNDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRS9ELElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEYsMEJBQTBCLENBQ3hCLGFBQWEsRUFDYixLQUFLLENBQUMsRUFBRSxFQUFFLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDdkIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixPQUFPLGlDQUFpQyxDQUN0QyxNQUFNLEVBQ04sdUJBQXVCLENBQUMsNkJBQTZCLENBQUMsRUFDdEQsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FDekMsQ0FBQztZQUNKLENBQUM7WUFHTSxLQUFLLENBQUMsb0JBQW9CLENBQy9CLGFBQXlDO2dCQUV6QyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUMxQixNQUFNLFNBQVMsR0FBRyxvQ0FBb0MsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNFLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztnQkFDRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFakUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDdEQsVUFBVSxFQUNWLCtCQUErQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FDcEQsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLFdBQVcsR0FBRyw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUUsMEJBQTBCLENBQ3hCLFdBQVcsRUFDWCxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQ1YsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3RDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxpQ0FBaUMsQ0FDdEMsTUFBTSxFQUNOLHVCQUF1QixDQUFDLDZCQUE2QixDQUFDLEVBQ3RELGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FDdkMsQ0FBQztZQUNKLENBQUM7WUFHTSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLGFBQXNDO2dCQUV0QyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyw0Q0FBNEMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RGLG1EQUFtRDtnQkFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDdEQsVUFBVSxFQUNWLCtCQUErQixDQUFDLDBCQUEwQixDQUFDLENBQzVELENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsOENBQThDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2RiwwQkFBMEIsQ0FDeEIsb0JBQW9CLEVBQ3BCLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFDVixhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDdEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixPQUFPLGlDQUFpQyxDQUN0QyxNQUFNLEVBQ04sdUJBQXVCLENBQUMsNkJBQTZCLENBQUMsRUFDdEQsa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsQ0FDL0MsQ0FBQztZQUNKLENBQUM7WUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXlCO2dCQUNoRCx1RkFBdUY7Z0JBQ3ZGLDZDQUE2QztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDdEYsQ0FBQztZQUVPLEtBQUssQ0FBQyxLQUFLO2dCQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUM7WUFFRCxvQ0FBb0M7WUFDN0IsV0FBVyxDQUFDLEVBQTBCLEVBQUUsRUFBUztnQkFDdEQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDOzs7OzhDQTdRQSxTQUFTLENBQUMsc0NBQXNDLENBQUM7OENBcUNqRCxTQUFTLENBQUMsc0NBQXNDLENBQUM7OENBdUNqRCxTQUFTLENBQUMsc0NBQXNDLENBQUM7K0NBOENqRCxTQUFTLENBQUMsdUNBQXVDLENBQUM7OENBb0NsRCxTQUFTLENBQUMsc0NBQXNDLENBQUM7Z0RBK0JqRCxTQUFTLENBQUMsd0NBQXdDLENBQUM7OENBa0NuRCxTQUFTLENBQUMsc0NBQXNDLENBQUM7WUE5TmxELHVNQUFhLGtCQUFrQiw2REE2QjlCO1lBUUQsdU1BQWEsa0JBQWtCLDZEQStCOUI7WUFRRCx1TUFBYSxrQkFBa0IsNkRBNEI5QjtZQWtCRCwwTUFBYSxtQkFBbUIsNkRBNEIvQjtZQVFELHVNQUFhLGtCQUFrQiw2REE0QjlCO1lBR0QsNk1BQWEsb0JBQW9CLDZEQStCaEM7WUFHRCx1TUFBYSxrQkFBa0IsNkRBMEI5Qjs7Ozs7U0F4VVUsaUJBQWlCIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/bb-prover",
3
- "version": "0.47.1",
3
+ "version": "0.48.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js"
@@ -59,12 +59,12 @@
59
59
  ]
60
60
  },
61
61
  "dependencies": {
62
- "@aztec/circuit-types": "0.47.1",
63
- "@aztec/circuits.js": "0.47.1",
64
- "@aztec/foundation": "0.47.1",
65
- "@aztec/noir-protocol-circuits-types": "0.47.1",
66
- "@aztec/simulator": "0.47.1",
67
- "@aztec/telemetry-client": "0.47.1",
62
+ "@aztec/circuit-types": "0.48.0",
63
+ "@aztec/circuits.js": "0.48.0",
64
+ "@aztec/foundation": "0.48.0",
65
+ "@aztec/noir-protocol-circuits-types": "0.48.0",
66
+ "@aztec/simulator": "0.48.0",
67
+ "@aztec/telemetry-client": "0.48.0",
68
68
  "@msgpack/msgpack": "^3.0.0-beta2",
69
69
  "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
70
70
  "@noir-lang/types": "portal:../../noir/packages/types",
@@ -8,6 +8,7 @@ import {
8
8
  type TelemetryClient,
9
9
  type Tracer,
10
10
  ValueType,
11
+ millisecondBuckets,
11
12
  } from '@aztec/telemetry-client';
12
13
 
13
14
  /**
@@ -15,8 +16,8 @@ import {
15
16
  */
16
17
  export class ProverInstrumentation {
17
18
  private simulationDuration: Histogram;
18
- private witGenDuration: Gauge;
19
- private provingDuration: Gauge;
19
+ private witGenDuration: Histogram;
20
+ private provingDuration: Histogram;
20
21
 
21
22
  private witGenInputSize: Gauge;
22
23
  private witGenOutputSize: Gauge;
@@ -33,25 +34,29 @@ export class ProverInstrumentation {
33
34
 
34
35
  this.simulationDuration = meter.createHistogram(Metrics.CIRCUIT_SIMULATION_DURATION, {
35
36
  description: 'Records how long it takes to simulate a circuit',
36
- unit: 's',
37
- valueType: ValueType.DOUBLE,
37
+ unit: 'ms',
38
+ valueType: ValueType.INT,
38
39
  advice: {
39
- explicitBucketBoundaries: [0.1, 0.25, 0.5, 1, 2.5, 5, 10, 30, 60],
40
+ explicitBucketBoundaries: millisecondBuckets(1), // 10ms -> ~327s
40
41
  },
41
42
  });
42
43
 
43
- this.witGenDuration = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_DURATION, {
44
+ this.witGenDuration = meter.createHistogram(Metrics.CIRCUIT_WITNESS_GEN_DURATION, {
44
45
  description: 'Records how long it takes to generate the partial witness for a circuit',
45
- unit: 's',
46
- valueType: ValueType.DOUBLE,
46
+ unit: 'ms',
47
+ valueType: ValueType.INT,
48
+ advice: {
49
+ explicitBucketBoundaries: millisecondBuckets(1),
50
+ },
47
51
  });
48
52
 
49
- // ideally this would be a histogram, but proving takes a long time on the server
50
- // and they don't happen that often so Prometheus & Grafana have a hard time handling it
51
- this.provingDuration = meter.createGauge(Metrics.CIRCUIT_PROVING_DURATION, {
52
- unit: 's',
53
+ this.provingDuration = meter.createHistogram(Metrics.CIRCUIT_PROVING_DURATION, {
54
+ unit: 'ms',
53
55
  description: 'Records how long it takes to prove a circuit',
54
- valueType: ValueType.DOUBLE,
56
+ valueType: ValueType.INT,
57
+ advice: {
58
+ explicitBucketBoundaries: millisecondBuckets(2), // 100ms -> 54 minutes
59
+ },
55
60
  });
56
61
 
57
62
  this.witGenInputSize = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_INPUT_SIZE, {
@@ -87,15 +92,15 @@ export class ProverInstrumentation {
87
92
  * Records the duration of a circuit operation.
88
93
  * @param metric - The metric to record
89
94
  * @param circuitName - The name of the circuit
90
- * @param timerOrS - The duration
95
+ * @param timerOrMS - The duration
91
96
  */
92
97
  recordDuration(
93
98
  metric: 'simulationDuration' | 'witGenDuration' | 'provingDuration',
94
- circuitName: CircuitName,
95
- timerOrS: Timer | number,
99
+ circuitName: CircuitName | 'tubeCircuit',
100
+ timerOrMS: Timer | number,
96
101
  ) {
97
- const s = typeof timerOrS === 'number' ? timerOrS : timerOrS.s();
98
- this[metric].record(s, {
102
+ const ms = typeof timerOrMS === 'number' ? timerOrMS : timerOrMS.ms();
103
+ this[metric].record(Math.ceil(ms), {
99
104
  [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
100
105
  [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
101
106
  });
@@ -105,11 +110,11 @@ export class ProverInstrumentation {
105
110
  * Records the duration of an AVM circuit operation.
106
111
  * @param metric - The metric to record
107
112
  * @param appCircuitName - The name of the function circuit (should be a `contract:function` string)
108
- * @param timerOrS - The duration
113
+ * @param timerOrMS - The duration
109
114
  */
110
- recordAvmDuration(metric: 'witGenDuration' | 'provingDuration', appCircuitName: string, timerOrS: Timer | number) {
111
- const s = typeof timerOrS === 'number' ? timerOrS : timerOrS.s();
112
- this[metric].record(s, {
115
+ recordAvmDuration(metric: 'witGenDuration' | 'provingDuration', appCircuitName: string, timerOrMS: Timer | number) {
116
+ const ms = typeof timerOrMS === 'number' ? timerOrMS : timerOrMS.s();
117
+ this[metric].record(Math.ceil(ms), {
113
118
  [Attributes.APP_CIRCUIT_NAME]: appCircuitName,
114
119
  });
115
120
  }
@@ -122,7 +127,7 @@ export class ProverInstrumentation {
122
127
  */
123
128
  recordSize(
124
129
  metric: 'witGenInputSize' | 'witGenOutputSize' | 'proofSize' | 'circuitSize' | 'circuitPublicInputCount',
125
- circuitName: CircuitName,
130
+ circuitName: CircuitName | 'tubeCircuit',
126
131
  size: number,
127
132
  ) {
128
133
  this[metric].record(Math.ceil(size), {
@@ -31,7 +31,7 @@ import {
31
31
  type RootRollupInputs,
32
32
  type RootRollupPublicInputs,
33
33
  TUBE_PROOF_LENGTH,
34
- TubeInputs,
34
+ type TubeInputs,
35
35
  type VerificationKeyAsFields,
36
36
  type VerificationKeyData,
37
37
  makeRecursiveProofFromBinary,
@@ -226,16 +226,6 @@ export class BBNativeRollupProver implements ServerCircuitProver {
226
226
  kernelRequest.inputs.previousKernel.vk,
227
227
  );
228
228
 
229
- // PUBLIC KERNEL: kernel request should be nonempty at start of public kernel proving but it is not
230
- // TODO(#7369): We should properly enqueue the tube in the public kernel lifetime
231
- if (!kernelRequest.inputs.previousKernel.clientIvcProof.isEmpty()) {
232
- const { tubeVK, tubeProof } = await this.getTubeProof(
233
- new TubeInputs(kernelRequest.inputs.previousKernel.clientIvcProof),
234
- );
235
- kernelRequest.inputs.previousKernel.vk = tubeVK;
236
- kernelRequest.inputs.previousKernel.proof = tubeProof;
237
- }
238
-
239
229
  await this.verifyWithKey(
240
230
  kernelRequest.inputs.previousKernel.vk,
241
231
  kernelRequest.inputs.previousKernel.proof.binaryProof,
@@ -289,9 +279,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
289
279
  ): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>> {
290
280
  // We may need to convert the recursive proof into fields format
291
281
  logger.debug(`kernel Data proof: ${baseRollupInput.kernelData.proof}`);
292
- logger.info(`in getBaseRollupProof`);
293
- logger.info(`Number of public inputs in baseRollupInput: ${baseRollupInput.kernelData.vk.numPublicInputs}`);
294
- logger.info(`Number of public inputs ${baseRollupInput.kernelData.publicInputs}`);
282
+ logger.debug(`Number of public inputs in baseRollupInput: ${baseRollupInput.kernelData.vk.numPublicInputs}`);
295
283
  baseRollupInput.kernelData.proof = await this.ensureValidProof(
296
284
  baseRollupInput.kernelData.proof,
297
285
  'BaseRollupArtifact',
@@ -477,7 +465,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
477
465
  this.instrumentation.recordSize('witGenInputSize', circuitName, input.toBuffer().length);
478
466
  this.instrumentation.recordSize('witGenOutputSize', circuitName, output.toBuffer().length);
479
467
 
480
- logger.debug(`Generated witness`, {
468
+ logger.info(`Generated witness`, {
481
469
  circuitName,
482
470
  duration: timer.ms(),
483
471
  inputSize: input.toBuffer().length,
@@ -531,7 +519,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
531
519
  const proof = new Proof(rawProof, vkData.numPublicInputs);
532
520
  const circuitName = mapProtocolArtifactNameToCircuitName(circuitType);
533
521
 
534
- this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs / 1000);
522
+ this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs);
535
523
  this.instrumentation.recordSize('proofSize', circuitName, proof.buffer.length);
536
524
  this.instrumentation.recordSize('circuitPublicInputCount', circuitName, vkData.numPublicInputs);
537
525
  this.instrumentation.recordSize('circuitSize', circuitName, vkData.circuitSize);
@@ -634,6 +622,12 @@ export class BBNativeRollupProver implements ServerCircuitProver {
634
622
  // Read the proof as fields
635
623
  const tubeVK = await extractVkData(provingResult.vkPath!);
636
624
  const tubeProof = await this.readTubeProofAsFields(provingResult.proofPath!, tubeVK, TUBE_PROOF_LENGTH);
625
+
626
+ this.instrumentation.recordDuration('provingDuration', 'tubeCircuit', provingResult.durationMs);
627
+ this.instrumentation.recordSize('proofSize', 'tubeCircuit', tubeProof.binaryProof.buffer.length);
628
+ this.instrumentation.recordSize('circuitPublicInputCount', 'tubeCircuit', tubeVK.numPublicInputs);
629
+ this.instrumentation.recordSize('circuitSize', 'tubeCircuit', tubeVK.circuitSize);
630
+
637
631
  // Sanity check the tube proof (can be removed later)
638
632
  await this.verifyWithKey(tubeVK, tubeProof.binaryProof);
639
633
 
@@ -681,7 +675,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
681
675
  const proof = await this.readProofAsFields(provingResult.proofPath!, circuitType, proofLength);
682
676
 
683
677
  const circuitName = mapProtocolArtifactNameToCircuitName(circuitType);
684
- this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs / 1000);
678
+ this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs);
685
679
  this.instrumentation.recordSize('proofSize', circuitName, proof.binaryProof.buffer.length);
686
680
  this.instrumentation.recordSize('circuitPublicInputCount', circuitName, vkData.numPublicInputs);
687
681
  this.instrumentation.recordSize('circuitSize', circuitName, vkData.circuitSize);
@@ -33,6 +33,7 @@ import {
33
33
  makeRecursiveProof,
34
34
  } from '@aztec/circuits.js';
35
35
  import { createDebugLogger } from '@aztec/foundation/log';
36
+ import { sleep } from '@aztec/foundation/sleep';
36
37
  import { Timer } from '@aztec/foundation/timer';
37
38
  import {
38
39
  ProtocolCircuitVkIndexes,
@@ -70,11 +71,12 @@ import { mapPublicKernelToCircuitName } from '../stats.js';
70
71
  export class TestCircuitProver implements ServerCircuitProver {
71
72
  private wasmSimulator = new WASMSimulator();
72
73
  private instrumentation: ProverInstrumentation;
74
+ private logger = createDebugLogger('aztec:test-prover');
73
75
 
74
76
  constructor(
75
77
  telemetry: TelemetryClient,
76
78
  private simulationProvider?: SimulationProvider,
77
- private logger = createDebugLogger('aztec:test-prover'),
79
+ private opts: { proverTestDelayMs: number } = { proverTestDelayMs: 0 },
78
80
  ) {
79
81
  this.instrumentation = new ProverInstrumentation(telemetry, 'TestCircuitProver');
80
82
  }
@@ -103,7 +105,7 @@ export class TestCircuitProver implements ServerCircuitProver {
103
105
  SimulatedServerCircuitArtifacts.PrivateKernelEmptyArtifact,
104
106
  );
105
107
  const result = convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap(witness);
106
-
108
+ await this.delay();
107
109
  return makePublicInputsAndRecursiveProof(
108
110
  result,
109
111
  makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
@@ -131,7 +133,7 @@ export class TestCircuitProver implements ServerCircuitProver {
131
133
  SimulatedServerCircuitArtifacts.PrivateKernelEmptyArtifact,
132
134
  );
133
135
  const result = convertPrivateKernelEmptyOutputsFromWitnessMap(witness);
134
-
136
+ await this.delay();
135
137
  return makePublicInputsAndRecursiveProof(
136
138
  result,
137
139
  makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
@@ -172,7 +174,7 @@ export class TestCircuitProver implements ServerCircuitProver {
172
174
  result.toBuffer().length,
173
175
  this.logger,
174
176
  );
175
-
177
+ await this.delay();
176
178
  return Promise.resolve(rootParityInput);
177
179
  }
178
180
 
@@ -211,7 +213,7 @@ export class TestCircuitProver implements ServerCircuitProver {
211
213
  result.toBuffer().length,
212
214
  this.logger,
213
215
  );
214
-
216
+ await this.delay();
215
217
  return Promise.resolve(rootParityInput);
216
218
  }
217
219
 
@@ -243,6 +245,7 @@ export class TestCircuitProver implements ServerCircuitProver {
243
245
  result.toBuffer().length,
244
246
  this.logger,
245
247
  );
248
+ await this.delay();
246
249
  return makePublicInputsAndRecursiveProof(
247
250
  result,
248
251
  makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
@@ -250,13 +253,14 @@ export class TestCircuitProver implements ServerCircuitProver {
250
253
  );
251
254
  }
252
255
 
253
- public getTubeProof(
256
+ public async getTubeProof(
254
257
  _tubeInput: TubeInputs,
255
258
  ): Promise<{ tubeVK: VerificationKeyData; tubeProof: RecursiveProof<typeof TUBE_PROOF_LENGTH> }> {
256
- return Promise.resolve({
259
+ await this.delay();
260
+ return {
257
261
  tubeVK: VerificationKeyData.makeFake(),
258
262
  tubeProof: makeEmptyRecursiveProof(TUBE_PROOF_LENGTH),
259
- });
263
+ };
260
264
  }
261
265
 
262
266
  /**
@@ -287,6 +291,7 @@ export class TestCircuitProver implements ServerCircuitProver {
287
291
  result.toBuffer().length,
288
292
  this.logger,
289
293
  );
294
+ await this.delay();
290
295
  return makePublicInputsAndRecursiveProof(
291
296
  result,
292
297
  makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
@@ -322,6 +327,7 @@ export class TestCircuitProver implements ServerCircuitProver {
322
327
  result.toBuffer().length,
323
328
  this.logger,
324
329
  );
330
+ await this.delay();
325
331
  return makePublicInputsAndRecursiveProof(
326
332
  result,
327
333
  makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
@@ -355,7 +361,7 @@ export class TestCircuitProver implements ServerCircuitProver {
355
361
  result.toBuffer().length,
356
362
  this.logger,
357
363
  );
358
-
364
+ await this.delay();
359
365
  return makePublicInputsAndRecursiveProof(
360
366
  result,
361
367
  makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
@@ -384,7 +390,7 @@ export class TestCircuitProver implements ServerCircuitProver {
384
390
  result.toBuffer().length,
385
391
  this.logger,
386
392
  );
387
-
393
+ await this.delay();
388
394
  return makePublicInputsAndRecursiveProof(
389
395
  result,
390
396
  makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
@@ -392,11 +398,18 @@ export class TestCircuitProver implements ServerCircuitProver {
392
398
  );
393
399
  }
394
400
 
395
- getAvmProof(_inputs: AvmCircuitInputs): Promise<ProofAndVerificationKey> {
401
+ public async getAvmProof(_inputs: AvmCircuitInputs): Promise<ProofAndVerificationKey> {
396
402
  // We can't simulate the AVM because we don't have enough context to do so (e.g., DBs).
397
403
  // We just return an empty proof and VK data.
398
404
  this.logger.debug('Skipping AVM simulation in TestCircuitProver.');
399
- return Promise.resolve({ proof: makeEmptyProof(), verificationKey: VerificationKeyData.makeFake() });
405
+ await this.delay();
406
+ return { proof: makeEmptyProof(), verificationKey: VerificationKeyData.makeFake() };
407
+ }
408
+
409
+ private async delay(): Promise<void> {
410
+ if (this.opts.proverTestDelayMs > 0) {
411
+ await sleep(this.opts.proverTestDelayMs);
412
+ }
400
413
  }
401
414
 
402
415
  // Not implemented for test circuits