@aztec/bb-prover 0.0.1-commit.c7c42ec → 0.0.1-commit.c949de6bc
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 +1 -1
- package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
- package/dest/avm_proving_tests/avm_proving_tester.js +5 -2
- package/dest/bb/execute.d.ts +7 -6
- package/dest/bb/execute.d.ts.map +1 -1
- package/dest/bb/execute.js +51 -75
- 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 +9 -3
- package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
- package/dest/prover/client/bb_private_kernel_prover.js +16 -4
- package/dest/prover/client/bundle.d.ts +3 -3
- package/dest/prover/client/bundle.d.ts.map +1 -1
- package/dest/prover/client/bundle.js +2 -3
- package/dest/prover/client/lazy.d.ts +3 -3
- package/dest/prover/client/lazy.d.ts.map +1 -1
- package/dest/prover/client/lazy.js +2 -3
- package/dest/prover/server/bb_prover.d.ts +6 -9
- package/dest/prover/server/bb_prover.d.ts.map +1 -1
- package/dest/prover/server/bb_prover.js +414 -38
- package/dest/test/delay_values.js +2 -2
- 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/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 +0 -19
- 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 +1 -4
- 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 +17 -17
- package/src/avm_proving_tests/avm_proving_tester.ts +6 -16
- package/src/bb/execute.ts +40 -59
- package/src/instrumentation.ts +20 -43
- package/src/prover/client/bb_private_kernel_prover.ts +20 -6
- package/src/prover/client/bundle.ts +3 -4
- package/src/prover/client/lazy.ts +3 -4
- package/src/prover/server/bb_prover.ts +22 -32
- package/src/test/delay_values.ts +2 -2
- package/src/test/test_circuit_prover.ts +10 -13
- package/src/verification_key/verification_key_data.ts +0 -25
- package/src/verifier/bb_verifier.ts +1 -5
- package/src/verifier/queued_chonk_verifier.ts +9 -40
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { AVM_V2_VERIFICATION_KEY_LENGTH_IN_FIELDS_PADDED } from '@aztec/constants';
|
|
2
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
2
|
import { BufferReader } from '@aztec/foundation/serialize';
|
|
4
3
|
import { VerificationKeyAsFields, VerificationKeyData } from '@aztec/stdlib/vks';
|
|
5
|
-
import { strict as assert } from 'assert';
|
|
6
4
|
import { promises as fs } from 'fs';
|
|
7
5
|
import * as path from 'path';
|
|
8
6
|
import { VK_FILENAME } from '../bb/execute.js';
|
|
@@ -19,20 +17,3 @@ import { VK_FILENAME } from '../bb/execute.js';
|
|
|
19
17
|
const vkAsFields = await VerificationKeyAsFields.fromKey(fields);
|
|
20
18
|
return new VerificationKeyData(vkAsFields, rawBinary);
|
|
21
19
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Reads the verification key data stored in a binary file at the specified directory location and parses into a VerificationKeyData.
|
|
24
|
-
* We do not assume any JSON file available but only the binary version, contrary to the above extractVkData() method.
|
|
25
|
-
* @param vkDirectoryPath - The directory containing the verification key binary data file.
|
|
26
|
-
* @returns The verification key data
|
|
27
|
-
*/ export async function extractAvmVkData(vkDirectoryPath) {
|
|
28
|
-
const rawBinary = await fs.readFile(path.join(vkDirectoryPath, VK_FILENAME));
|
|
29
|
-
const numFields = rawBinary.length / Fr.SIZE_IN_BYTES;
|
|
30
|
-
assert(numFields <= AVM_V2_VERIFICATION_KEY_LENGTH_IN_FIELDS_PADDED, 'Invalid AVM verification key length');
|
|
31
|
-
const reader = BufferReader.asReader(rawBinary);
|
|
32
|
-
const fieldsArray = reader.readArray(numFields, Fr);
|
|
33
|
-
const fieldsArrayPadded = fieldsArray.concat(Array(AVM_V2_VERIFICATION_KEY_LENGTH_IN_FIELDS_PADDED - fieldsArray.length).fill(new Fr(0)));
|
|
34
|
-
const vkAsFields = await VerificationKeyAsFields.fromKey(fieldsArrayPadded);
|
|
35
|
-
// TODO(#16644): We should have a different type for AVM verification keys since we don't have circuit size or num public inputs in AVM VKs.
|
|
36
|
-
const vk = new VerificationKeyData(vkAsFields, rawBinary);
|
|
37
|
-
return vk;
|
|
38
|
-
}
|
|
@@ -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=data:application/json;base64,
|
|
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,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,
|
|
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"}
|
|
@@ -67,16 +67,13 @@ export class BBCircuitVerifier {
|
|
|
67
67
|
const circuit = tx.data.forPublic ? 'HidingKernelToPublic' : 'HidingKernelToRollup';
|
|
68
68
|
// Block below is almost copy-pasted from verifyProofForCircuit
|
|
69
69
|
const operation = async (bbWorkingDirectory)=>{
|
|
70
|
-
const logFunction = (message)=>{
|
|
71
|
-
this.logger.debug(`${proofType} BB out - ${message}`);
|
|
72
|
-
};
|
|
73
70
|
const proofPath = path.join(bbWorkingDirectory, PROOF_FILENAME);
|
|
74
71
|
await writeChonkProofToPath(tx.chonkProof.attachPublicInputs(tx.data.publicInputs().toFields()), proofPath);
|
|
75
72
|
const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
|
|
76
73
|
const verificationKey = this.getVerificationKeyData(circuit);
|
|
77
74
|
await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
|
|
78
75
|
const timer = new Timer();
|
|
79
|
-
const result = await verifyChonkProof(this.config.bbBinaryPath, proofPath, verificationKeyPath,
|
|
76
|
+
const result = await verifyChonkProof(this.config.bbBinaryPath, proofPath, verificationKeyPath, this.logger, this.config.bbIVCConcurrency);
|
|
80
77
|
verificationDuration = timer.ms();
|
|
81
78
|
if (result.status === BB_RESULT.FAILURE) {
|
|
82
79
|
const errorMessage = `Failed to verify ${proofType} proof for ${circuit}!`;
|
|
@@ -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=data:application/json;base64,
|
|
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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/bb-prover",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.c949de6bc",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -69,32 +69,32 @@
|
|
|
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.c949de6bc",
|
|
73
|
+
"@aztec/constants": "0.0.1-commit.c949de6bc",
|
|
74
|
+
"@aztec/foundation": "0.0.1-commit.c949de6bc",
|
|
75
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.c949de6bc",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.c949de6bc",
|
|
77
|
+
"@aztec/noir-types": "0.0.1-commit.c949de6bc",
|
|
78
|
+
"@aztec/simulator": "0.0.1-commit.c949de6bc",
|
|
79
|
+
"@aztec/stdlib": "0.0.1-commit.c949de6bc",
|
|
80
|
+
"@aztec/telemetry-client": "0.0.1-commit.c949de6bc",
|
|
81
|
+
"@aztec/world-state": "0.0.1-commit.c949de6bc",
|
|
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.c949de6bc",
|
|
89
|
+
"@aztec/kv-store": "0.0.1-commit.c949de6bc",
|
|
90
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.c949de6bc",
|
|
91
|
+
"@aztec/noir-test-contracts.js": "0.0.1-commit.c949de6bc",
|
|
92
|
+
"@aztec/protocol-contracts": "0.0.1-commit.c949de6bc",
|
|
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.
|
|
97
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
98
98
|
"jest": "^30.0.0",
|
|
99
99
|
"jest-mock-extended": "^4.0.0",
|
|
100
100
|
"ts-node": "^10.9.1",
|
|
@@ -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
|
|
@@ -193,14 +190,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
193
190
|
return proofRes;
|
|
194
191
|
}
|
|
195
192
|
|
|
196
|
-
return await verifyAvmProof(
|
|
197
|
-
BB_PATH,
|
|
198
|
-
this.bbWorkingDirectory,
|
|
199
|
-
proofRes.proofPath!,
|
|
200
|
-
publicInputs,
|
|
201
|
-
path.join(proofRes.vkDirectoryPath!, VK_FILENAME),
|
|
202
|
-
this.logger,
|
|
203
|
-
);
|
|
193
|
+
return await verifyAvmProof(BB_PATH, this.bbWorkingDirectory, proofRes.proofPath!, publicInputs, this.logger);
|
|
204
194
|
}
|
|
205
195
|
|
|
206
196
|
public async proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx') {
|
package/src/bb/execute.ts
CHANGED
|
@@ -52,6 +52,8 @@ type BBExecResult = {
|
|
|
52
52
|
signal: string | undefined;
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
export const DEFAULT_BB_VERIFY_CONCURRENCY = 4;
|
|
56
|
+
|
|
55
57
|
/**
|
|
56
58
|
* Invokes the Barretenberg binary with the provided command and args
|
|
57
59
|
* @param pathToBB - The path to the BB binary
|
|
@@ -353,7 +355,7 @@ export async function generateAvmProof(
|
|
|
353
355
|
durationMs: duration,
|
|
354
356
|
proofPath: join(outputPath, PROOF_FILENAME),
|
|
355
357
|
pkPath: undefined,
|
|
356
|
-
vkDirectoryPath:
|
|
358
|
+
vkDirectoryPath: undefined, // AVM VK is fixed in the binary.
|
|
357
359
|
};
|
|
358
360
|
}
|
|
359
361
|
// Not a great error message here but it is difficult to decipher what comes from bb
|
|
@@ -372,7 +374,7 @@ export async function generateAvmProof(
|
|
|
372
374
|
* @param pathToBB - The full path to the bb binary
|
|
373
375
|
* @param proofFullPath - The full path to the proof to be verified
|
|
374
376
|
* @param verificationKeyPath - The full path to the circuit verification key
|
|
375
|
-
* @param
|
|
377
|
+
* @param logger - A logger
|
|
376
378
|
* @returns An object containing a result indication and duration taken
|
|
377
379
|
*/
|
|
378
380
|
export async function verifyProof(
|
|
@@ -380,16 +382,32 @@ export async function verifyProof(
|
|
|
380
382
|
proofFullPath: string,
|
|
381
383
|
verificationKeyPath: string,
|
|
382
384
|
ultraHonkFlavor: UltraHonkFlavor,
|
|
383
|
-
|
|
385
|
+
logger: Logger,
|
|
384
386
|
): Promise<BBFailure | BBSuccess> {
|
|
385
|
-
|
|
386
|
-
|
|
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',
|
|
387
395
|
proofFullPath,
|
|
396
|
+
'-k',
|
|
388
397
|
verificationKeyPath,
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
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);
|
|
393
411
|
}
|
|
394
412
|
|
|
395
413
|
export async function verifyAvmProof(
|
|
@@ -397,7 +415,6 @@ export async function verifyAvmProof(
|
|
|
397
415
|
workingDirectory: string,
|
|
398
416
|
proofFullPath: string,
|
|
399
417
|
publicInputs: AvmCircuitPublicInputs,
|
|
400
|
-
verificationKeyPath: string,
|
|
401
418
|
logger: Logger,
|
|
402
419
|
): Promise<BBFailure | BBSuccess> {
|
|
403
420
|
const inputsBuffer = publicInputs.serializeWithMessagePack();
|
|
@@ -414,10 +431,8 @@ export async function verifyAvmProof(
|
|
|
414
431
|
return { status: BB_RESULT.FAILURE, reason: `Could not write avm inputs to ${avmInputsPath}` };
|
|
415
432
|
}
|
|
416
433
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
avmInputsPath,
|
|
420
|
-
]);
|
|
434
|
+
const args = ['-p', proofFullPath, '--avm-public-inputs', avmInputsPath];
|
|
435
|
+
return await verifyProofInternal(pathToBB, 'avm_verify', args, logger);
|
|
421
436
|
}
|
|
422
437
|
|
|
423
438
|
/**
|
|
@@ -425,7 +440,7 @@ export async function verifyAvmProof(
|
|
|
425
440
|
* TODO(#7370) The verification keys should be supplied separately
|
|
426
441
|
* @param pathToBB - The full path to the bb binary
|
|
427
442
|
* @param targetPath - The path to the folder with the proof, accumulator, and verification keys
|
|
428
|
-
* @param
|
|
443
|
+
* @param logger - A logger
|
|
429
444
|
* @param concurrency - The number of threads to use for the verification
|
|
430
445
|
* @returns An object containing a result indication and duration taken
|
|
431
446
|
*/
|
|
@@ -433,7 +448,7 @@ export async function verifyChonkProof(
|
|
|
433
448
|
pathToBB: string,
|
|
434
449
|
proofPath: string,
|
|
435
450
|
keyPath: string,
|
|
436
|
-
|
|
451
|
+
logger: Logger,
|
|
437
452
|
concurrency = 1,
|
|
438
453
|
): Promise<BBFailure | BBSuccess> {
|
|
439
454
|
const binaryPresent = await fs
|
|
@@ -444,43 +459,25 @@ export async function verifyChonkProof(
|
|
|
444
459
|
return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
|
|
445
460
|
}
|
|
446
461
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
const timer = new Timer();
|
|
450
|
-
const command = 'verify';
|
|
451
|
-
|
|
452
|
-
const result = await executeBB(pathToBB, command, args, log, concurrency);
|
|
453
|
-
const duration = timer.ms();
|
|
454
|
-
if (result.status == BB_RESULT.SUCCESS) {
|
|
455
|
-
return { status: BB_RESULT.SUCCESS, durationMs: duration };
|
|
456
|
-
}
|
|
457
|
-
// Not a great error message here but it is difficult to decipher what comes from bb
|
|
458
|
-
return {
|
|
459
|
-
status: BB_RESULT.FAILURE,
|
|
460
|
-
reason: `Failed to verify proof. Exit code ${result.exitCode}. Signal ${result.signal}.`,
|
|
461
|
-
retry: !!result.signal,
|
|
462
|
-
};
|
|
463
|
-
} catch (error) {
|
|
464
|
-
return { status: BB_RESULT.FAILURE, reason: `${error}` };
|
|
465
|
-
}
|
|
462
|
+
const args = ['--scheme', 'chonk', '-p', proofPath, '-k', keyPath, '-v'];
|
|
463
|
+
return await verifyProofInternal(pathToBB, 'verify', args, logger, concurrency);
|
|
466
464
|
}
|
|
467
465
|
|
|
468
466
|
/**
|
|
469
467
|
* Used for verifying proofs with BB
|
|
470
468
|
* @param pathToBB - The full path to the bb binary
|
|
471
|
-
* @param proofFullPath - The full path to the proof to be verified
|
|
472
|
-
* @param verificationKeyPath - The full path to the circuit verification key
|
|
473
469
|
* @param command - The BB command to execute (verify/avm_verify)
|
|
474
|
-
* @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
|
|
475
473
|
* @returns An object containing a result indication and duration taken
|
|
476
474
|
*/
|
|
477
475
|
async function verifyProofInternal(
|
|
478
476
|
pathToBB: string,
|
|
479
|
-
proofFullPath: string,
|
|
480
|
-
verificationKeyPath: string,
|
|
481
477
|
command: 'verify' | 'avm_verify',
|
|
478
|
+
args: string[],
|
|
482
479
|
logger: Logger,
|
|
483
|
-
|
|
480
|
+
concurrency?: number,
|
|
484
481
|
): Promise<BBFailure | BBSuccess> {
|
|
485
482
|
const binaryPresent = await fs
|
|
486
483
|
.access(pathToBB, fs.constants.R_OK)
|
|
@@ -495,28 +492,12 @@ async function verifyProofInternal(
|
|
|
495
492
|
};
|
|
496
493
|
|
|
497
494
|
try {
|
|
498
|
-
let args;
|
|
499
|
-
|
|
500
|
-
if (command == 'verify') {
|
|
501
|
-
// Specify the public inputs path in the case of UH verification.
|
|
502
|
-
// Take proofFullPath and remove the suffix past the / to get the directory.
|
|
503
|
-
const proofDir = proofFullPath.substring(0, proofFullPath.lastIndexOf('/'));
|
|
504
|
-
const publicInputsFullPath = join(proofDir, '/public_inputs');
|
|
505
|
-
logger.debug(`public inputs path: ${publicInputsFullPath}`);
|
|
506
|
-
|
|
507
|
-
args = ['-p', proofFullPath, '-k', verificationKeyPath, '-i', publicInputsFullPath, '--disable_zk', ...extraArgs];
|
|
508
|
-
} else {
|
|
509
|
-
args = ['-p', proofFullPath, '-k', verificationKeyPath, ...extraArgs];
|
|
510
|
-
}
|
|
511
|
-
|
|
512
495
|
const loggingArg =
|
|
513
496
|
logger.level === 'debug' || logger.level === 'trace' ? '-d' : logger.level === 'verbose' ? '-v' : '';
|
|
514
|
-
|
|
515
|
-
args.push(loggingArg);
|
|
516
|
-
}
|
|
497
|
+
const finalArgs = loggingArg !== '' ? [...args, loggingArg] : args;
|
|
517
498
|
|
|
518
499
|
const timer = new Timer();
|
|
519
|
-
const result = await executeBB(pathToBB, command,
|
|
500
|
+
const result = await executeBB(pathToBB, command, finalArgs, logFunction, concurrency);
|
|
520
501
|
const duration = timer.ms();
|
|
521
502
|
if (result.status == BB_RESULT.SUCCESS) {
|
|
522
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
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AztecClientBackend, Barretenberg } from '@aztec/bb.js';
|
|
2
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
1
|
+
import { AztecClientBackend, type BackendOptions, Barretenberg } from '@aztec/bb.js';
|
|
2
|
+
import { type LogLevel, type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
4
|
import { serializeWitness } from '@aztec/noir-noirc_abi';
|
|
5
5
|
import {
|
|
@@ -45,12 +45,17 @@ import type { CircuitSimulationStats, CircuitWitnessGenerationStats } from '@azt
|
|
|
45
45
|
|
|
46
46
|
import { ungzip } from 'pako';
|
|
47
47
|
|
|
48
|
+
export type BBPrivateKernelProverOptions = Omit<BackendOptions, 'logger'> & { logger?: Logger };
|
|
48
49
|
export abstract class BBPrivateKernelProver implements PrivateKernelProver {
|
|
50
|
+
private log: Logger;
|
|
51
|
+
|
|
49
52
|
constructor(
|
|
50
53
|
protected artifactProvider: ArtifactProvider,
|
|
51
54
|
protected simulator: CircuitSimulator,
|
|
52
|
-
protected
|
|
53
|
-
) {
|
|
55
|
+
protected options: BBPrivateKernelProverOptions = {},
|
|
56
|
+
) {
|
|
57
|
+
this.log = options.logger || createLogger('bb-prover:private-kernel');
|
|
58
|
+
}
|
|
54
59
|
|
|
55
60
|
public async generateInitOutput(
|
|
56
61
|
inputs: PrivateKernelInitCircuitPrivateInputs,
|
|
@@ -271,9 +276,14 @@ export abstract class BBPrivateKernelProver implements PrivateKernelProver {
|
|
|
271
276
|
public async createChonkProof(executionSteps: PrivateExecutionStep[]): Promise<ChonkProofWithPublicInputs> {
|
|
272
277
|
const timer = new Timer();
|
|
273
278
|
this.log.info(`Generating ClientIVC proof...`);
|
|
279
|
+
const barretenberg = await Barretenberg.initSingleton({
|
|
280
|
+
...this.options,
|
|
281
|
+
logger: this.options.logger?.verbose,
|
|
282
|
+
});
|
|
274
283
|
const backend = new AztecClientBackend(
|
|
275
284
|
executionSteps.map(step => ungzip(step.bytecode)),
|
|
276
|
-
|
|
285
|
+
barretenberg,
|
|
286
|
+
executionSteps.map(step => step.functionName),
|
|
277
287
|
);
|
|
278
288
|
|
|
279
289
|
const [proof] = await backend.prove(
|
|
@@ -290,7 +300,11 @@ export abstract class BBPrivateKernelProver implements PrivateKernelProver {
|
|
|
290
300
|
|
|
291
301
|
public async computeGateCountForCircuit(_bytecode: Buffer, _circuitName: string): Promise<number> {
|
|
292
302
|
// Note we do not pass the vk to the backend. This is unneeded for gate counts.
|
|
293
|
-
const
|
|
303
|
+
const barretenberg = await Barretenberg.initSingleton({
|
|
304
|
+
...this.options,
|
|
305
|
+
logger: this.options.logger?.[(process.env.LOG_LEVEL as LogLevel) || 'verbose'],
|
|
306
|
+
});
|
|
307
|
+
const backend = new AztecClientBackend([ungzip(_bytecode)], barretenberg, [_circuitName]);
|
|
294
308
|
const gateCount = await backend.gates();
|
|
295
309
|
return gateCount[0];
|
|
296
310
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
2
1
|
import { BundleArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/bundle';
|
|
3
2
|
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
4
3
|
|
|
5
|
-
import { BBPrivateKernelProver } from './bb_private_kernel_prover.js';
|
|
4
|
+
import { BBPrivateKernelProver, type BBPrivateKernelProverOptions } from './bb_private_kernel_prover.js';
|
|
6
5
|
|
|
7
6
|
export class BBBundlePrivateKernelProver extends BBPrivateKernelProver {
|
|
8
|
-
constructor(simulator: CircuitSimulator,
|
|
9
|
-
super(new BundleArtifactProvider(), simulator,
|
|
7
|
+
constructor(simulator: CircuitSimulator, options: BBPrivateKernelProverOptions = {}) {
|
|
8
|
+
super(new BundleArtifactProvider(), simulator, options);
|
|
10
9
|
}
|
|
11
10
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
2
1
|
import { LazyArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/lazy';
|
|
3
2
|
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
4
3
|
|
|
5
|
-
import { BBPrivateKernelProver } from './bb_private_kernel_prover.js';
|
|
4
|
+
import { BBPrivateKernelProver, type BBPrivateKernelProverOptions } from './bb_private_kernel_prover.js';
|
|
6
5
|
|
|
7
6
|
export class BBLazyPrivateKernelProver extends BBPrivateKernelProver {
|
|
8
|
-
constructor(simulator: CircuitSimulator,
|
|
9
|
-
super(new LazyArtifactProvider(), simulator,
|
|
7
|
+
constructor(simulator: CircuitSimulator, options: BBPrivateKernelProverOptions = {}) {
|
|
8
|
+
super(new LazyArtifactProvider(), simulator, options);
|
|
10
9
|
}
|
|
11
10
|
}
|