@aztec/bb-prover 3.0.0-nightly.20250917 → 3.0.0-nightly.20250918
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/prover/server/bb_prover.d.ts +13 -23
- package/dest/prover/server/bb_prover.d.ts.map +1 -1
- package/dest/prover/server/bb_prover.js +48 -99
- package/dest/stats.d.ts.map +1 -1
- package/dest/stats.js +16 -6
- package/dest/test/delay_values.d.ts.map +1 -1
- package/dest/test/delay_values.js +18 -8
- package/dest/test/test_circuit_prover.d.ts +12 -22
- package/dest/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/test/test_circuit_prover.js +55 -38
- package/package.json +16 -16
- package/src/prover/server/bb_prover.ts +166 -188
- package/src/stats.ts +16 -6
- package/src/test/delay_values.ts +18 -8
- package/src/test/test_circuit_prover.ts +154 -79
|
@@ -12,26 +12,36 @@ import {
|
|
|
12
12
|
type ServerProtocolArtifact,
|
|
13
13
|
convertBaseParityInputsToWitnessMap,
|
|
14
14
|
convertBaseParityOutputsFromWitnessMap,
|
|
15
|
-
convertBlockMergeRollupInputsToWitnessMap,
|
|
16
15
|
convertBlockMergeRollupOutputsFromWitnessMap,
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
convertBlockMergeRollupPrivateInputsToWitnessMap,
|
|
17
|
+
convertBlockRootEmptyTxFirstRollupOutputsFromWitnessMap,
|
|
18
|
+
convertBlockRootEmptyTxFirstRollupPrivateInputsToWitnessMap,
|
|
19
|
+
convertBlockRootFirstRollupOutputsFromWitnessMap,
|
|
20
|
+
convertBlockRootFirstRollupPrivateInputsToWitnessMap,
|
|
21
|
+
convertBlockRootRollupOutputsFromWitnessMap,
|
|
22
|
+
convertBlockRootRollupPrivateInputsToWitnessMap,
|
|
23
|
+
convertBlockRootSingleTxFirstRollupOutputsFromWitnessMap,
|
|
24
|
+
convertBlockRootSingleTxFirstRollupPrivateInputsToWitnessMap,
|
|
25
|
+
convertBlockRootSingleTxRollupOutputsFromWitnessMap,
|
|
26
|
+
convertBlockRootSingleTxRollupPrivateInputsToWitnessMap,
|
|
27
|
+
convertCheckpointMergeRollupOutputsFromWitnessMap,
|
|
28
|
+
convertCheckpointMergeRollupPrivateInputsToWitnessMap,
|
|
29
|
+
convertCheckpointPaddingRollupOutputsFromWitnessMap,
|
|
30
|
+
convertCheckpointPaddingRollupPrivateInputsToWitnessMap,
|
|
31
|
+
convertCheckpointRootRollupOutputsFromWitnessMap,
|
|
32
|
+
convertCheckpointRootRollupPrivateInputsToWitnessMap,
|
|
33
|
+
convertCheckpointRootSingleBlockRollupOutputsFromWitnessMap,
|
|
34
|
+
convertCheckpointRootSingleBlockRollupPrivateInputsToWitnessMap,
|
|
19
35
|
convertMergeRollupInputsToWitnessMap,
|
|
20
36
|
convertMergeRollupOutputsFromWitnessMap,
|
|
21
|
-
convertPaddingBlockRootRollupInputsToWitnessMap,
|
|
22
|
-
convertPaddingBlockRootRollupOutputsFromWitnessMap,
|
|
23
37
|
convertRootParityInputsToWitnessMap,
|
|
24
38
|
convertRootParityOutputsFromWitnessMap,
|
|
25
|
-
convertRootRollupInputsToWitnessMap,
|
|
26
39
|
convertRootRollupOutputsFromWitnessMap,
|
|
27
|
-
|
|
28
|
-
convertSimulatedBlockRootRollupOutputsFromWitnessMap,
|
|
40
|
+
convertRootRollupPrivateInputsToWitnessMap,
|
|
29
41
|
convertSimulatedPrivateBaseRollupInputsToWitnessMap,
|
|
30
42
|
convertSimulatedPrivateBaseRollupOutputsFromWitnessMap,
|
|
31
43
|
convertSimulatedPublicBaseRollupInputsToWitnessMap,
|
|
32
44
|
convertSimulatedPublicBaseRollupOutputsFromWitnessMap,
|
|
33
|
-
convertSimulatedSingleTxBlockRootRollupInputsToWitnessMap,
|
|
34
|
-
convertSimulatedSingleTxBlockRootRollupOutputsFromWitnessMap,
|
|
35
45
|
foreignCallHandler,
|
|
36
46
|
getSimulatedServerCircuitArtifact,
|
|
37
47
|
} from '@aztec/noir-protocol-circuits-types/server';
|
|
@@ -51,18 +61,24 @@ import type { BaseParityInputs, ParityPublicInputs, RootParityInputs } from '@az
|
|
|
51
61
|
import { type Proof, ProvingRequestType, makeEmptyRecursiveProof, makeRecursiveProof } from '@aztec/stdlib/proofs';
|
|
52
62
|
import type {
|
|
53
63
|
BaseOrMergeRollupPublicInputs,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
64
|
+
BlockMergeRollupPrivateInputs,
|
|
65
|
+
BlockRollupPublicInputs,
|
|
66
|
+
BlockRootEmptyTxFirstRollupPrivateInputs,
|
|
67
|
+
BlockRootFirstRollupPrivateInputs,
|
|
68
|
+
BlockRootRollupPrivateInputs,
|
|
69
|
+
BlockRootSingleTxFirstRollupPrivateInputs,
|
|
70
|
+
BlockRootSingleTxRollupPrivateInputs,
|
|
71
|
+
CheckpointMergeRollupPrivateInputs,
|
|
72
|
+
CheckpointPaddingRollupPrivateInputs,
|
|
73
|
+
CheckpointRollupPublicInputs,
|
|
74
|
+
CheckpointRootRollupPrivateInputs,
|
|
75
|
+
CheckpointRootSingleBlockRollupPrivateInputs,
|
|
58
76
|
MergeRollupInputs,
|
|
59
|
-
PaddingBlockRootRollupInputs,
|
|
60
77
|
PrivateBaseRollupInputs,
|
|
61
78
|
PublicBaseRollupInputs,
|
|
62
79
|
PublicTubePrivateInputs,
|
|
63
|
-
|
|
80
|
+
RootRollupPrivateInputs,
|
|
64
81
|
RootRollupPublicInputs,
|
|
65
|
-
SingleTxBlockRootRollupInputs,
|
|
66
82
|
} from '@aztec/stdlib/rollup';
|
|
67
83
|
import { VerificationKeyData } from '@aztec/stdlib/vks';
|
|
68
84
|
import { type TelemetryClient, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
@@ -215,102 +231,160 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
215
231
|
);
|
|
216
232
|
}
|
|
217
233
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
234
|
+
@trackSpan('TestCircuitProver.getBlockRootFirstRollupProof')
|
|
235
|
+
public getBlockRootFirstRollupProof(
|
|
236
|
+
input: BlockRootFirstRollupPrivateInputs,
|
|
237
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
238
|
+
return this.applyDelay(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP, () =>
|
|
239
|
+
this.simulate(
|
|
240
|
+
input,
|
|
241
|
+
'BlockRootFirstRollupArtifact',
|
|
242
|
+
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
243
|
+
convertBlockRootFirstRollupPrivateInputsToWitnessMap,
|
|
244
|
+
convertBlockRootFirstRollupOutputsFromWitnessMap,
|
|
245
|
+
),
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
@trackSpan('TestCircuitProver.getBlockRootSingleTxFirstRollupProof')
|
|
250
|
+
public async getBlockRootSingleTxFirstRollupProof(
|
|
251
|
+
input: BlockRootSingleTxFirstRollupPrivateInputs,
|
|
252
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
253
|
+
return await this.applyDelay(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP, () =>
|
|
254
|
+
this.simulate(
|
|
255
|
+
input,
|
|
256
|
+
'BlockRootSingleTxFirstRollupArtifact',
|
|
257
|
+
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
258
|
+
convertBlockRootSingleTxFirstRollupPrivateInputsToWitnessMap,
|
|
259
|
+
convertBlockRootSingleTxFirstRollupOutputsFromWitnessMap,
|
|
260
|
+
),
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
@trackSpan('TestCircuitProver.getBlockRootEmptyTxFirstRollupProof')
|
|
265
|
+
public getBlockRootEmptyTxFirstRollupProof(
|
|
266
|
+
input: BlockRootEmptyTxFirstRollupPrivateInputs,
|
|
267
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
268
|
+
return this.applyDelay(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP, () =>
|
|
269
|
+
this.simulate(
|
|
270
|
+
input,
|
|
271
|
+
'BlockRootEmptyTxFirstRollupArtifact',
|
|
272
|
+
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
273
|
+
convertBlockRootEmptyTxFirstRollupPrivateInputsToWitnessMap,
|
|
274
|
+
convertBlockRootEmptyTxFirstRollupOutputsFromWitnessMap,
|
|
275
|
+
),
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
|
|
223
279
|
@trackSpan('TestCircuitProver.getBlockRootRollupProof')
|
|
224
280
|
public getBlockRootRollupProof(
|
|
225
|
-
input:
|
|
226
|
-
): Promise<
|
|
227
|
-
PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
228
|
-
> {
|
|
281
|
+
input: BlockRootRollupPrivateInputs,
|
|
282
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
229
283
|
return this.applyDelay(ProvingRequestType.BLOCK_ROOT_ROLLUP, () =>
|
|
230
284
|
this.simulate(
|
|
231
285
|
input,
|
|
232
286
|
'BlockRootRollupArtifact',
|
|
233
287
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
234
|
-
|
|
235
|
-
|
|
288
|
+
convertBlockRootRollupPrivateInputsToWitnessMap,
|
|
289
|
+
convertBlockRootRollupOutputsFromWitnessMap,
|
|
236
290
|
),
|
|
237
291
|
);
|
|
238
292
|
}
|
|
239
293
|
|
|
240
|
-
@trackSpan('TestCircuitProver.
|
|
241
|
-
public async
|
|
242
|
-
input:
|
|
294
|
+
@trackSpan('TestCircuitProver.getBlockRootSingleTxRollupProof')
|
|
295
|
+
public async getBlockRootSingleTxRollupProof(
|
|
296
|
+
input: BlockRootSingleTxRollupPrivateInputs,
|
|
297
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
298
|
+
return await this.applyDelay(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, () =>
|
|
299
|
+
this.simulate(
|
|
300
|
+
input,
|
|
301
|
+
'BlockRootSingleTxRollupArtifact',
|
|
302
|
+
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
303
|
+
convertBlockRootSingleTxRollupPrivateInputsToWitnessMap,
|
|
304
|
+
convertBlockRootSingleTxRollupOutputsFromWitnessMap,
|
|
305
|
+
),
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
@trackSpan('TestCircuitProver.getBlockMergeRollupProof')
|
|
310
|
+
public getBlockMergeRollupProof(
|
|
311
|
+
input: BlockMergeRollupPrivateInputs,
|
|
312
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
313
|
+
return this.applyDelay(ProvingRequestType.BLOCK_MERGE_ROLLUP, () =>
|
|
314
|
+
this.simulate(
|
|
315
|
+
input,
|
|
316
|
+
'BlockMergeRollupArtifact',
|
|
317
|
+
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
318
|
+
convertBlockMergeRollupPrivateInputsToWitnessMap,
|
|
319
|
+
convertBlockMergeRollupOutputsFromWitnessMap,
|
|
320
|
+
),
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
@trackSpan('TestCircuitProver.getCheckpointRootRollupProof')
|
|
325
|
+
public getCheckpointRootRollupProof(
|
|
326
|
+
input: CheckpointRootRollupPrivateInputs,
|
|
243
327
|
): Promise<
|
|
244
|
-
PublicInputsAndRecursiveProof<
|
|
328
|
+
PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
245
329
|
> {
|
|
246
|
-
return
|
|
330
|
+
return this.applyDelay(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, () =>
|
|
247
331
|
this.simulate(
|
|
248
332
|
input,
|
|
249
|
-
'
|
|
333
|
+
'CheckpointRootRollupArtifact',
|
|
250
334
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
251
|
-
|
|
252
|
-
|
|
335
|
+
convertCheckpointRootRollupPrivateInputsToWitnessMap,
|
|
336
|
+
convertCheckpointRootRollupOutputsFromWitnessMap,
|
|
253
337
|
),
|
|
254
338
|
);
|
|
255
339
|
}
|
|
256
340
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
* @returns The public inputs as outputs of the simulation.
|
|
261
|
-
*/
|
|
262
|
-
@trackSpan('TestCircuitProver.getEmptyBlockRootRollupProof')
|
|
263
|
-
public getEmptyBlockRootRollupProof(
|
|
264
|
-
input: EmptyBlockRootRollupInputs,
|
|
341
|
+
@trackSpan('TestCircuitProver.getCheckpointRootSingleBlockRollupProof')
|
|
342
|
+
public getCheckpointRootSingleBlockRollupProof(
|
|
343
|
+
input: CheckpointRootSingleBlockRollupPrivateInputs,
|
|
265
344
|
): Promise<
|
|
266
|
-
PublicInputsAndRecursiveProof<
|
|
345
|
+
PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
267
346
|
> {
|
|
268
|
-
return this.applyDelay(ProvingRequestType.
|
|
347
|
+
return this.applyDelay(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, () =>
|
|
269
348
|
this.simulate(
|
|
270
349
|
input,
|
|
271
|
-
'
|
|
350
|
+
'CheckpointRootSingleBlockRollupArtifact',
|
|
272
351
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
273
|
-
|
|
274
|
-
|
|
352
|
+
convertCheckpointRootSingleBlockRollupPrivateInputsToWitnessMap,
|
|
353
|
+
convertCheckpointRootSingleBlockRollupOutputsFromWitnessMap,
|
|
275
354
|
),
|
|
276
355
|
);
|
|
277
356
|
}
|
|
278
357
|
|
|
279
|
-
@trackSpan('TestCircuitProver.
|
|
280
|
-
public
|
|
281
|
-
input:
|
|
358
|
+
@trackSpan('TestCircuitProver.getCheckpointPaddingRollupProof')
|
|
359
|
+
public getCheckpointPaddingRollupProof(
|
|
360
|
+
input: CheckpointPaddingRollupPrivateInputs,
|
|
282
361
|
): Promise<
|
|
283
|
-
PublicInputsAndRecursiveProof<
|
|
362
|
+
PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
284
363
|
> {
|
|
285
|
-
return this.applyDelay(ProvingRequestType.
|
|
364
|
+
return this.applyDelay(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, () =>
|
|
286
365
|
this.simulate(
|
|
287
366
|
input,
|
|
288
|
-
'
|
|
367
|
+
'CheckpointPaddingRollupArtifact',
|
|
289
368
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
290
|
-
|
|
291
|
-
|
|
369
|
+
convertCheckpointPaddingRollupPrivateInputsToWitnessMap,
|
|
370
|
+
convertCheckpointPaddingRollupOutputsFromWitnessMap,
|
|
292
371
|
),
|
|
293
372
|
);
|
|
294
373
|
}
|
|
295
374
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
* @returns The public inputs as outputs of the simulation.
|
|
300
|
-
*/
|
|
301
|
-
@trackSpan('TestCircuitProver.getBlockMergeRollupProof')
|
|
302
|
-
public getBlockMergeRollupProof(
|
|
303
|
-
input: BlockMergeRollupInputs,
|
|
375
|
+
@trackSpan('TestCircuitProver.getCheckpointMergeRollupProof')
|
|
376
|
+
public getCheckpointMergeRollupProof(
|
|
377
|
+
input: CheckpointMergeRollupPrivateInputs,
|
|
304
378
|
): Promise<
|
|
305
|
-
PublicInputsAndRecursiveProof<
|
|
379
|
+
PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
306
380
|
> {
|
|
307
|
-
return this.applyDelay(ProvingRequestType.
|
|
381
|
+
return this.applyDelay(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, () =>
|
|
308
382
|
this.simulate(
|
|
309
383
|
input,
|
|
310
|
-
'
|
|
384
|
+
'CheckpointMergeRollupArtifact',
|
|
311
385
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
312
|
-
|
|
313
|
-
|
|
386
|
+
convertCheckpointMergeRollupPrivateInputsToWitnessMap,
|
|
387
|
+
convertCheckpointMergeRollupOutputsFromWitnessMap,
|
|
314
388
|
),
|
|
315
389
|
);
|
|
316
390
|
}
|
|
@@ -321,13 +395,15 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
321
395
|
* @returns The public inputs as outputs of the simulation.
|
|
322
396
|
*/
|
|
323
397
|
@trackSpan('TestCircuitProver.getRootRollupProof')
|
|
324
|
-
public getRootRollupProof(
|
|
398
|
+
public getRootRollupProof(
|
|
399
|
+
input: RootRollupPrivateInputs,
|
|
400
|
+
): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs>> {
|
|
325
401
|
return this.applyDelay(ProvingRequestType.ROOT_ROLLUP, () =>
|
|
326
402
|
this.simulate(
|
|
327
403
|
input,
|
|
328
404
|
'RootRollupArtifact',
|
|
329
405
|
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
330
|
-
|
|
406
|
+
convertRootRollupPrivateInputsToWitnessMap,
|
|
331
407
|
convertRootRollupOutputsFromWitnessMap,
|
|
332
408
|
),
|
|
333
409
|
);
|
|
@@ -374,21 +450,20 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
374
450
|
input: CircuitInputType,
|
|
375
451
|
artifactName: ServerProtocolArtifact,
|
|
376
452
|
proofLength: PROOF_LENGTH,
|
|
377
|
-
convertInput: (input: CircuitInputType) => WitnessMap,
|
|
378
|
-
convertOutput: (outputWitness: WitnessMap) => CircuitOutputType,
|
|
453
|
+
convertInput: (input: CircuitInputType, simulated?: boolean) => WitnessMap,
|
|
454
|
+
convertOutput: (outputWitness: WitnessMap, simulated?: boolean) => CircuitOutputType,
|
|
379
455
|
) {
|
|
380
456
|
const timer = new Timer();
|
|
381
|
-
const witnessMap = convertInput(input);
|
|
457
|
+
const witnessMap = convertInput(input, true /* simulated */);
|
|
382
458
|
const circuitName = mapProtocolArtifactNameToCircuitName(artifactName);
|
|
383
459
|
|
|
384
460
|
let witness: WitnessMap;
|
|
385
461
|
if (
|
|
386
|
-
['
|
|
462
|
+
['CheckpointRootRollupArtifact', 'CheckpointRootSingleBlockRollupArtifact'].includes(artifactName) ||
|
|
387
463
|
this.simulator == undefined
|
|
388
464
|
) {
|
|
389
465
|
// TODO(#10323): Native ACVM simulator does not support foreign call handler so we use the wasm simulator
|
|
390
|
-
// when simulating
|
|
391
|
-
// is not provided.
|
|
466
|
+
// when simulating checkpoint root rollup circuits or when the native ACVM simulator is not provided.
|
|
392
467
|
witness = (
|
|
393
468
|
await this.wasmSimulator.executeProtocolCircuit(
|
|
394
469
|
witnessMap,
|
|
@@ -406,7 +481,7 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
406
481
|
).witness;
|
|
407
482
|
}
|
|
408
483
|
|
|
409
|
-
const result = convertOutput(witness);
|
|
484
|
+
const result = convertOutput(witness, true /* simulated */);
|
|
410
485
|
|
|
411
486
|
this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
|
|
412
487
|
emitCircuitSimulationStats(circuitName, timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
|