@aztec/bb-prover 0.0.1-commit.b655e406 → 0.0.1-commit.c0b82b2
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/avm_proving_tests/avm_proving_tester.d.ts +3 -4
- package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
- package/dest/avm_proving_tests/avm_proving_tester.js +21 -4
- package/dest/bb/cli.d.ts +1 -1
- package/dest/bb/execute.d.ts +7 -6
- package/dest/bb/execute.d.ts.map +1 -1
- package/dest/bb/execute.js +64 -84
- package/dest/bb/index.d.ts +1 -1
- package/dest/config.d.ts +1 -1
- package/dest/honk.d.ts +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/instrumentation.d.ts +1 -1
- package/dest/instrumentation.d.ts.map +1 -1
- package/dest/instrumentation.js +21 -43
- package/dest/prover/client/bb_private_kernel_prover.d.ts +11 -5
- package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
- package/dest/prover/client/bb_private_kernel_prover.js +37 -6
- package/dest/prover/client/bundle.d.ts +6 -0
- package/dest/prover/client/bundle.d.ts.map +1 -0
- package/dest/prover/client/bundle.js +7 -0
- package/dest/prover/client/lazy.d.ts +6 -0
- package/dest/prover/client/lazy.d.ts.map +1 -0
- package/dest/prover/client/lazy.js +7 -0
- package/dest/prover/index.d.ts +1 -1
- package/dest/prover/proof_utils.d.ts +1 -1
- package/dest/prover/proof_utils.js +1 -1
- package/dest/prover/server/bb_prover.d.ts +6 -18
- package/dest/prover/server/bb_prover.d.ts.map +1 -1
- package/dest/prover/server/bb_prover.js +416 -43
- package/dest/test/delay_values.d.ts +1 -1
- package/dest/test/delay_values.d.ts.map +1 -1
- package/dest/test/delay_values.js +29 -27
- package/dest/test/index.d.ts +2 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +1 -0
- package/dest/test/test_circuit_prover.d.ts +4 -4
- package/dest/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/test/test_circuit_prover.js +462 -59
- package/dest/test/test_verifier.d.ts +3 -1
- package/dest/test/test_verifier.d.ts.map +1 -1
- package/dest/test/test_verifier.js +15 -0
- package/dest/verification_key/verification_key_data.d.ts +1 -8
- package/dest/verification_key/verification_key_data.d.ts.map +1 -1
- package/dest/verification_key/verification_key_data.js +1 -20
- package/dest/verifier/bb_verifier.d.ts +1 -1
- package/dest/verifier/bb_verifier.d.ts.map +1 -1
- package/dest/verifier/bb_verifier.js +4 -4
- package/dest/verifier/index.d.ts +1 -1
- package/dest/verifier/queued_chonk_verifier.d.ts +1 -1
- package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -1
- package/dest/verifier/queued_chonk_verifier.js +9 -40
- package/package.json +23 -22
- package/src/avm_proving_tests/avm_proving_tester.ts +23 -19
- package/src/bb/execute.ts +46 -68
- package/src/instrumentation.ts +20 -43
- package/src/prover/client/bb_private_kernel_prover.ts +46 -8
- package/src/prover/client/bundle.ts +10 -0
- package/src/prover/client/lazy.ts +10 -0
- package/src/prover/proof_utils.ts +1 -1
- package/src/prover/server/bb_prover.ts +23 -38
- package/src/test/delay_values.ts +31 -27
- package/src/test/index.ts +1 -0
- package/src/test/test_circuit_prover.ts +10 -13
- package/src/test/test_verifier.ts +8 -0
- package/src/verification_key/verification_key_data.ts +1 -26
- package/src/verifier/bb_verifier.ts +4 -5
- package/src/verifier/queued_chonk_verifier.ts +9 -40
- package/dest/prover/client/native/bb_native_private_kernel_prover.d.ts +0 -23
- package/dest/prover/client/native/bb_native_private_kernel_prover.d.ts.map +0 -1
- package/dest/prover/client/native/bb_native_private_kernel_prover.js +0 -66
- package/dest/prover/client/wasm/bb_wasm_private_kernel_prover.d.ts +0 -15
- package/dest/prover/client/wasm/bb_wasm_private_kernel_prover.d.ts.map +0 -1
- package/dest/prover/client/wasm/bb_wasm_private_kernel_prover.js +0 -46
- package/dest/prover/client/wasm/bundle.d.ts +0 -6
- package/dest/prover/client/wasm/bundle.d.ts.map +0 -1
- package/dest/prover/client/wasm/bundle.js +0 -8
- package/dest/prover/client/wasm/lazy.d.ts +0 -6
- package/dest/prover/client/wasm/lazy.d.ts.map +0 -1
- package/dest/prover/client/wasm/lazy.js +0 -8
- package/src/prover/client/native/bb_native_private_kernel_prover.ts +0 -105
- package/src/prover/client/wasm/bb_wasm_private_kernel_prover.ts +0 -58
- package/src/prover/client/wasm/bundle.ts +0 -11
- package/src/prover/client/wasm/lazy.ts +0 -11
|
@@ -15,4 +15,4 @@ export declare class BBCircuitVerifier implements ClientProtocolCircuitVerifier
|
|
|
15
15
|
verifyProofForCircuit(circuit: ServerProtocolArtifact, proof: Proof): Promise<void>;
|
|
16
16
|
verifyProof(tx: Tx): Promise<IVCProofVerificationResult>;
|
|
17
17
|
}
|
|
18
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9iYl92ZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUVMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqSCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWE3RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJN0MscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBRW5FLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE1BQU07SUFGaEIsT0FBTyxlQUdIO0lBRUcsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFM0I7SUFFRCxPQUFvQixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQXFDLDhCQU1wRjtJQUVNLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FNNUU7SUFFWSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLEtBQUssaUJBbUMvRTtJQUVZLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQTZDcEU7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bb_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/bb_verifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAE5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAa7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,qBAAa,iBAAkB,YAAW,6BAA6B;IAEnE,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAFhB,OAAO;
|
|
1
|
+
{"version":3,"file":"bb_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/bb_verifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAE5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAa7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,qBAAa,iBAAkB,YAAW,6BAA6B;IAEnE,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAFhB,OAAO,eAGH;IAEG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,OAAoB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAqC,8BAMpF;IAEM,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB,CAM5E;IAEY,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,iBAmC/E;IAEY,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA6CpE;CACF"}
|
|
@@ -19,6 +19,9 @@ export class BBCircuitVerifier {
|
|
|
19
19
|
return Promise.resolve();
|
|
20
20
|
}
|
|
21
21
|
static async new(config, logger = createLogger('bb-prover:verifier')) {
|
|
22
|
+
if (!config.bbWorkingDirectory) {
|
|
23
|
+
throw new Error(`Barretenberg working directory (BB_WORKING_DIRECTORY) is not set`);
|
|
24
|
+
}
|
|
22
25
|
await fs.mkdir(config.bbWorkingDirectory, {
|
|
23
26
|
recursive: true
|
|
24
27
|
});
|
|
@@ -64,16 +67,13 @@ export class BBCircuitVerifier {
|
|
|
64
67
|
const circuit = tx.data.forPublic ? 'HidingKernelToPublic' : 'HidingKernelToRollup';
|
|
65
68
|
// Block below is almost copy-pasted from verifyProofForCircuit
|
|
66
69
|
const operation = async (bbWorkingDirectory)=>{
|
|
67
|
-
const logFunction = (message)=>{
|
|
68
|
-
this.logger.debug(`${proofType} BB out - ${message}`);
|
|
69
|
-
};
|
|
70
70
|
const proofPath = path.join(bbWorkingDirectory, PROOF_FILENAME);
|
|
71
71
|
await writeChonkProofToPath(tx.chonkProof.attachPublicInputs(tx.data.publicInputs().toFields()), proofPath);
|
|
72
72
|
const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
|
|
73
73
|
const verificationKey = this.getVerificationKeyData(circuit);
|
|
74
74
|
await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
|
|
75
75
|
const timer = new Timer();
|
|
76
|
-
const result = await verifyChonkProof(this.config.bbBinaryPath, proofPath, verificationKeyPath,
|
|
76
|
+
const result = await verifyChonkProof(this.config.bbBinaryPath, proofPath, verificationKeyPath, this.logger, this.config.bbIVCConcurrency);
|
|
77
77
|
verificationDuration = timer.ms();
|
|
78
78
|
if (result.status === BB_RESULT.FAILURE) {
|
|
79
79
|
const errorMessage = `Failed to verify ${proofType} proof for ${circuit}!`;
|
package/dest/verifier/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './bb_verifier.js';
|
|
2
2
|
export * from './queued_chonk_verifier.js';
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsNEJBQTRCLENBQUMifQ==
|
|
@@ -12,4 +12,4 @@ export declare class QueuedIVCVerifier implements ClientProtocolCircuitVerifier
|
|
|
12
12
|
verifyProof(tx: Tx): Promise<IVCProofVerificationResult>;
|
|
13
13
|
stop(): Promise<void>;
|
|
14
14
|
}
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkX2Nob25rX3ZlcmlmaWVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvcXVldWVkX2Nob25rX3ZlcmlmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakgsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQU1MLEtBQUssZUFBZSxFQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBSWpDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWlFN0MscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBTW5FLE9BQU8sQ0FBQyxRQUFRO0lBQ2hCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxNQUFNO0lBUGhCLE9BQU8sQ0FBQyxLQUFLLENBQWM7SUFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBcUI7SUFFcEMsWUFDRSxNQUFNLEVBQUUsUUFBUSxFQUNSLFFBQVEsRUFBRSw2QkFBNkIsRUFDdkMsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELE1BQU0seUNBQWtELEVBTWpFO0lBRVksV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBSXBFO0lBRUQsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queued_chonk_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/queued_chonk_verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"queued_chonk_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/queued_chonk_verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAiE7C,qBAAa,iBAAkB,YAAW,6BAA6B;IAMnE,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAqB;IAEpC,YACE,MAAM,EAAE,QAAQ,EACR,QAAQ,EAAE,6BAA6B,EACvC,SAAS,GAAE,eAAsC,EACjD,MAAM,yCAAkD,EAMjE;IAEY,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAIpE;IAED,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpB;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
3
|
-
import { Attributes, Metrics,
|
|
3
|
+
import { Attributes, Metrics, createUpDownCounterWithDefault, getTelemetryClient } from '@aztec/telemetry-client';
|
|
4
4
|
import { createHistogram } from 'node:perf_hooks';
|
|
5
5
|
class IVCVerifierMetrics {
|
|
6
6
|
ivcVerificationHistogram;
|
|
@@ -17,46 +17,15 @@ class IVCVerifierMetrics {
|
|
|
17
17
|
aggDurationMetrics;
|
|
18
18
|
constructor(client, name = 'QueuedIVCVerifier'){
|
|
19
19
|
const meter = client.getMeter(name);
|
|
20
|
-
this.ivcVerificationHistogram = meter.createHistogram(Metrics.IVC_VERIFIER_TIME
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
valueType: ValueType.INT
|
|
24
|
-
});
|
|
25
|
-
this.ivcTotalVerificationHistogram = meter.createHistogram(Metrics.IVC_VERIFIER_TOTAL_TIME, {
|
|
26
|
-
unit: 'ms',
|
|
27
|
-
description: 'Total duration to verify chonk proofs, including serde',
|
|
28
|
-
valueType: ValueType.INT
|
|
29
|
-
});
|
|
30
|
-
this.ivcFailureCount = meter.createUpDownCounter(Metrics.IVC_VERIFIER_FAILURE_COUNT, {
|
|
31
|
-
description: 'Count of failed IVC proof verifications',
|
|
32
|
-
valueType: ValueType.INT
|
|
33
|
-
});
|
|
20
|
+
this.ivcVerificationHistogram = meter.createHistogram(Metrics.IVC_VERIFIER_TIME);
|
|
21
|
+
this.ivcTotalVerificationHistogram = meter.createHistogram(Metrics.IVC_VERIFIER_TOTAL_TIME);
|
|
22
|
+
this.ivcFailureCount = createUpDownCounterWithDefault(meter, Metrics.IVC_VERIFIER_FAILURE_COUNT);
|
|
34
23
|
this.aggDurationMetrics = {
|
|
35
|
-
avg: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_AVG,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
max: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_MAX, {
|
|
41
|
-
valueType: ValueType.DOUBLE,
|
|
42
|
-
description: 'MAX ivc verification',
|
|
43
|
-
unit: 'ms'
|
|
44
|
-
}),
|
|
45
|
-
min: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_MIN, {
|
|
46
|
-
valueType: ValueType.DOUBLE,
|
|
47
|
-
description: 'MIN ivc verification',
|
|
48
|
-
unit: 'ms'
|
|
49
|
-
}),
|
|
50
|
-
p50: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_P50, {
|
|
51
|
-
valueType: ValueType.DOUBLE,
|
|
52
|
-
description: 'P50 ivc verification',
|
|
53
|
-
unit: 'ms'
|
|
54
|
-
}),
|
|
55
|
-
p90: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_P90, {
|
|
56
|
-
valueType: ValueType.DOUBLE,
|
|
57
|
-
description: 'P90 ivc verification',
|
|
58
|
-
unit: 'ms'
|
|
59
|
-
})
|
|
24
|
+
avg: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_AVG),
|
|
25
|
+
max: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_MAX),
|
|
26
|
+
min: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_MIN),
|
|
27
|
+
p50: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_P50),
|
|
28
|
+
p90: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_P90)
|
|
60
29
|
};
|
|
61
30
|
meter.addBatchObservableCallback(this.aggregate, Object.values(this.aggDurationMetrics));
|
|
62
31
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/bb-prover",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.c0b82b2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
-
"./client/
|
|
8
|
-
"./client/
|
|
9
|
-
"./client
|
|
7
|
+
"./client/bundle": "./dest/prover/client/bundle.js",
|
|
8
|
+
"./client/lazy": "./dest/prover/client/lazy.js",
|
|
9
|
+
"./client": "./dest/prover/client/bb_private_kernel_prover.js",
|
|
10
10
|
"./verifier": "./dest/verifier/index.js",
|
|
11
11
|
"./test": "./dest/test/index.js",
|
|
12
12
|
"./config": "./dest/config.js"
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"../package.common.json"
|
|
26
26
|
],
|
|
27
27
|
"scripts": {
|
|
28
|
-
"build": "yarn clean && tsc
|
|
29
|
-
"build:dev": "tsc
|
|
28
|
+
"build": "yarn clean && ../scripts/tsc.sh",
|
|
29
|
+
"build:dev": "../scripts/tsc.sh --watch",
|
|
30
30
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
31
31
|
"bb": "node --no-warnings ./dest/bb/index.js",
|
|
32
32
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
|
|
@@ -69,36 +69,37 @@
|
|
|
69
69
|
]
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
73
|
-
"@aztec/constants": "0.0.1-commit.
|
|
74
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
75
|
-
"@aztec/noir-noirc_abi": "0.0.1-commit.
|
|
76
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
77
|
-
"@aztec/noir-types": "0.0.1-commit.
|
|
78
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
79
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
80
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
81
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
72
|
+
"@aztec/bb.js": "0.0.1-commit.c0b82b2",
|
|
73
|
+
"@aztec/constants": "0.0.1-commit.c0b82b2",
|
|
74
|
+
"@aztec/foundation": "0.0.1-commit.c0b82b2",
|
|
75
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.c0b82b2",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.c0b82b2",
|
|
77
|
+
"@aztec/noir-types": "0.0.1-commit.c0b82b2",
|
|
78
|
+
"@aztec/simulator": "0.0.1-commit.c0b82b2",
|
|
79
|
+
"@aztec/stdlib": "0.0.1-commit.c0b82b2",
|
|
80
|
+
"@aztec/telemetry-client": "0.0.1-commit.c0b82b2",
|
|
81
|
+
"@aztec/world-state": "0.0.1-commit.c0b82b2",
|
|
82
82
|
"commander": "^12.1.0",
|
|
83
83
|
"pako": "^2.1.0",
|
|
84
84
|
"source-map-support": "^0.5.21",
|
|
85
85
|
"tslib": "^2.4.0"
|
|
86
86
|
},
|
|
87
87
|
"devDependencies": {
|
|
88
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
89
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
90
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
91
|
-
"@aztec/noir-test-contracts.js": "0.0.1-commit.
|
|
92
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
88
|
+
"@aztec/ethereum": "0.0.1-commit.c0b82b2",
|
|
89
|
+
"@aztec/kv-store": "0.0.1-commit.c0b82b2",
|
|
90
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.c0b82b2",
|
|
91
|
+
"@aztec/noir-test-contracts.js": "0.0.1-commit.c0b82b2",
|
|
92
|
+
"@aztec/protocol-contracts": "0.0.1-commit.c0b82b2",
|
|
93
93
|
"@jest/globals": "^30.0.0",
|
|
94
94
|
"@types/jest": "^30.0.0",
|
|
95
95
|
"@types/node": "^22.15.17",
|
|
96
96
|
"@types/source-map-support": "^0.5.10",
|
|
97
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
97
98
|
"jest": "^30.0.0",
|
|
98
99
|
"jest-mock-extended": "^4.0.0",
|
|
99
100
|
"ts-node": "^10.9.1",
|
|
100
101
|
"typescript": "^5.3.3",
|
|
101
|
-
"viem": "npm:@
|
|
102
|
+
"viem": "npm:@aztec/viem@2.38.2"
|
|
102
103
|
},
|
|
103
104
|
"files": [
|
|
104
105
|
"dest",
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
type TestPrivateInsertions,
|
|
9
9
|
} from '@aztec/simulator/public/fixtures';
|
|
10
10
|
import type { PublicTxResult } from '@aztec/simulator/server';
|
|
11
|
-
import {
|
|
11
|
+
import { AvmCircuitInputs, AvmCircuitPublicInputs, PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
12
12
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
13
13
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
14
14
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
@@ -18,14 +18,7 @@ import fs from 'node:fs/promises';
|
|
|
18
18
|
import { tmpdir } from 'node:os';
|
|
19
19
|
import path from 'path';
|
|
20
20
|
|
|
21
|
-
import {
|
|
22
|
-
type BBResult,
|
|
23
|
-
type BBSuccess,
|
|
24
|
-
BB_RESULT,
|
|
25
|
-
VK_FILENAME,
|
|
26
|
-
generateAvmProof,
|
|
27
|
-
verifyAvmProof,
|
|
28
|
-
} from '../bb/execute.js';
|
|
21
|
+
import { type BBResult, type BBSuccess, BB_RESULT, generateAvmProof, verifyAvmProof } from '../bb/execute.js';
|
|
29
22
|
|
|
30
23
|
const BB_PATH = path.resolve('../../barretenberg/cpp/build/bin/bb-avm');
|
|
31
24
|
|
|
@@ -51,6 +44,10 @@ class InterceptingLogger implements Logger {
|
|
|
51
44
|
throw new Error('Not implemented');
|
|
52
45
|
}
|
|
53
46
|
|
|
47
|
+
getBindings() {
|
|
48
|
+
return this.logger.getBindings();
|
|
49
|
+
}
|
|
50
|
+
|
|
54
51
|
private intercept(level: LogLevel, msg: string, ...args: any[]) {
|
|
55
52
|
this.logs.push(...msg.split('\n'));
|
|
56
53
|
// Forward to the wrapped logger
|
|
@@ -88,6 +85,16 @@ class InterceptingLogger implements Logger {
|
|
|
88
85
|
}
|
|
89
86
|
}
|
|
90
87
|
|
|
88
|
+
// Config with collectHints enabled for proving tests
|
|
89
|
+
const provingConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
|
|
90
|
+
skipFeeEnforcement: false,
|
|
91
|
+
collectCallMetadata: true, // For results.
|
|
92
|
+
collectDebugLogs: false,
|
|
93
|
+
collectHints: true, // Required for proving!
|
|
94
|
+
collectPublicInputs: true, // Required for proving!
|
|
95
|
+
collectStatistics: false,
|
|
96
|
+
});
|
|
97
|
+
|
|
91
98
|
export class AvmProvingTester extends PublicTxSimulationTester {
|
|
92
99
|
private bbWorkingDirectory: string = '';
|
|
93
100
|
|
|
@@ -98,7 +105,8 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
98
105
|
globals?: GlobalVariables,
|
|
99
106
|
metrics?: TestExecutorMetrics,
|
|
100
107
|
) {
|
|
101
|
-
|
|
108
|
+
// simulator factory is undefined because for proving, we use the default C++ simulator
|
|
109
|
+
super(merkleTrees, contractDataSource, globals, metrics, /*simulatorFactory=*/ undefined, provingConfig);
|
|
102
110
|
}
|
|
103
111
|
|
|
104
112
|
static async new(
|
|
@@ -182,14 +190,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
182
190
|
return proofRes;
|
|
183
191
|
}
|
|
184
192
|
|
|
185
|
-
return await verifyAvmProof(
|
|
186
|
-
BB_PATH,
|
|
187
|
-
this.bbWorkingDirectory,
|
|
188
|
-
proofRes.proofPath!,
|
|
189
|
-
publicInputs,
|
|
190
|
-
path.join(proofRes.vkDirectoryPath!, VK_FILENAME),
|
|
191
|
-
this.logger,
|
|
192
|
-
);
|
|
193
|
+
return await verifyAvmProof(BB_PATH, this.bbWorkingDirectory, proofRes.proofPath!, publicInputs, this.logger);
|
|
193
194
|
}
|
|
194
195
|
|
|
195
196
|
public async proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx') {
|
|
@@ -211,6 +212,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
211
212
|
txLabel: string = 'unlabeledTx',
|
|
212
213
|
disableRevertCheck: boolean = false,
|
|
213
214
|
): Promise<PublicTxResult> {
|
|
215
|
+
const simTimer = new Timer();
|
|
214
216
|
const simRes = await this.simulateTx(
|
|
215
217
|
sender,
|
|
216
218
|
setupCalls,
|
|
@@ -220,6 +222,8 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
220
222
|
privateInsertions,
|
|
221
223
|
txLabel,
|
|
222
224
|
);
|
|
225
|
+
const simDuration = simTimer.ms();
|
|
226
|
+
this.logger.info(`Simulation took ${simDuration} ms for tx ${txLabel}`);
|
|
223
227
|
|
|
224
228
|
if (!disableRevertCheck) {
|
|
225
229
|
expect(simRes.revertCode.isOK()).toBe(expectRevert ? false : true);
|
|
@@ -227,7 +231,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
227
231
|
|
|
228
232
|
const opString = this.checkCircuitOnly ? 'Check circuit' : 'Proving and verification';
|
|
229
233
|
|
|
230
|
-
const avmCircuitInputs = simRes.
|
|
234
|
+
const avmCircuitInputs = new AvmCircuitInputs(simRes.hints!, simRes.publicInputs!);
|
|
231
235
|
const timer = new Timer();
|
|
232
236
|
await this.proveVerify(avmCircuitInputs, txLabel);
|
|
233
237
|
this.logger.info(`${opString} took ${timer.ms()} ms for tx ${txLabel}`);
|
package/src/bb/execute.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sha256 } from '@aztec/foundation/crypto';
|
|
1
|
+
import { sha256 } from '@aztec/foundation/crypto/sha256';
|
|
2
2
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
3
3
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
4
|
import type { AvmCircuitInputs, AvmCircuitPublicInputs } from '@aztec/stdlib/avm';
|
|
@@ -6,6 +6,7 @@ import type { AvmCircuitInputs, AvmCircuitPublicInputs } from '@aztec/stdlib/avm
|
|
|
6
6
|
import * as proc from 'child_process';
|
|
7
7
|
import { promises as fs } from 'fs';
|
|
8
8
|
import { basename, dirname, join } from 'path';
|
|
9
|
+
import readline from 'readline';
|
|
9
10
|
|
|
10
11
|
import type { UltraHonkFlavor } from '../honk.js';
|
|
11
12
|
|
|
@@ -51,6 +52,8 @@ type BBExecResult = {
|
|
|
51
52
|
signal: string | undefined;
|
|
52
53
|
};
|
|
53
54
|
|
|
55
|
+
export const DEFAULT_BB_VERIFY_CONCURRENCY = 4;
|
|
56
|
+
|
|
54
57
|
/**
|
|
55
58
|
* Invokes the Barretenberg binary with the provided command and args
|
|
56
59
|
* @param pathToBB - The path to the BB binary
|
|
@@ -85,6 +88,7 @@ export function executeBB(
|
|
|
85
88
|
logger(`BB concurrency: ${env.HARDWARE_CONCURRENCY}`);
|
|
86
89
|
logger(`Executing BB with: ${pathToBB} ${command} ${args.join(' ')}`);
|
|
87
90
|
const bb = proc.spawn(pathToBB, [command, ...args], {
|
|
91
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
88
92
|
env,
|
|
89
93
|
});
|
|
90
94
|
|
|
@@ -99,14 +103,9 @@ export function executeBB(
|
|
|
99
103
|
}, timeout);
|
|
100
104
|
}
|
|
101
105
|
|
|
102
|
-
bb.stdout.on('
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
});
|
|
106
|
-
bb.stderr.on('data', data => {
|
|
107
|
-
const message = data.toString('utf-8').replace(/\n$/, '');
|
|
108
|
-
logger(message);
|
|
109
|
-
});
|
|
106
|
+
readline.createInterface({ input: bb.stdout }).on('line', logger);
|
|
107
|
+
readline.createInterface({ input: bb.stderr }).on('line', logger);
|
|
108
|
+
|
|
110
109
|
bb.on('close', (exitCode: number, signal?: string) => {
|
|
111
110
|
if (timeoutId) {
|
|
112
111
|
clearTimeout(timeoutId);
|
|
@@ -356,7 +355,7 @@ export async function generateAvmProof(
|
|
|
356
355
|
durationMs: duration,
|
|
357
356
|
proofPath: join(outputPath, PROOF_FILENAME),
|
|
358
357
|
pkPath: undefined,
|
|
359
|
-
vkDirectoryPath:
|
|
358
|
+
vkDirectoryPath: undefined, // AVM VK is fixed in the binary.
|
|
360
359
|
};
|
|
361
360
|
}
|
|
362
361
|
// Not a great error message here but it is difficult to decipher what comes from bb
|
|
@@ -375,7 +374,7 @@ export async function generateAvmProof(
|
|
|
375
374
|
* @param pathToBB - The full path to the bb binary
|
|
376
375
|
* @param proofFullPath - The full path to the proof to be verified
|
|
377
376
|
* @param verificationKeyPath - The full path to the circuit verification key
|
|
378
|
-
* @param
|
|
377
|
+
* @param logger - A logger
|
|
379
378
|
* @returns An object containing a result indication and duration taken
|
|
380
379
|
*/
|
|
381
380
|
export async function verifyProof(
|
|
@@ -383,16 +382,32 @@ export async function verifyProof(
|
|
|
383
382
|
proofFullPath: string,
|
|
384
383
|
verificationKeyPath: string,
|
|
385
384
|
ultraHonkFlavor: UltraHonkFlavor,
|
|
386
|
-
|
|
385
|
+
logger: Logger,
|
|
387
386
|
): Promise<BBFailure | BBSuccess> {
|
|
388
|
-
|
|
389
|
-
|
|
387
|
+
// Specify the public inputs path in the case of UH verification.
|
|
388
|
+
// Take proofFullPath and remove the suffix past the / to get the directory.
|
|
389
|
+
const proofDir = proofFullPath.substring(0, proofFullPath.lastIndexOf('/'));
|
|
390
|
+
const publicInputsFullPath = join(proofDir, '/public_inputs');
|
|
391
|
+
logger.debug(`public inputs path: ${publicInputsFullPath}`);
|
|
392
|
+
|
|
393
|
+
const args = [
|
|
394
|
+
'-p',
|
|
390
395
|
proofFullPath,
|
|
396
|
+
'-k',
|
|
391
397
|
verificationKeyPath,
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
398
|
+
'-i',
|
|
399
|
+
publicInputsFullPath,
|
|
400
|
+
'--disable_zk',
|
|
401
|
+
...getArgs(ultraHonkFlavor),
|
|
402
|
+
];
|
|
403
|
+
|
|
404
|
+
let concurrency = DEFAULT_BB_VERIFY_CONCURRENCY;
|
|
405
|
+
|
|
406
|
+
if (process.env.VERIFY_HARDWARE_CONCURRENCY) {
|
|
407
|
+
concurrency = parseInt(process.env.VERIFY_HARDWARE_CONCURRENCY, 10);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
return await verifyProofInternal(pathToBB, `verify`, args, logger, concurrency);
|
|
396
411
|
}
|
|
397
412
|
|
|
398
413
|
export async function verifyAvmProof(
|
|
@@ -400,7 +415,6 @@ export async function verifyAvmProof(
|
|
|
400
415
|
workingDirectory: string,
|
|
401
416
|
proofFullPath: string,
|
|
402
417
|
publicInputs: AvmCircuitPublicInputs,
|
|
403
|
-
verificationKeyPath: string,
|
|
404
418
|
logger: Logger,
|
|
405
419
|
): Promise<BBFailure | BBSuccess> {
|
|
406
420
|
const inputsBuffer = publicInputs.serializeWithMessagePack();
|
|
@@ -417,10 +431,8 @@ export async function verifyAvmProof(
|
|
|
417
431
|
return { status: BB_RESULT.FAILURE, reason: `Could not write avm inputs to ${avmInputsPath}` };
|
|
418
432
|
}
|
|
419
433
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
avmInputsPath,
|
|
423
|
-
]);
|
|
434
|
+
const args = ['-p', proofFullPath, '--avm-public-inputs', avmInputsPath];
|
|
435
|
+
return await verifyProofInternal(pathToBB, 'avm_verify', args, logger);
|
|
424
436
|
}
|
|
425
437
|
|
|
426
438
|
/**
|
|
@@ -428,7 +440,7 @@ export async function verifyAvmProof(
|
|
|
428
440
|
* TODO(#7370) The verification keys should be supplied separately
|
|
429
441
|
* @param pathToBB - The full path to the bb binary
|
|
430
442
|
* @param targetPath - The path to the folder with the proof, accumulator, and verification keys
|
|
431
|
-
* @param
|
|
443
|
+
* @param logger - A logger
|
|
432
444
|
* @param concurrency - The number of threads to use for the verification
|
|
433
445
|
* @returns An object containing a result indication and duration taken
|
|
434
446
|
*/
|
|
@@ -436,7 +448,7 @@ export async function verifyChonkProof(
|
|
|
436
448
|
pathToBB: string,
|
|
437
449
|
proofPath: string,
|
|
438
450
|
keyPath: string,
|
|
439
|
-
|
|
451
|
+
logger: Logger,
|
|
440
452
|
concurrency = 1,
|
|
441
453
|
): Promise<BBFailure | BBSuccess> {
|
|
442
454
|
const binaryPresent = await fs
|
|
@@ -447,43 +459,25 @@ export async function verifyChonkProof(
|
|
|
447
459
|
return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
|
|
448
460
|
}
|
|
449
461
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
const timer = new Timer();
|
|
453
|
-
const command = 'verify';
|
|
454
|
-
|
|
455
|
-
const result = await executeBB(pathToBB, command, args, log, concurrency);
|
|
456
|
-
const duration = timer.ms();
|
|
457
|
-
if (result.status == BB_RESULT.SUCCESS) {
|
|
458
|
-
return { status: BB_RESULT.SUCCESS, durationMs: duration };
|
|
459
|
-
}
|
|
460
|
-
// Not a great error message here but it is difficult to decipher what comes from bb
|
|
461
|
-
return {
|
|
462
|
-
status: BB_RESULT.FAILURE,
|
|
463
|
-
reason: `Failed to verify proof. Exit code ${result.exitCode}. Signal ${result.signal}.`,
|
|
464
|
-
retry: !!result.signal,
|
|
465
|
-
};
|
|
466
|
-
} catch (error) {
|
|
467
|
-
return { status: BB_RESULT.FAILURE, reason: `${error}` };
|
|
468
|
-
}
|
|
462
|
+
const args = ['--scheme', 'chonk', '-p', proofPath, '-k', keyPath, '-v'];
|
|
463
|
+
return await verifyProofInternal(pathToBB, 'verify', args, logger, concurrency);
|
|
469
464
|
}
|
|
470
465
|
|
|
471
466
|
/**
|
|
472
467
|
* Used for verifying proofs with BB
|
|
473
468
|
* @param pathToBB - The full path to the bb binary
|
|
474
|
-
* @param proofFullPath - The full path to the proof to be verified
|
|
475
|
-
* @param verificationKeyPath - The full path to the circuit verification key
|
|
476
469
|
* @param command - The BB command to execute (verify/avm_verify)
|
|
477
|
-
* @param
|
|
470
|
+
* @param args - The arguments to pass to the command
|
|
471
|
+
* @param logger - A logger
|
|
472
|
+
* @param concurrency - The number of threads to use for the verification
|
|
478
473
|
* @returns An object containing a result indication and duration taken
|
|
479
474
|
*/
|
|
480
475
|
async function verifyProofInternal(
|
|
481
476
|
pathToBB: string,
|
|
482
|
-
proofFullPath: string,
|
|
483
|
-
verificationKeyPath: string,
|
|
484
477
|
command: 'verify' | 'avm_verify',
|
|
478
|
+
args: string[],
|
|
485
479
|
logger: Logger,
|
|
486
|
-
|
|
480
|
+
concurrency?: number,
|
|
487
481
|
): Promise<BBFailure | BBSuccess> {
|
|
488
482
|
const binaryPresent = await fs
|
|
489
483
|
.access(pathToBB, fs.constants.R_OK)
|
|
@@ -498,28 +492,12 @@ async function verifyProofInternal(
|
|
|
498
492
|
};
|
|
499
493
|
|
|
500
494
|
try {
|
|
501
|
-
let args;
|
|
502
|
-
|
|
503
|
-
if (command == 'verify') {
|
|
504
|
-
// Specify the public inputs path in the case of UH verification.
|
|
505
|
-
// Take proofFullPath and remove the suffix past the / to get the directory.
|
|
506
|
-
const proofDir = proofFullPath.substring(0, proofFullPath.lastIndexOf('/'));
|
|
507
|
-
const publicInputsFullPath = join(proofDir, '/public_inputs');
|
|
508
|
-
logger.debug(`public inputs path: ${publicInputsFullPath}`);
|
|
509
|
-
|
|
510
|
-
args = ['-p', proofFullPath, '-k', verificationKeyPath, '-i', publicInputsFullPath, '--disable_zk', ...extraArgs];
|
|
511
|
-
} else {
|
|
512
|
-
args = ['-p', proofFullPath, '-k', verificationKeyPath, ...extraArgs];
|
|
513
|
-
}
|
|
514
|
-
|
|
515
495
|
const loggingArg =
|
|
516
496
|
logger.level === 'debug' || logger.level === 'trace' ? '-d' : logger.level === 'verbose' ? '-v' : '';
|
|
517
|
-
|
|
518
|
-
args.push(loggingArg);
|
|
519
|
-
}
|
|
497
|
+
const finalArgs = loggingArg !== '' ? [...args, loggingArg] : args;
|
|
520
498
|
|
|
521
499
|
const timer = new Timer();
|
|
522
|
-
const result = await executeBB(pathToBB, command,
|
|
500
|
+
const result = await executeBB(pathToBB, command, finalArgs, logFunction, concurrency);
|
|
523
501
|
const duration = timer.ms();
|
|
524
502
|
if (result.status == BB_RESULT.SUCCESS) {
|
|
525
503
|
return { status: BB_RESULT.SUCCESS, durationMs: duration };
|
package/src/instrumentation.ts
CHANGED
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
Metrics,
|
|
8
8
|
type TelemetryClient,
|
|
9
9
|
type Tracer,
|
|
10
|
-
ValueType,
|
|
11
10
|
} from '@aztec/telemetry-client';
|
|
12
11
|
|
|
13
12
|
/**
|
|
@@ -31,51 +30,21 @@ export class ProverInstrumentation {
|
|
|
31
30
|
this.tracer = telemetry.getTracer(name);
|
|
32
31
|
const meter = telemetry.getMeter(name);
|
|
33
32
|
|
|
34
|
-
this.simulationDuration = meter.createHistogram(Metrics.CIRCUIT_SIMULATION_DURATION
|
|
35
|
-
description: 'Records how long it takes to simulate a circuit',
|
|
36
|
-
unit: 'ms',
|
|
37
|
-
valueType: ValueType.INT,
|
|
38
|
-
});
|
|
33
|
+
this.simulationDuration = meter.createHistogram(Metrics.CIRCUIT_SIMULATION_DURATION);
|
|
39
34
|
|
|
40
|
-
this.witGenDuration = meter.createHistogram(Metrics.CIRCUIT_WITNESS_GEN_DURATION
|
|
41
|
-
description: 'Records how long it takes to generate the partial witness for a circuit',
|
|
42
|
-
unit: 's',
|
|
43
|
-
valueType: ValueType.DOUBLE,
|
|
44
|
-
});
|
|
35
|
+
this.witGenDuration = meter.createHistogram(Metrics.CIRCUIT_WITNESS_GEN_DURATION);
|
|
45
36
|
|
|
46
|
-
this.provingDuration = meter.createHistogram(Metrics.CIRCUIT_PROVING_DURATION
|
|
47
|
-
unit: 's',
|
|
48
|
-
description: 'Records how long it takes to prove a circuit',
|
|
49
|
-
valueType: ValueType.DOUBLE,
|
|
50
|
-
});
|
|
37
|
+
this.provingDuration = meter.createHistogram(Metrics.CIRCUIT_PROVING_DURATION);
|
|
51
38
|
|
|
52
|
-
this.witGenInputSize = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_INPUT_SIZE
|
|
53
|
-
unit: 'By',
|
|
54
|
-
description: 'Records the size of the input to the witness generation',
|
|
55
|
-
valueType: ValueType.INT,
|
|
56
|
-
});
|
|
39
|
+
this.witGenInputSize = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_INPUT_SIZE);
|
|
57
40
|
|
|
58
|
-
this.witGenOutputSize = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_OUTPUT_SIZE
|
|
59
|
-
unit: 'By',
|
|
60
|
-
description: 'Records the size of the output of the witness generation',
|
|
61
|
-
valueType: ValueType.INT,
|
|
62
|
-
});
|
|
41
|
+
this.witGenOutputSize = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_OUTPUT_SIZE);
|
|
63
42
|
|
|
64
|
-
this.proofSize = meter.createGauge(Metrics.CIRCUIT_PROVING_PROOF_SIZE
|
|
65
|
-
unit: 'By',
|
|
66
|
-
description: 'Records the size of the proof generated for a circuit',
|
|
67
|
-
valueType: ValueType.INT,
|
|
68
|
-
});
|
|
43
|
+
this.proofSize = meter.createGauge(Metrics.CIRCUIT_PROVING_PROOF_SIZE);
|
|
69
44
|
|
|
70
|
-
this.circuitPublicInputCount = meter.createGauge(Metrics.CIRCUIT_PUBLIC_INPUTS_COUNT
|
|
71
|
-
description: 'Records the number of public inputs in a circuit',
|
|
72
|
-
valueType: ValueType.INT,
|
|
73
|
-
});
|
|
45
|
+
this.circuitPublicInputCount = meter.createGauge(Metrics.CIRCUIT_PUBLIC_INPUTS_COUNT);
|
|
74
46
|
|
|
75
|
-
this.circuitSize = meter.createGauge(Metrics.CIRCUIT_SIZE
|
|
76
|
-
description: 'Records the size of the circuit in gates',
|
|
77
|
-
valueType: ValueType.INT,
|
|
78
|
-
});
|
|
47
|
+
this.circuitSize = meter.createGauge(Metrics.CIRCUIT_SIZE);
|
|
79
48
|
}
|
|
80
49
|
|
|
81
50
|
/**
|
|
@@ -89,10 +58,18 @@ export class ProverInstrumentation {
|
|
|
89
58
|
circuitName: CircuitName,
|
|
90
59
|
timerOrMS: Timer | number,
|
|
91
60
|
) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
61
|
+
// Simulation duration is stored in ms, while the others are stored in seconds
|
|
62
|
+
if (metric === 'simulationDuration') {
|
|
63
|
+
const ms = typeof timerOrMS === 'number' ? timerOrMS : timerOrMS.ms();
|
|
64
|
+
this[metric].record(Math.trunc(ms), {
|
|
65
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
|
|
66
|
+
});
|
|
67
|
+
} else {
|
|
68
|
+
const s = typeof timerOrMS === 'number' ? timerOrMS / 1000 : timerOrMS.s();
|
|
69
|
+
this[metric].record(s, {
|
|
70
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
96
73
|
}
|
|
97
74
|
|
|
98
75
|
/**
|