@aztec/bb-prover 0.0.1-commit.fce3e4f → 0.0.1-commit.ffe5b04ea

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.
Files changed (55) hide show
  1. package/dest/avm_proving_tests/avm_proving_tester.d.ts +5 -4
  2. package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
  3. package/dest/avm_proving_tests/avm_proving_tester.js +26 -10
  4. package/dest/bb/execute.d.ts +7 -6
  5. package/dest/bb/execute.d.ts.map +1 -1
  6. package/dest/bb/execute.js +52 -76
  7. package/dest/instrumentation.d.ts +1 -1
  8. package/dest/instrumentation.d.ts.map +1 -1
  9. package/dest/instrumentation.js +21 -43
  10. package/dest/prover/client/bb_private_kernel_prover.d.ts +9 -3
  11. package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
  12. package/dest/prover/client/bb_private_kernel_prover.js +16 -4
  13. package/dest/prover/client/bundle.d.ts +3 -3
  14. package/dest/prover/client/bundle.d.ts.map +1 -1
  15. package/dest/prover/client/bundle.js +2 -3
  16. package/dest/prover/client/lazy.d.ts +3 -3
  17. package/dest/prover/client/lazy.d.ts.map +1 -1
  18. package/dest/prover/client/lazy.js +2 -3
  19. package/dest/prover/proof_utils.js +1 -1
  20. package/dest/prover/server/bb_prover.d.ts +6 -9
  21. package/dest/prover/server/bb_prover.d.ts.map +1 -1
  22. package/dest/prover/server/bb_prover.js +416 -43
  23. package/dest/test/delay_values.d.ts +1 -1
  24. package/dest/test/delay_values.d.ts.map +1 -1
  25. package/dest/test/delay_values.js +28 -26
  26. package/dest/test/index.d.ts +2 -1
  27. package/dest/test/index.d.ts.map +1 -1
  28. package/dest/test/index.js +1 -0
  29. package/dest/test/test_circuit_prover.d.ts +4 -4
  30. package/dest/test/test_circuit_prover.d.ts.map +1 -1
  31. package/dest/test/test_circuit_prover.js +462 -59
  32. package/dest/verification_key/verification_key_data.d.ts +1 -8
  33. package/dest/verification_key/verification_key_data.d.ts.map +1 -1
  34. package/dest/verification_key/verification_key_data.js +1 -20
  35. package/dest/verifier/bb_verifier.d.ts +1 -1
  36. package/dest/verifier/bb_verifier.d.ts.map +1 -1
  37. package/dest/verifier/bb_verifier.js +1 -4
  38. package/dest/verifier/queued_chonk_verifier.d.ts +1 -1
  39. package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -1
  40. package/dest/verifier/queued_chonk_verifier.js +9 -40
  41. package/package.json +19 -19
  42. package/src/avm_proving_tests/avm_proving_tester.ts +31 -19
  43. package/src/bb/execute.ts +41 -60
  44. package/src/instrumentation.ts +20 -43
  45. package/src/prover/client/bb_private_kernel_prover.ts +20 -6
  46. package/src/prover/client/bundle.ts +3 -4
  47. package/src/prover/client/lazy.ts +3 -4
  48. package/src/prover/proof_utils.ts +1 -1
  49. package/src/prover/server/bb_prover.ts +23 -38
  50. package/src/test/delay_values.ts +30 -26
  51. package/src/test/index.ts +1 -0
  52. package/src/test/test_circuit_prover.ts +10 -13
  53. package/src/verification_key/verification_key_data.ts +1 -26
  54. package/src/verifier/bb_verifier.ts +1 -5
  55. 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
- import { Fr } from '@aztec/foundation/fields';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9iYl92ZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUVMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqSCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWE3RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJN0MscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBRW5FLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE1BQU07SUFGaEIsT0FBTyxlQUdIO0lBRUcsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFM0I7SUFFRCxPQUFvQixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQXFDLDhCQU1wRjtJQUVNLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FNNUU7SUFFWSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLEtBQUssaUJBbUMvRTtJQUVZLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQWlEcEU7Q0FDRiJ9
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,CAiDpE;CACF"}
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, logFunction, this.config.bbIVCConcurrency);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkX2Nob25rX3ZlcmlmaWVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvcXVldWVkX2Nob25rX3ZlcmlmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakgsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQU1MLEtBQUssZUFBZSxFQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBSWpDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWdHN0MscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBTW5FLE9BQU8sQ0FBQyxRQUFRO0lBQ2hCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxNQUFNO0lBUGhCLE9BQU8sQ0FBQyxLQUFLLENBQWM7SUFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBcUI7SUFFcEMsWUFDRSxNQUFNLEVBQUUsUUFBUSxFQUNSLFFBQVEsRUFBRSw2QkFBNkIsRUFDdkMsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELE1BQU0seUNBQWtELEVBTWpFO0lBRVksV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBSXBFO0lBRUQsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEI7Q0FDRiJ9
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;AAgG7C,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
+ {"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, ValueType, getTelemetryClient } from '@aztec/telemetry-client';
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
- unit: 'ms',
22
- description: 'Duration to verify chonk proofs',
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
- valueType: ValueType.DOUBLE,
37
- description: 'AVG ivc verification',
38
- unit: 'ms'
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.fce3e4f",
3
+ "version": "0.0.1-commit.ffe5b04ea",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -25,8 +25,8 @@
25
25
  "../package.common.json"
26
26
  ],
27
27
  "scripts": {
28
- "build": "yarn clean && tsgo -b",
29
- "build:dev": "tsgo -b --watch",
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,32 +69,32 @@
69
69
  ]
70
70
  },
71
71
  "dependencies": {
72
- "@aztec/bb.js": "0.0.1-commit.fce3e4f",
73
- "@aztec/constants": "0.0.1-commit.fce3e4f",
74
- "@aztec/foundation": "0.0.1-commit.fce3e4f",
75
- "@aztec/noir-noirc_abi": "0.0.1-commit.fce3e4f",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.fce3e4f",
77
- "@aztec/noir-types": "0.0.1-commit.fce3e4f",
78
- "@aztec/simulator": "0.0.1-commit.fce3e4f",
79
- "@aztec/stdlib": "0.0.1-commit.fce3e4f",
80
- "@aztec/telemetry-client": "0.0.1-commit.fce3e4f",
81
- "@aztec/world-state": "0.0.1-commit.fce3e4f",
72
+ "@aztec/bb.js": "0.0.1-commit.ffe5b04ea",
73
+ "@aztec/constants": "0.0.1-commit.ffe5b04ea",
74
+ "@aztec/foundation": "0.0.1-commit.ffe5b04ea",
75
+ "@aztec/noir-noirc_abi": "0.0.1-commit.ffe5b04ea",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.ffe5b04ea",
77
+ "@aztec/noir-types": "0.0.1-commit.ffe5b04ea",
78
+ "@aztec/simulator": "0.0.1-commit.ffe5b04ea",
79
+ "@aztec/stdlib": "0.0.1-commit.ffe5b04ea",
80
+ "@aztec/telemetry-client": "0.0.1-commit.ffe5b04ea",
81
+ "@aztec/world-state": "0.0.1-commit.ffe5b04ea",
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.fce3e4f",
89
- "@aztec/kv-store": "0.0.1-commit.fce3e4f",
90
- "@aztec/noir-contracts.js": "0.0.1-commit.fce3e4f",
91
- "@aztec/noir-test-contracts.js": "0.0.1-commit.fce3e4f",
92
- "@aztec/protocol-contracts": "0.0.1-commit.fce3e4f",
88
+ "@aztec/ethereum": "0.0.1-commit.ffe5b04ea",
89
+ "@aztec/kv-store": "0.0.1-commit.ffe5b04ea",
90
+ "@aztec/noir-contracts.js": "0.0.1-commit.ffe5b04ea",
91
+ "@aztec/noir-test-contracts.js": "0.0.1-commit.ffe5b04ea",
92
+ "@aztec/protocol-contracts": "0.0.1-commit.ffe5b04ea",
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.20251126.1",
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",
@@ -8,8 +8,9 @@ import {
8
8
  type TestPrivateInsertions,
9
9
  } from '@aztec/simulator/public/fixtures';
10
10
  import type { PublicTxResult } from '@aztec/simulator/server';
11
- import { AvmCircuitInputs, AvmCircuitPublicInputs } from '@aztec/stdlib/avm';
11
+ import { AvmCircuitInputs, AvmCircuitPublicInputs, PublicSimulatorConfig } from '@aztec/stdlib/avm';
12
12
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
13
+ import type { Gas } from '@aztec/stdlib/gas';
13
14
  import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
14
15
  import type { GlobalVariables } from '@aztec/stdlib/tx';
15
16
  import { NativeWorldStateService } from '@aztec/world-state';
@@ -18,14 +19,7 @@ import fs from 'node:fs/promises';
18
19
  import { tmpdir } from 'node:os';
19
20
  import path from 'path';
20
21
 
21
- import {
22
- type BBResult,
23
- type BBSuccess,
24
- BB_RESULT,
25
- VK_FILENAME,
26
- generateAvmProof,
27
- verifyAvmProof,
28
- } from '../bb/execute.js';
22
+ import { type BBResult, type BBSuccess, BB_RESULT, generateAvmProof, verifyAvmProof } from '../bb/execute.js';
29
23
 
30
24
  const BB_PATH = path.resolve('../../barretenberg/cpp/build/bin/bb-avm');
31
25
 
@@ -51,6 +45,10 @@ class InterceptingLogger implements Logger {
51
45
  throw new Error('Not implemented');
52
46
  }
53
47
 
48
+ getBindings() {
49
+ return this.logger.getBindings();
50
+ }
51
+
54
52
  private intercept(level: LogLevel, msg: string, ...args: any[]) {
55
53
  this.logs.push(...msg.split('\n'));
56
54
  // Forward to the wrapped logger
@@ -88,6 +86,16 @@ class InterceptingLogger implements Logger {
88
86
  }
89
87
  }
90
88
 
89
+ // Config with collectHints enabled for proving tests
90
+ const provingConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
91
+ skipFeeEnforcement: false,
92
+ collectCallMetadata: true, // For results.
93
+ collectDebugLogs: false,
94
+ collectHints: true, // Required for proving!
95
+ collectPublicInputs: true, // Required for proving!
96
+ collectStatistics: false,
97
+ });
98
+
91
99
  export class AvmProvingTester extends PublicTxSimulationTester {
92
100
  private bbWorkingDirectory: string = '';
93
101
 
@@ -98,7 +106,8 @@ export class AvmProvingTester extends PublicTxSimulationTester {
98
106
  globals?: GlobalVariables,
99
107
  metrics?: TestExecutorMetrics,
100
108
  ) {
101
- super(merkleTrees, contractDataSource, globals, metrics);
109
+ // simulator factory is undefined because for proving, we use the default C++ simulator
110
+ super(merkleTrees, contractDataSource, globals, metrics, /*simulatorFactory=*/ undefined, provingConfig);
102
111
  }
103
112
 
104
113
  static async new(
@@ -182,14 +191,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
182
191
  return proofRes;
183
192
  }
184
193
 
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
- );
194
+ return await verifyAvmProof(BB_PATH, this.bbWorkingDirectory, proofRes.proofPath!, publicInputs, this.logger);
193
195
  }
194
196
 
195
197
  public async proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx') {
@@ -210,7 +212,9 @@ export class AvmProvingTester extends PublicTxSimulationTester {
210
212
  privateInsertions?: TestPrivateInsertions,
211
213
  txLabel: string = 'unlabeledTx',
212
214
  disableRevertCheck: boolean = false,
215
+ gasLimits?: Gas,
213
216
  ): Promise<PublicTxResult> {
217
+ const simTimer = new Timer();
214
218
  const simRes = await this.simulateTx(
215
219
  sender,
216
220
  setupCalls,
@@ -219,7 +223,10 @@ export class AvmProvingTester extends PublicTxSimulationTester {
219
223
  feePayer,
220
224
  privateInsertions,
221
225
  txLabel,
226
+ gasLimits,
222
227
  );
228
+ const simDuration = simTimer.ms();
229
+ this.logger.info(`Simulation took ${simDuration} ms for tx ${txLabel}`);
223
230
 
224
231
  if (!disableRevertCheck) {
225
232
  expect(simRes.revertCode.isOK()).toBe(expectRevert ? false : true);
@@ -227,7 +234,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
227
234
 
228
235
  const opString = this.checkCircuitOnly ? 'Check circuit' : 'Proving and verification';
229
236
 
230
- const avmCircuitInputs = new AvmCircuitInputs(simRes.hints!, simRes.publicInputs);
237
+ const avmCircuitInputs = new AvmCircuitInputs(simRes.hints!, simRes.publicInputs!);
231
238
  const timer = new Timer();
232
239
  await this.proveVerify(avmCircuitInputs, txLabel);
233
240
  this.logger.info(`${opString} took ${timer.ms()} ms for tx ${txLabel}`);
@@ -243,6 +250,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
243
250
  teardownCall?: TestEnqueuedCall,
244
251
  feePayer?: AztecAddress,
245
252
  privateInsertions?: TestPrivateInsertions,
253
+ gasLimits?: Gas,
246
254
  ) {
247
255
  return await this.simProveVerify(
248
256
  sender,
@@ -254,6 +262,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
254
262
  privateInsertions,
255
263
  txLabel,
256
264
  true,
265
+ gasLimits,
257
266
  );
258
267
  }
259
268
 
@@ -261,6 +270,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
261
270
  appCall: TestEnqueuedCall,
262
271
  expectRevert?: boolean,
263
272
  txLabel: string = 'unlabeledTx',
273
+ gasLimits?: Gas,
264
274
  ) {
265
275
  await this.simProveVerify(
266
276
  /*sender=*/ AztecAddress.fromNumber(42),
@@ -271,6 +281,8 @@ export class AvmProvingTester extends PublicTxSimulationTester {
271
281
  /*feePayer=*/ undefined,
272
282
  /*privateInsertions=*/ undefined,
273
283
  txLabel,
284
+ /*disableRevertCheck=*/ false,
285
+ gasLimits,
274
286
  );
275
287
  }
276
288
  }
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';
@@ -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: outputPath,
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 log - A logging function
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
- log: Logger,
385
+ logger: Logger,
384
386
  ): Promise<BBFailure | BBSuccess> {
385
- return await verifyProofInternal(
386
- pathToBB,
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
- `verify`,
390
- log,
391
- getArgs(ultraHonkFlavor),
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
- return await verifyProofInternal(pathToBB, proofFullPath, verificationKeyPath, 'avm_verify', logger, [
418
- '--avm-public-inputs',
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 log - A logging function
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
- log: LogFn,
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
- try {
448
- const args = ['--scheme', 'chonk', '-p', proofPath, '-k', keyPath, '-v'];
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 log - A logging function
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
- extraArgs: string[] = [],
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
- if (loggingArg !== '') {
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, args, logFunction);
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 };
@@ -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
- const s = typeof timerOrMS === 'number' ? timerOrMS / 1000 : timerOrMS.s();
93
- this[metric].record(s, {
94
- [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
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
  /**