@aztec/bb-prover 0.69.1 → 0.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dest/bb/cli.d.ts +3 -0
  2. package/dest/bb/cli.d.ts.map +1 -1
  3. package/dest/bb/cli.js +7 -2
  4. package/dest/bb/execute.d.ts +14 -3
  5. package/dest/bb/execute.d.ts.map +1 -1
  6. package/dest/bb/execute.js +108 -10
  7. package/dest/honk.d.ts +8 -8
  8. package/dest/honk.d.ts.map +1 -1
  9. package/dest/honk.js +2 -7
  10. package/dest/prover/bb_native_private_kernel_prover.d.ts +25 -0
  11. package/dest/prover/bb_native_private_kernel_prover.d.ts.map +1 -0
  12. package/dest/prover/bb_native_private_kernel_prover.js +69 -0
  13. package/dest/prover/bb_private_kernel_prover.d.ts +26 -41
  14. package/dest/prover/bb_private_kernel_prover.d.ts.map +1 -1
  15. package/dest/prover/bb_private_kernel_prover.js +62 -118
  16. package/dest/prover/bb_prover.d.ts +4 -6
  17. package/dest/prover/bb_prover.d.ts.map +1 -1
  18. package/dest/prover/bb_prover.js +13 -34
  19. package/dest/prover/index.d.ts +1 -1
  20. package/dest/prover/index.d.ts.map +1 -1
  21. package/dest/prover/index.js +2 -2
  22. package/dest/stats.d.ts +3 -3
  23. package/dest/stats.d.ts.map +1 -1
  24. package/dest/stats.js +4 -7
  25. package/dest/test/test_avm.d.ts +1 -1
  26. package/dest/test/test_avm.d.ts.map +1 -1
  27. package/dest/test/test_circuit_prover.d.ts +5 -5
  28. package/dest/test/test_circuit_prover.d.ts.map +1 -1
  29. package/dest/test/test_circuit_prover.js +13 -11
  30. package/dest/verifier/bb_verifier.d.ts +6 -6
  31. package/dest/verifier/bb_verifier.d.ts.map +1 -1
  32. package/dest/verifier/bb_verifier.js +5 -8
  33. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts +16 -0
  34. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts.map +1 -0
  35. package/dest/wasm/bb_wasm_private_kernel_prover.js +31 -0
  36. package/dest/wasm/bundle.d.ts +6 -0
  37. package/dest/wasm/bundle.d.ts.map +1 -0
  38. package/dest/wasm/bundle.js +9 -0
  39. package/dest/wasm/lazy.d.ts +6 -0
  40. package/dest/wasm/lazy.d.ts.map +1 -0
  41. package/dest/wasm/lazy.js +9 -0
  42. package/package.json +11 -10
  43. package/src/bb/cli.ts +9 -1
  44. package/src/bb/execute.ts +134 -11
  45. package/src/honk.ts +16 -21
  46. package/src/prover/bb_native_private_kernel_prover.ts +118 -0
  47. package/src/prover/bb_private_kernel_prover.ts +141 -202
  48. package/src/prover/bb_prover.ts +29 -77
  49. package/src/prover/index.ts +1 -1
  50. package/src/stats.ts +6 -11
  51. package/src/test/test_avm.ts +1 -1
  52. package/src/test/test_circuit_prover.ts +26 -41
  53. package/src/verifier/bb_verifier.ts +12 -15
  54. package/src/wasm/bb_wasm_private_kernel_prover.ts +42 -0
  55. package/src/wasm/bundle.ts +11 -0
  56. package/src/wasm/lazy.ts +11 -0
  57. package/dest/wasm/index.d.ts +0 -19
  58. package/dest/wasm/index.d.ts.map +0 -1
  59. package/dest/wasm/index.js +0 -74
  60. package/src/wasm/index.ts +0 -155
@@ -1,7 +1,7 @@
1
1
  import { Tx } from '@aztec/circuit-types';
2
2
  import { runInDirectory } from '@aztec/foundation/fs';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
- import { ProtocolCircuitArtifacts, } from '@aztec/noir-protocol-circuits-types';
4
+ import { ServerCircuitArtifacts } from '@aztec/noir-protocol-circuits-types/server';
5
5
  import { promises as fs } from 'fs';
6
6
  import * as path from 'path';
7
7
  import { BB_RESULT, PROOF_FILENAME, VK_FILENAME, generateContractForCircuit, generateKeyForNoirCircuit, verifyClientIvcProof, verifyProof, } from '../bb/execute.js';
@@ -25,7 +25,7 @@ export class BBCircuitVerifier {
25
25
  return new BBCircuitVerifier(config, keys, logger);
26
26
  }
27
27
  static async generateVerificationKey(circuit, bbPath, workingDirectory, logFn) {
28
- return await generateKeyForNoirCircuit(bbPath, workingDirectory, circuit, ProtocolCircuitArtifacts[circuit], isProtocolArtifactRecursive(circuit), getUltraHonkFlavorForCircuit(circuit), logFn).then(result => {
28
+ return await generateKeyForNoirCircuit(bbPath, workingDirectory, circuit, ServerCircuitArtifacts[circuit], isProtocolArtifactRecursive(circuit), getUltraHonkFlavorForCircuit(circuit), logFn).then(result => {
29
29
  if (result.status === BB_RESULT.FAILURE) {
30
30
  throw new Error(`Failed to created verification key for ${circuit}, ${result.reason}`);
31
31
  }
@@ -49,10 +49,7 @@ export class BBCircuitVerifier {
49
49
  this.logger.debug(`${circuit} Verifying with key: ${verificationKey.keyAsFields.hash.toString()}`);
50
50
  await fs.writeFile(proofFileName, proof.buffer);
51
51
  await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
52
- const logFunction = (message) => {
53
- this.logger.debug(`${circuit} BB out - ${message}`);
54
- };
55
- const result = await verifyProof(this.config.bbBinaryPath, proofFileName, verificationKeyPath, getUltraHonkFlavorForCircuit(circuit), logFunction);
52
+ const result = await verifyProof(this.config.bbBinaryPath, proofFileName, verificationKeyPath, getUltraHonkFlavorForCircuit(circuit), this.logger);
56
53
  if (result.status === BB_RESULT.FAILURE) {
57
54
  const errorMessage = `Failed to verify ${circuit} proof!`;
58
55
  throw new Error(errorMessage);
@@ -67,7 +64,7 @@ export class BBCircuitVerifier {
67
64
  await runInDirectory(this.config.bbWorkingDirectory, operation, this.config.bbSkipCleanup);
68
65
  }
69
66
  async generateSolidityContract(circuit, contractName) {
70
- const result = await generateContractForCircuit(this.config.bbBinaryPath, this.config.bbWorkingDirectory, circuit, ProtocolCircuitArtifacts[circuit], contractName, this.logger.debug);
67
+ const result = await generateContractForCircuit(this.config.bbBinaryPath, this.config.bbWorkingDirectory, circuit, ServerCircuitArtifacts[circuit], contractName, this.logger.debug);
71
68
  if (result.status === BB_RESULT.FAILURE) {
72
69
  throw new Error(`Failed to create verifier contract for ${circuit}, ${result.reason}`);
73
70
  }
@@ -110,4 +107,4 @@ export class BBCircuitVerifier {
110
107
  }
111
108
  }
112
109
  }
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvYmJfdmVyaWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxFQUFFLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUEyQixZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBR0wsd0JBQXdCLEdBQ3pCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUNMLFNBQVMsRUFDVCxjQUFjLEVBQ2QsV0FBVyxFQUNYLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLFdBQVcsR0FDWixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBd0MsNEJBQTRCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLG9DQUFvQyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUU3RSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQ1UsTUFBZ0IsRUFDaEIsbUJBQW1CLElBQUksR0FBRyxFQUFrRCxFQUM1RSxNQUFjO1FBRmQsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTREO1FBQzVFLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDckIsQ0FBQztJQUVHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNyQixNQUFn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
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvYmJfdmVyaWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxFQUFFLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUEyQixZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQU9wRixPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQ0wsU0FBUyxFQUNULGNBQWMsRUFDZCxXQUFXLEVBQ1gsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDcEIsV0FBVyxHQUNaLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUE4Qyw0QkFBNEIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRTdFLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFDVSxNQUFnQixFQUNoQixtQkFBbUIsSUFBSSxHQUFHLEVBQWtELEVBQzVFLE1BQWM7UUFGZCxXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBNEQ7UUFDNUUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNyQixDQUFDO0lBRUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ3JCLE1BQWdC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
@@ -0,0 +1,16 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ import { ClientIvcProof } from '@aztec/circuits.js';
4
+ import { type ArtifactProvider } from '@aztec/noir-protocol-circuits-types/types';
5
+ import { type SimulationProvider } from '@aztec/simulator/client';
6
+ import { type WitnessMap } from '@noir-lang/types';
7
+ import { BBPrivateKernelProver } from '../prover/bb_private_kernel_prover.js';
8
+ export declare abstract class BBWASMPrivateKernelProver extends BBPrivateKernelProver {
9
+ protected artifactProvider: ArtifactProvider;
10
+ protected simulationProvider: SimulationProvider;
11
+ private threads;
12
+ protected log: import("@aztec/foundation/log").Logger;
13
+ constructor(artifactProvider: ArtifactProvider, simulationProvider: SimulationProvider, threads?: number, log?: import("@aztec/foundation/log").Logger);
14
+ createClientIvcProof(acirs: Buffer[], witnessStack: WitnessMap[]): Promise<ClientIvcProof>;
15
+ }
16
+ //# sourceMappingURL=bb_wasm_private_kernel_prover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bb_wasm_private_kernel_prover.d.ts","sourceRoot":"","sources":["../../src/wasm/bb_wasm_private_kernel_prover.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,8BAAsB,yBAA0B,SAAQ,qBAAqB;cAEtD,gBAAgB,EAAE,gBAAgB;cAClC,kBAAkB,EAAE,kBAAkB;IACzD,OAAO,CAAC,OAAO;cACI,GAAG;gBAHH,gBAAgB,EAAE,gBAAgB,EAClC,kBAAkB,EAAE,kBAAkB,EACjD,OAAO,GAAE,MAAU,EACR,GAAG,yCAAiC;IAKnC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;CAkBjH"}
@@ -0,0 +1,31 @@
1
+ import { AztecClientBackend } from '@aztec/bb.js';
2
+ import { ClientIvcProof } from '@aztec/circuits.js';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+ import { Timer } from '@aztec/foundation/timer';
5
+ import { serializeWitness } from '@noir-lang/noirc_abi';
6
+ import { ungzip } from 'pako';
7
+ import { BBPrivateKernelProver } from '../prover/bb_private_kernel_prover.js';
8
+ export class BBWASMPrivateKernelProver extends BBPrivateKernelProver {
9
+ constructor(artifactProvider, simulationProvider, threads = 1, log = createLogger('bb-prover:wasm')) {
10
+ super(artifactProvider, simulationProvider, log);
11
+ this.artifactProvider = artifactProvider;
12
+ this.simulationProvider = simulationProvider;
13
+ this.threads = threads;
14
+ this.log = log;
15
+ }
16
+ async createClientIvcProof(acirs, witnessStack) {
17
+ const timer = new Timer();
18
+ this.log.info(`Generating ClientIVC proof...`);
19
+ const backend = new AztecClientBackend(acirs.map(acir => ungzip(acir)), { threads: this.threads });
20
+ const [proof, vk] = await backend.prove(witnessStack.map(witnessMap => ungzip(serializeWitness(witnessMap))));
21
+ await backend.destroy();
22
+ this.log.info(`Generated ClientIVC proof`, {
23
+ eventName: 'client-ivc-proof-generation',
24
+ duration: timer.ms(),
25
+ proofSize: proof.length,
26
+ vkSize: vk.length,
27
+ });
28
+ return new ClientIvcProof(Buffer.from(proof), Buffer.from(vk));
29
+ }
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfd2FzbV9wcml2YXRlX2tlcm5lbF9wcm92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FzbS9iYl93YXNtX3ByaXZhdGVfa2VybmVsX3Byb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU5RSxNQUFNLE9BQWdCLHlCQUEwQixTQUFRLHFCQUFxQjtJQUMzRSxZQUNxQixnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ2pELFVBQWtCLENBQUMsRUFDUixNQUFNLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2RCxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFMOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ2pELFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDUixRQUFHLEdBQUgsR0FBRyxDQUFpQztJQUd6RCxDQUFDO0lBRWUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQWUsRUFBRSxZQUEwQjtRQUNwRixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsQ0FDcEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMvQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQzFCLENBQUM7UUFFRixNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3pDLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDcEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3ZCLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTTtTQUNsQixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDRiJ9
@@ -0,0 +1,6 @@
1
+ import { type SimulationProvider } from '@aztec/simulator/client';
2
+ import { BBWASMPrivateKernelProver } from './bb_wasm_private_kernel_prover.js';
3
+ export declare class BBWASMBundlePrivateKernelProver extends BBWASMPrivateKernelProver {
4
+ constructor(simulationProvider: SimulationProvider, threads?: number, log?: import("@aztec/foundation/log").Logger);
5
+ }
6
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/wasm/bundle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,qBAAa,+BAAgC,SAAQ,yBAAyB;gBAChE,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,SAAI,EAAE,GAAG,yCAAwC;CAG7G"}
@@ -0,0 +1,9 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { BundleArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/bundle';
3
+ import { BBWASMPrivateKernelProver } from './bb_wasm_private_kernel_prover.js';
4
+ export class BBWASMBundlePrivateKernelProver extends BBWASMPrivateKernelProver {
5
+ constructor(simulationProvider, threads = 1, log = createLogger('bb-prover:wasm:bundle')) {
6
+ super(new BundleArtifactProvider(), simulationProvider, threads, log);
7
+ }
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dhc20vYnVuZGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUczRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUvRSxNQUFNLE9BQU8sK0JBQWdDLFNBQVEseUJBQXlCO0lBQzVFLFlBQVksa0JBQXNDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDO1FBQzFHLEtBQUssQ0FBQyxJQUFJLHNCQUFzQixFQUFFLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Q0FDRiJ9
@@ -0,0 +1,6 @@
1
+ import { type SimulationProvider } from '@aztec/simulator/client';
2
+ import { BBWASMPrivateKernelProver } from './bb_wasm_private_kernel_prover.js';
3
+ export declare class BBWASMLazyPrivateKernelProver extends BBWASMPrivateKernelProver {
4
+ constructor(simulationProvider: SimulationProvider, threads?: number, log?: import("@aztec/foundation/log").Logger);
5
+ }
6
+ //# sourceMappingURL=lazy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../src/wasm/lazy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,qBAAa,6BAA8B,SAAQ,yBAAyB;gBAC9D,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,SAAI,EAAE,GAAG,yCAAsC;CAG3G"}
@@ -0,0 +1,9 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { LazyArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/lazy';
3
+ import { BBWASMPrivateKernelProver } from './bb_wasm_private_kernel_prover.js';
4
+ export class BBWASMLazyPrivateKernelProver extends BBWASMPrivateKernelProver {
5
+ constructor(simulationProvider, threads = 1, log = createLogger('bb-prover:wasm:lazy')) {
6
+ super(new LazyArtifactProvider(), simulationProvider, threads, log);
7
+ }
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93YXNtL2xhenkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBR3ZGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRS9FLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSx5QkFBeUI7SUFDMUUsWUFBWSxrQkFBc0MsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxZQUFZLENBQUMscUJBQXFCLENBQUM7UUFDeEcsS0FBSyxDQUFDLElBQUksb0JBQW9CLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNGIn0=
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@aztec/bb-prover",
3
- "version": "0.69.1",
3
+ "version": "0.70.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
7
- "./wasm": "./dest/wasm/index.js",
7
+ "./wasm/bundle": "./dest/wasm/bundle.js",
8
+ "./wasm/lazy": "./dest/wasm/lazy.js",
8
9
  "./prover": "./dest/prover/index.js",
9
10
  "./verifier": "./dest/verifier/index.js",
10
11
  "./test": "./dest/test/index.js",
@@ -66,14 +67,14 @@
66
67
  ]
67
68
  },
68
69
  "dependencies": {
69
- "@aztec/bb.js": "0.69.1",
70
- "@aztec/circuit-types": "0.69.1",
71
- "@aztec/circuits.js": "0.69.1",
72
- "@aztec/foundation": "0.69.1",
73
- "@aztec/noir-protocol-circuits-types": "0.69.1",
74
- "@aztec/simulator": "0.69.1",
75
- "@aztec/telemetry-client": "0.69.1",
76
- "@aztec/world-state": "0.69.1",
70
+ "@aztec/bb.js": "0.70.0",
71
+ "@aztec/circuit-types": "0.70.0",
72
+ "@aztec/circuits.js": "0.70.0",
73
+ "@aztec/foundation": "0.70.0",
74
+ "@aztec/noir-protocol-circuits-types": "0.70.0",
75
+ "@aztec/simulator": "0.70.0",
76
+ "@aztec/telemetry-client": "0.70.0",
77
+ "@aztec/world-state": "0.70.0",
77
78
  "@msgpack/msgpack": "^3.0.0-beta2",
78
79
  "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
79
80
  "@noir-lang/types": "portal:../../noir/packages/types",
package/src/bb/cli.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import { type LogFn } from '@aztec/foundation/log';
2
- import { type ProtocolArtifact, ProtocolCircuitArtifacts } from '@aztec/noir-protocol-circuits-types';
2
+ import { ClientCircuitArtifacts } from '@aztec/noir-protocol-circuits-types/client/bundle';
3
+ import { ServerCircuitArtifacts } from '@aztec/noir-protocol-circuits-types/server';
4
+ import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types/types';
5
+ import { type NoirCompiledCircuit } from '@aztec/types/noir';
3
6
 
4
7
  import { Command } from 'commander';
5
8
  import { promises as fs } from 'fs';
@@ -8,6 +11,11 @@ import { generateContractForCircuit, generateKeyForNoirCircuit } from './execute
8
11
 
9
12
  const { BB_WORKING_DIRECTORY, BB_BINARY_PATH } = process.env;
10
13
 
14
+ export const ProtocolCircuitArtifacts: Record<ProtocolArtifact, NoirCompiledCircuit> = {
15
+ ...ClientCircuitArtifacts,
16
+ ...ServerCircuitArtifacts,
17
+ };
18
+
11
19
  /**
12
20
  * Returns commander program that defines the CLI.
13
21
  * @param log - Console logger.
package/src/bb/execute.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type AvmCircuitInputs } from '@aztec/circuits.js';
1
+ import { type AvmCircuitInputs, serializeWithMessagePack } from '@aztec/circuits.js';
2
2
  import { sha256 } from '@aztec/foundation/crypto';
3
3
  import { type LogFn, type Logger } from '@aztec/foundation/log';
4
4
  import { Timer } from '@aztec/foundation/timer';
@@ -75,7 +75,7 @@ export function executeBB(
75
75
  // spawn the bb process
76
76
  const { HARDWARE_CONCURRENCY: _, ...envWithoutConcurrency } = process.env;
77
77
  const env = process.env.HARDWARE_CONCURRENCY ? process.env : envWithoutConcurrency;
78
- logger(`Executing BB with: ${command} ${args.join(' ')}`);
78
+ logger(`Executing BB with: ${pathToBB} ${command} ${args.join(' ')}`);
79
79
  const bb = proc.spawn(pathToBB, [command, ...args], {
80
80
  env,
81
81
  });
@@ -497,6 +497,86 @@ export async function generateTubeProof(
497
497
  * It is assumed that the working directory is a temporary and/or random directory used solely for generating this proof.
498
498
  * @param pathToBB - The full path to the bb binary
499
499
  * @param workingDirectory - A working directory for use by bb
500
+ * @param input - The inputs for the public function to be proven
501
+ * @param log - A logging function
502
+ * @returns An object containing a result indication, the location of the proof and the duration taken
503
+ */
504
+ export async function generateAvmProofV2(
505
+ pathToBB: string,
506
+ workingDirectory: string,
507
+ input: AvmCircuitInputs,
508
+ logger: Logger,
509
+ ): Promise<BBFailure | BBSuccess> {
510
+ // Check that the working directory exists
511
+ try {
512
+ await fs.access(workingDirectory);
513
+ } catch (error) {
514
+ return { status: BB_RESULT.FAILURE, reason: `Working directory ${workingDirectory} does not exist` };
515
+ }
516
+
517
+ // The proof is written to e.g. /workingDirectory/proof
518
+ const outputPath = workingDirectory;
519
+
520
+ const filePresent = async (file: string) =>
521
+ await fs
522
+ .access(file, fs.constants.R_OK)
523
+ .then(_ => true)
524
+ .catch(_ => false);
525
+
526
+ const binaryPresent = await filePresent(pathToBB);
527
+ if (!binaryPresent) {
528
+ return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
529
+ }
530
+
531
+ const inputsBuffer = input.serializeForAvm2();
532
+
533
+ try {
534
+ // Write the inputs to the working directory.
535
+ const avmInputsPath = join(workingDirectory, 'avm_inputs.bin');
536
+ await fs.writeFile(avmInputsPath, inputsBuffer);
537
+ if (!filePresent(avmInputsPath)) {
538
+ return { status: BB_RESULT.FAILURE, reason: `Could not write avm inputs to ${avmInputsPath}` };
539
+ }
540
+
541
+ const args = [
542
+ '--avm-inputs',
543
+ avmInputsPath,
544
+ '-o',
545
+ outputPath,
546
+ logger.level === 'debug' || logger.level === 'trace' ? '-d' : logger.level === 'verbose' ? '-v' : '',
547
+ ];
548
+ const timer = new Timer();
549
+ const logFunction = (message: string) => {
550
+ logger.verbose(`AvmCircuit (prove) BB out - ${message}`);
551
+ };
552
+ const result = await executeBB(pathToBB, 'avm2_prove', args, logFunction);
553
+ const duration = timer.ms();
554
+
555
+ if (result.status == BB_RESULT.SUCCESS) {
556
+ return {
557
+ status: BB_RESULT.SUCCESS,
558
+ durationMs: duration,
559
+ proofPath: join(outputPath, PROOF_FILENAME),
560
+ pkPath: undefined,
561
+ vkPath: outputPath,
562
+ };
563
+ }
564
+ // Not a great error message here but it is difficult to decipher what comes from bb
565
+ return {
566
+ status: BB_RESULT.FAILURE,
567
+ reason: `Failed to generate proof. Exit code ${result.exitCode}. Signal ${result.signal}.`,
568
+ retry: !!result.signal,
569
+ };
570
+ } catch (error) {
571
+ return { status: BB_RESULT.FAILURE, reason: `${error}` };
572
+ }
573
+ }
574
+
575
+ /**
576
+ * Used for generating AVM proofs (or doing check-circuit).
577
+ * It is assumed that the working directory is a temporary and/or random directory used solely for generating this proof.
578
+ * @param pathToBB - The full path to the bb binary
579
+ * @param workingDirectory - A working directory for use by bb
500
580
  * @param bytecode - The AVM bytecode for the public function to be proven (expected to be decompressed)
501
581
  * @param log - A logging function
502
582
  * @returns An object containing a result indication, the location of the proof and the duration taken
@@ -506,6 +586,7 @@ export async function generateAvmProof(
506
586
  workingDirectory: string,
507
587
  input: AvmCircuitInputs,
508
588
  logger: Logger,
589
+ checkCircuitOnly: boolean = false,
509
590
  ): Promise<BBFailure | BBSuccess> {
510
591
  // Check that the working directory exists
511
592
  try {
@@ -553,12 +634,14 @@ export async function generateAvmProof(
553
634
  '-o',
554
635
  outputPath,
555
636
  logger.level === 'debug' || logger.level === 'trace' ? '-d' : logger.level === 'verbose' ? '-v' : '',
637
+ checkCircuitOnly ? '--check-circuit-only' : '',
556
638
  ];
557
639
  const timer = new Timer();
640
+ const cmd = checkCircuitOnly ? 'check_circuit' : 'prove';
558
641
  const logFunction = (message: string) => {
559
- logger.verbose(`AvmCircuit (prove) BB out - ${message}`);
642
+ logger.verbose(`AvmCircuit (${cmd}) BB out - ${message}`);
560
643
  };
561
- const result = await executeBB(pathToBB, 'avm_prove', args, logFunction);
644
+ const result = await executeBB(pathToBB, `avm_${cmd}`, args, logFunction);
562
645
  const duration = timer.ms();
563
646
 
564
647
  if (result.status == BB_RESULT.SUCCESS) {
@@ -594,7 +677,7 @@ export async function verifyProof(
594
677
  proofFullPath: string,
595
678
  verificationKeyPath: string,
596
679
  ultraHonkFlavor: UltraHonkFlavor,
597
- log: LogFn,
680
+ log: Logger,
598
681
  ): Promise<BBFailure | BBSuccess> {
599
682
  return await verifyProofInternal(pathToBB, proofFullPath, verificationKeyPath, `verify_${ultraHonkFlavor}`, log);
600
683
  }
@@ -611,9 +694,37 @@ export async function verifyAvmProof(
611
694
  pathToBB: string,
612
695
  proofFullPath: string,
613
696
  verificationKeyPath: string,
614
- log: LogFn,
697
+ logger: Logger,
615
698
  ): Promise<BBFailure | BBSuccess> {
616
- return await verifyProofInternal(pathToBB, proofFullPath, verificationKeyPath, 'avm_verify', log);
699
+ return await verifyProofInternal(pathToBB, proofFullPath, verificationKeyPath, 'avm_verify', logger);
700
+ }
701
+
702
+ export async function verifyAvmProofV2(
703
+ pathToBB: string,
704
+ workingDirectory: string,
705
+ proofFullPath: string,
706
+ publicInputs: any,
707
+ verificationKeyPath: string,
708
+ logger: Logger,
709
+ ): Promise<BBFailure | BBSuccess> {
710
+ const inputsBuffer = serializeWithMessagePack(publicInputs);
711
+
712
+ // Write the inputs to the working directory.
713
+ const filePresent = async (file: string) =>
714
+ await fs
715
+ .access(file, fs.constants.R_OK)
716
+ .then(_ => true)
717
+ .catch(_ => false);
718
+ const avmInputsPath = join(workingDirectory, 'avm_public_inputs.bin');
719
+ await fs.writeFile(avmInputsPath, inputsBuffer);
720
+ if (!filePresent(avmInputsPath)) {
721
+ return { status: BB_RESULT.FAILURE, reason: `Could not write avm inputs to ${avmInputsPath}` };
722
+ }
723
+
724
+ return await verifyProofInternal(pathToBB, proofFullPath, verificationKeyPath, 'avm2_verify', logger, [
725
+ '--avm-public-inputs',
726
+ avmInputsPath,
727
+ ]);
617
728
  }
618
729
 
619
730
  /**
@@ -670,8 +781,9 @@ async function verifyProofInternal(
670
781
  pathToBB: string,
671
782
  proofFullPath: string,
672
783
  verificationKeyPath: string,
673
- command: 'verify_ultra_honk' | 'verify_ultra_rollup_honk' | 'verify_ultra_keccak_honk' | 'avm_verify',
674
- log: LogFn,
784
+ command: 'verify_ultra_honk' | 'verify_ultra_rollup_honk' | 'verify_ultra_keccak_honk' | 'avm_verify' | 'avm2_verify',
785
+ logger: Logger,
786
+ extraArgs: string[] = [],
675
787
  ): Promise<BBFailure | BBSuccess> {
676
788
  const binaryPresent = await fs
677
789
  .access(pathToBB, fs.constants.R_OK)
@@ -681,10 +793,21 @@ async function verifyProofInternal(
681
793
  return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
682
794
  }
683
795
 
796
+ const logFunction = (message: string) => {
797
+ logger.verbose(`AvmCircuit (verify) BB out - ${message}`);
798
+ };
799
+
684
800
  try {
685
- const args = ['-p', proofFullPath, '-k', verificationKeyPath];
801
+ const args = [
802
+ '-p',
803
+ proofFullPath,
804
+ '-k',
805
+ verificationKeyPath,
806
+ logger.level === 'debug' || logger.level === 'trace' ? '-d' : logger.level === 'verbose' ? '-v' : '',
807
+ ...extraArgs,
808
+ ];
686
809
  const timer = new Timer();
687
- const result = await executeBB(pathToBB, command, args, log);
810
+ const result = await executeBB(pathToBB, command, args, logFunction);
688
811
  const duration = timer.ms();
689
812
  if (result.status == BB_RESULT.SUCCESS) {
690
813
  return { status: BB_RESULT.SUCCESS, durationMs: duration };
package/src/honk.ts CHANGED
@@ -1,35 +1,30 @@
1
- import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
1
+ import { type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types/server';
2
2
 
3
3
  export type UltraHonkFlavor = 'ultra_honk' | 'ultra_keccak_honk' | 'ultra_rollup_honk';
4
4
 
5
- const UltraKeccakHonkCircuits = ['RootRollupArtifact'] as const satisfies ProtocolArtifact[];
6
- const UltraHonkCircuits = [
7
- // 'EmptyNestedArtifact',
8
- // 'PrivateKernelEmptyArtifact',
9
- 'BaseParityArtifact',
10
- 'RootParityArtifact',
11
- ] as const satisfies ProtocolArtifact[];
5
+ const UltraKeccakHonkCircuits = ['RootRollupArtifact'] as const satisfies ServerProtocolArtifact[];
6
+ const UltraHonkCircuits = ['BaseParityArtifact', 'RootParityArtifact'] as const satisfies ServerProtocolArtifact[];
12
7
 
13
- export type UltraKeccakHonkProtocolArtifact = (typeof UltraKeccakHonkCircuits)[number];
14
- export type UltraHonkProtocolArtifact = (typeof UltraHonkCircuits)[number];
15
- export type UltraRollupHonkProtocolArtifact = Exclude<
16
- Exclude<ProtocolArtifact, UltraKeccakHonkProtocolArtifact>,
17
- UltraHonkProtocolArtifact
8
+ export type UltraKeccakHonkServerProtocolArtifact = (typeof UltraKeccakHonkCircuits)[number];
9
+ export type UltraHonkServerProtocolArtifact = (typeof UltraHonkCircuits)[number];
10
+ export type UltraRollupHonkServerProtocolArtifact = Exclude<
11
+ Exclude<ServerProtocolArtifact, UltraKeccakHonkServerProtocolArtifact>,
12
+ UltraHonkServerProtocolArtifact
18
13
  >;
19
14
 
20
- export function getUltraHonkFlavorForCircuit(artifact: UltraKeccakHonkProtocolArtifact): 'ultra_keccak_honk';
21
- export function getUltraHonkFlavorForCircuit(artifact: UltraHonkProtocolArtifact): 'ultra_honk';
22
- export function getUltraHonkFlavorForCircuit(artifact: UltraRollupHonkProtocolArtifact): 'ultra_rollup_honk';
23
- export function getUltraHonkFlavorForCircuit(artifact: ProtocolArtifact): UltraHonkFlavor;
24
- export function getUltraHonkFlavorForCircuit(artifact: ProtocolArtifact): UltraHonkFlavor {
15
+ export function getUltraHonkFlavorForCircuit(artifact: UltraKeccakHonkServerProtocolArtifact): 'ultra_keccak_honk';
16
+ export function getUltraHonkFlavorForCircuit(artifact: UltraHonkServerProtocolArtifact): 'ultra_honk';
17
+ export function getUltraHonkFlavorForCircuit(artifact: UltraRollupHonkServerProtocolArtifact): 'ultra_rollup_honk';
18
+ export function getUltraHonkFlavorForCircuit(artifact: ServerProtocolArtifact): UltraHonkFlavor;
19
+ export function getUltraHonkFlavorForCircuit(artifact: ServerProtocolArtifact): UltraHonkFlavor {
25
20
  if (isUltraKeccakHonkCircuit(artifact)) {
26
21
  return 'ultra_keccak_honk';
27
- } else if (UltraHonkCircuits.includes(artifact as UltraHonkProtocolArtifact)) {
22
+ } else if (UltraHonkCircuits.includes(artifact as UltraHonkServerProtocolArtifact)) {
28
23
  return 'ultra_honk';
29
24
  }
30
25
  return 'ultra_rollup_honk';
31
26
  }
32
27
 
33
- function isUltraKeccakHonkCircuit(artifact: ProtocolArtifact): artifact is UltraKeccakHonkProtocolArtifact {
34
- return UltraKeccakHonkCircuits.includes(artifact as UltraKeccakHonkProtocolArtifact);
28
+ function isUltraKeccakHonkCircuit(artifact: ServerProtocolArtifact): artifact is UltraKeccakHonkServerProtocolArtifact {
29
+ return UltraKeccakHonkCircuits.includes(artifact as UltraKeccakHonkServerProtocolArtifact);
35
30
  }
@@ -0,0 +1,118 @@
1
+ import { type ClientIvcProof } from '@aztec/circuits.js';
2
+ import { runInDirectory } from '@aztec/foundation/fs';
3
+ import { type Logger, createLogger } from '@aztec/foundation/log';
4
+ import { BundleArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/bundle';
5
+ import { type SimulationProvider } from '@aztec/simulator/server';
6
+
7
+ import { encode } from '@msgpack/msgpack';
8
+ import { serializeWitness } from '@noir-lang/noirc_abi';
9
+ import { type WitnessMap } from '@noir-lang/types';
10
+ import { promises as fs } from 'fs';
11
+ import path from 'path';
12
+
13
+ import { BB_RESULT, computeGateCountForCircuit, executeBbClientIvcProof } from '../bb/execute.js';
14
+ import { type BBConfig } from '../config.js';
15
+ import { BBPrivateKernelProver } from './bb_private_kernel_prover.js';
16
+ import { readFromOutputDirectory } from './client_ivc_proof_utils.js';
17
+
18
+ /**
19
+ * This proof creator implementation uses the native bb binary.
20
+ */
21
+ export class BBNativePrivateKernelProver extends BBPrivateKernelProver {
22
+ private constructor(
23
+ private bbBinaryPath: string,
24
+ private bbWorkingDirectory: string,
25
+ private skipCleanup: boolean,
26
+ protected override simulationProvider: SimulationProvider,
27
+ protected override log = createLogger('bb-prover:native'),
28
+ ) {
29
+ super(new BundleArtifactProvider(), simulationProvider, log);
30
+ }
31
+
32
+ public static async new(config: BBConfig, simulationProvider: SimulationProvider, log?: Logger) {
33
+ await fs.mkdir(config.bbWorkingDirectory, { recursive: true });
34
+ return new BBNativePrivateKernelProver(
35
+ config.bbBinaryPath,
36
+ config.bbWorkingDirectory,
37
+ !!config.bbSkipCleanup,
38
+ simulationProvider,
39
+ log,
40
+ );
41
+ }
42
+
43
+ private async _createClientIvcProof(
44
+ directory: string,
45
+ acirs: Buffer[],
46
+ witnessStack: WitnessMap[],
47
+ ): Promise<ClientIvcProof> {
48
+ // TODO(#7371): Longer term we won't use this hacked together msgpack format
49
+ // and instead properly create the bincode serialization from rust
50
+ await fs.writeFile(path.join(directory, 'acir.msgpack'), encode(acirs));
51
+ await fs.writeFile(
52
+ path.join(directory, 'witnesses.msgpack'),
53
+ encode(witnessStack.map(map => serializeWitness(map))),
54
+ );
55
+ const provingResult = await executeBbClientIvcProof(
56
+ this.bbBinaryPath,
57
+ directory,
58
+ path.join(directory, 'acir.msgpack'),
59
+ path.join(directory, 'witnesses.msgpack'),
60
+ this.log.info,
61
+ );
62
+
63
+ if (provingResult.status === BB_RESULT.FAILURE) {
64
+ this.log.error(`Failed to generate client ivc proof`);
65
+ throw new Error(provingResult.reason);
66
+ }
67
+
68
+ const proof = await readFromOutputDirectory(directory);
69
+
70
+ this.log.info(`Generated IVC proof`, {
71
+ duration: provingResult.durationMs,
72
+ eventName: 'circuit-proving',
73
+ });
74
+
75
+ return proof;
76
+ }
77
+
78
+ public override async createClientIvcProof(acirs: Buffer[], witnessStack: WitnessMap[]): Promise<ClientIvcProof> {
79
+ this.log.info(`Generating Client IVC proof`);
80
+ const operation = async (directory: string) => {
81
+ return await this._createClientIvcProof(directory, acirs, witnessStack);
82
+ };
83
+ return await this.runInDirectory(operation);
84
+ }
85
+
86
+ public override async computeGateCountForCircuit(bytecode: Buffer, circuitName: string): Promise<number> {
87
+ const logFunction = (message: string) => {
88
+ this.log.debug(`$bb gates ${circuitName} - ${message}`);
89
+ };
90
+
91
+ const result = await computeGateCountForCircuit(
92
+ this.bbBinaryPath,
93
+ this.bbWorkingDirectory,
94
+ circuitName,
95
+ bytecode,
96
+ 'mega_honk',
97
+ logFunction,
98
+ );
99
+ if (result.status === BB_RESULT.FAILURE) {
100
+ throw new Error(result.reason);
101
+ }
102
+
103
+ return result.circuitSize as number;
104
+ }
105
+
106
+ private runInDirectory<T>(fn: (dir: string) => Promise<T>) {
107
+ const log = this.log;
108
+ return runInDirectory(
109
+ this.bbWorkingDirectory,
110
+ (dir: string) =>
111
+ fn(dir).catch(err => {
112
+ log.error(`Error running operation at ${dir}: ${err}`);
113
+ throw err;
114
+ }),
115
+ this.skipCleanup,
116
+ );
117
+ }
118
+ }