@aztec/bb-prover 0.39.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 (49) hide show
  1. package/dest/bb/cli.d.ts +9 -0
  2. package/dest/bb/cli.d.ts.map +1 -0
  3. package/dest/bb/cli.js +64 -0
  4. package/dest/bb/execute.d.ts +88 -0
  5. package/dest/bb/execute.d.ts.map +1 -0
  6. package/dest/bb/execute.js +288 -0
  7. package/dest/bb/index.d.ts +3 -0
  8. package/dest/bb/index.d.ts.map +1 -0
  9. package/dest/bb/index.js +18 -0
  10. package/dest/index.d.ts +3 -0
  11. package/dest/index.d.ts.map +1 -0
  12. package/dest/index.js +3 -0
  13. package/dest/mappings/mappings.d.ts +12 -0
  14. package/dest/mappings/mappings.d.ts.map +1 -0
  15. package/dest/mappings/mappings.js +22 -0
  16. package/dest/prover/bb_native_proof_creator.d.ts +58 -0
  17. package/dest/prover/bb_native_proof_creator.d.ts.map +1 -0
  18. package/dest/prover/bb_native_proof_creator.js +238 -0
  19. package/dest/prover/bb_prover.d.ts +110 -0
  20. package/dest/prover/bb_prover.d.ts.map +1 -0
  21. package/dest/prover/bb_prover.js +321 -0
  22. package/dest/prover/index.d.ts +3 -0
  23. package/dest/prover/index.d.ts.map +1 -0
  24. package/dest/prover/index.js +3 -0
  25. package/dest/prover/verification_key_data.d.ts +16 -0
  26. package/dest/prover/verification_key_data.d.ts.map +1 -0
  27. package/dest/prover/verification_key_data.js +5 -0
  28. package/dest/stats.d.ts +9 -0
  29. package/dest/stats.d.ts.map +1 -0
  30. package/dest/stats.js +61 -0
  31. package/dest/test/index.d.ts +2 -0
  32. package/dest/test/index.d.ts.map +1 -0
  33. package/dest/test/index.js +2 -0
  34. package/dest/test/test_circuit_prover.d.ts +48 -0
  35. package/dest/test/test_circuit_prover.d.ts.map +1 -0
  36. package/dest/test/test_circuit_prover.js +128 -0
  37. package/package.json +85 -0
  38. package/src/bb/cli.ts +92 -0
  39. package/src/bb/execute.ts +359 -0
  40. package/src/bb/index.ts +23 -0
  41. package/src/index.ts +2 -0
  42. package/src/mappings/mappings.ts +41 -0
  43. package/src/prover/bb_native_proof_creator.ts +382 -0
  44. package/src/prover/bb_prover.ts +557 -0
  45. package/src/prover/index.ts +2 -0
  46. package/src/prover/verification_key_data.ts +16 -0
  47. package/src/stats.ts +82 -0
  48. package/src/test/index.ts +1 -0
  49. package/src/test/test_circuit_prover.ts +268 -0
@@ -0,0 +1,9 @@
1
+ import { type LogFn } from '@aztec/foundation/log';
2
+ import { Command } from 'commander';
3
+ /**
4
+ * Returns commander program that defines the CLI.
5
+ * @param log - Console logger.
6
+ * @returns The CLI.
7
+ */
8
+ export declare function getProgram(log: LogFn): Command;
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bb/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CA4E9C"}
package/dest/bb/cli.js ADDED
@@ -0,0 +1,64 @@
1
+ import { ProtocolCircuitArtifacts } from '@aztec/noir-protocol-circuits-types';
2
+ import { Command } from 'commander';
3
+ import * as fs from 'fs/promises';
4
+ import { generateKeyForNoirCircuit } from './execute.js';
5
+ const { BB_WORKING_DIRECTORY, BB_BINARY_PATH } = process.env;
6
+ /**
7
+ * Returns commander program that defines the CLI.
8
+ * @param log - Console logger.
9
+ * @returns The CLI.
10
+ */
11
+ export function getProgram(log) {
12
+ const program = new Command();
13
+ program.name('bb-cli').description('CLI for interacting with Barretenberg.');
14
+ program
15
+ .command('protocol-circuits')
16
+ .description('Lists the available protocol circuit artifacts')
17
+ .action(() => {
18
+ log(Object.keys(ProtocolCircuitArtifacts).reduce((prev, x) => prev.concat(`\n${x}`)));
19
+ });
20
+ program
21
+ .command('write-pk')
22
+ .description('Generates the proving key for the specified circuit')
23
+ .requiredOption('-w, --working-directory <string>', 'A directory to use for storing input/output files', BB_WORKING_DIRECTORY)
24
+ .requiredOption('-b, --bb-path <string>', 'The path to the BB binary', BB_BINARY_PATH)
25
+ .requiredOption('-c, --circuit <string>', 'The name of a protocol circuit')
26
+ .action(async (options) => {
27
+ const compiledCircuit = ProtocolCircuitArtifacts[options.circuit];
28
+ if (!compiledCircuit) {
29
+ log(`Failed to find circuit ${options.circuit}`);
30
+ return;
31
+ }
32
+ try {
33
+ await fs.access(options.workingDirectory, fs.constants.W_OK);
34
+ }
35
+ catch (error) {
36
+ log(`Working directory does not exist`);
37
+ return;
38
+ }
39
+ await generateKeyForNoirCircuit(options.bbPath, options.workingDirectory, options.circuit, compiledCircuit, 'pk', log);
40
+ });
41
+ program
42
+ .command('write-vk')
43
+ .description('Generates the verification key for the specified circuit')
44
+ .requiredOption('-w, --working-directory <string>', 'A directory to use for storing input/output files', BB_WORKING_DIRECTORY)
45
+ .requiredOption('-b, --bb-path <string>', 'The path to the BB binary', BB_BINARY_PATH)
46
+ .requiredOption('-c, --circuit <string>', 'The name of a protocol circuit')
47
+ .action(async (options) => {
48
+ const compiledCircuit = ProtocolCircuitArtifacts[options.circuit];
49
+ if (!compiledCircuit) {
50
+ log(`Failed to find circuit ${options.circuit}`);
51
+ return;
52
+ }
53
+ try {
54
+ await fs.access(options.workingDirectory, fs.constants.W_OK);
55
+ }
56
+ catch (error) {
57
+ log(`Working directory does not exist`);
58
+ return;
59
+ }
60
+ await generateKeyForNoirCircuit(options.bbPath, options.workingDirectory, options.circuit, compiledCircuit, 'vk', log);
61
+ });
62
+ return program;
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JiL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXlCLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFdEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekQsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFFN0Q7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBVTtJQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRTlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFFN0UsT0FBTztTQUNKLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztTQUM1QixXQUFXLENBQUMsZ0RBQWdELENBQUM7U0FDN0QsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBWSxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDbkIsV0FBVyxDQUFDLHFEQUFxRCxDQUFDO1NBQ2xFLGNBQWMsQ0FDYixrQ0FBa0MsRUFDbEMsbURBQW1ELEVBQ25ELG9CQUFvQixDQUNyQjtTQUNBLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSwyQkFBMkIsRUFBRSxjQUFjLENBQUM7U0FDckYsY0FBYyxDQUFDLHdCQUF3QixFQUFFLGdDQUFnQyxDQUFDO1NBQzFFLE1BQU0sQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7UUFDdEIsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxDQUFDLE9BQTJCLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsR0FBRyxDQUFDLDBCQUEwQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSx5QkFBeUIsQ0FDN0IsT0FBTyxDQUFDLE1BQU0sRUFDZCxPQUFPLENBQUMsZ0JBQWdCLEVBQ3hCLE9BQU8sQ0FBQyxPQUFPLEVBQ2YsZUFBZSxFQUNmLElBQUksRUFDSixHQUFHLENBQ0osQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztTQUNKLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDbkIsV0FBVyxDQUFDLDBEQUEwRCxDQUFDO1NBQ3ZFLGNBQWMsQ0FDYixrQ0FBa0MsRUFDbEMsbURBQW1ELEVBQ25ELG9CQUFvQixDQUNyQjtTQUNBLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSwyQkFBMkIsRUFBRSxjQUFjLENBQUM7U0FDckYsY0FBYyxDQUFDLHdCQUF3QixFQUFFLGdDQUFnQyxDQUFDO1NBQzFFLE1BQU0sQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7UUFDdEIsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxDQUFDLE9BQTJCLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsR0FBRyxDQUFDLDBCQUEwQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSx5QkFBeUIsQ0FDN0IsT0FBTyxDQUFDLE1BQU0sRUFDZCxPQUFPLENBQUMsZ0JBQWdCLEVBQ3hCLE9BQU8sQ0FBQyxPQUFPLEVBQ2YsZUFBZSxFQUNmLElBQUksRUFDSixHQUFHLENBQ0osQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyJ9
@@ -0,0 +1,88 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { type LogFn } from '@aztec/foundation/log';
3
+ import { type NoirCompiledCircuit } from '@aztec/types/noir';
4
+ export declare const VK_FILENAME = "vk";
5
+ export declare const VK_FIELDS_FILENAME = "vk_fields.json";
6
+ export declare const PROOF_FILENAME = "proof";
7
+ export declare const PROOF_FIELDS_FILENAME = "proof_fields.json";
8
+ export declare enum BB_RESULT {
9
+ SUCCESS = 0,
10
+ FAILURE = 1,
11
+ ALREADY_PRESENT = 2
12
+ }
13
+ export type BBSuccess = {
14
+ status: BB_RESULT.SUCCESS | BB_RESULT.ALREADY_PRESENT;
15
+ duration: number;
16
+ pkPath?: string;
17
+ vkPath?: string;
18
+ proofPath?: string;
19
+ };
20
+ export type BBFailure = {
21
+ status: BB_RESULT.FAILURE;
22
+ reason: string;
23
+ };
24
+ export type BBResult = BBSuccess | BBFailure;
25
+ /**
26
+ * Invokes the Barretenberg binary with the provided command and args
27
+ * @param pathToBB - The path to the BB binary
28
+ * @param command - The command to execute
29
+ * @param args - The arguments to pass
30
+ * @param logger - A log function
31
+ * @param resultParser - An optional handler for detecting success or failure
32
+ * @returns The completed partial witness outputted from the circuit
33
+ */
34
+ export declare function executeBB(pathToBB: string, command: string, args: string[], logger: LogFn, resultParser?: (code: number) => boolean): Promise<BB_RESULT>;
35
+ /**
36
+ * Used for generating either a proving or verification key, will exit early if the key already exists
37
+ * It assumes the provided working directory is one where the caller wishes to maintain a permanent set of keys
38
+ * It is not considered a temporary directory
39
+ * @param pathToBB - The full path to the bb binary
40
+ * @param workingDirectory - The directory into which the key should be created
41
+ * @param circuitName - An identifier for the circuit
42
+ * @param compiledCircuit - The compiled circuit
43
+ * @param key - The type of key, either 'pk' or 'vk'
44
+ * @param log - A logging function
45
+ * @param force - Force the key to be regenerated even if it already exists
46
+ * @returns An instance of BBResult
47
+ */
48
+ export declare function generateKeyForNoirCircuit(pathToBB: string, workingDirectory: string, circuitName: string, compiledCircuit: NoirCompiledCircuit, key: 'vk' | 'pk', log: LogFn, force?: boolean): Promise<BBSuccess | BBFailure>;
49
+ /**
50
+ * Used for generating proofs of noir circuits.
51
+ * It is assumed that the working directory is a temporary and/or random directory used solely for generating this proof.
52
+ * @param pathToBB - The full path to the bb binary
53
+ * @param workingDirectory - A working directory for use by bb
54
+ * @param circuitName - An identifier for the circuit
55
+ * @param bytecode - The compiled circuit bytecode
56
+ * @param inputWitnessFile - The circuit input witness
57
+ * @param log - A logging function
58
+ * @returns An object containing a result indication, the location of the proof and the duration taken
59
+ */
60
+ export declare function generateProof(pathToBB: string, workingDirectory: string, circuitName: string, bytecode: Buffer, inputWitnessFile: string, log: LogFn): Promise<BBFailure | BBSuccess>;
61
+ /**
62
+ * Used for verifying proofs of noir circuits
63
+ * @param pathToBB - The full path to the bb binary
64
+ * @param proofFullPath - The full path to the proof to be verified
65
+ * @param verificationKeyPath - The full path to the circuit verification key
66
+ * @param log - A logging function
67
+ * @returns An object containing a result indication and duration taken
68
+ */
69
+ export declare function verifyProof(pathToBB: string, proofFullPath: string, verificationKeyPath: string, log: LogFn): Promise<BBFailure | BBSuccess>;
70
+ /**
71
+ * Used for verifying proofs of noir circuits
72
+ * @param pathToBB - The full path to the bb binary
73
+ * @param verificationKeyPath - The directory containing the binary verification key
74
+ * @param verificationKeyFilename - The filename of the verification key
75
+ * @param log - A logging function
76
+ * @returns An object containing a result indication and duration taken
77
+ */
78
+ export declare function writeVkAsFields(pathToBB: string, verificationKeyPath: string, verificationKeyFilename: string, log: LogFn): Promise<BBFailure | BBSuccess>;
79
+ /**
80
+ * Used for verifying proofs of noir circuits
81
+ * @param pathToBB - The full path to the bb binary
82
+ * @param proofPath - The directory containing the binary proof
83
+ * @param proofFileName - The filename of the proof
84
+ * @param log - A logging function
85
+ * @returns An object containing a result indication and duration taken
86
+ */
87
+ export declare function writeProofAsFields(pathToBB: string, proofPath: string, proofFileName: string, log: LogFn): Promise<BBFailure | BBSuccess>;
88
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/bb/execute.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAK7D,eAAO,MAAM,WAAW,OAAO,CAAC;AAChC,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AACnD,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,oBAAY,SAAS;IACnB,OAAO,IAAA;IACP,OAAO,IAAA;IACP,eAAe,IAAA;CAChB;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7C;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,KAAK,EACb,YAAY,UAAU,MAAM,YAAe,sBAqB5C;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,mBAAmB,EACpC,GAAG,EAAE,IAAI,GAAG,IAAI,EAChB,GAAG,EAAE,KAAK,EACV,KAAK,UAAQ,GACZ,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAoFhC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,KAAK,GACT,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAgDhC;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,MAAM,EAC3B,GAAG,EAAE,KAAK,GACT,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAsBhC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,mBAAmB,EAAE,MAAM,EAC3B,uBAAuB,EAAE,MAAM,EAC/B,GAAG,EAAE,KAAK,GACT,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAsBhC;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,KAAK,GACT,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAsBhC"}
@@ -0,0 +1,288 @@
1
+ import { sha256 } from '@aztec/foundation/crypto';
2
+ import { Timer } from '@aztec/foundation/timer';
3
+ import * as proc from 'child_process';
4
+ import * as fs from 'fs/promises';
5
+ export const VK_FILENAME = 'vk';
6
+ export const VK_FIELDS_FILENAME = 'vk_fields.json';
7
+ export const PROOF_FILENAME = 'proof';
8
+ export const PROOF_FIELDS_FILENAME = 'proof_fields.json';
9
+ export var BB_RESULT;
10
+ (function (BB_RESULT) {
11
+ BB_RESULT[BB_RESULT["SUCCESS"] = 0] = "SUCCESS";
12
+ BB_RESULT[BB_RESULT["FAILURE"] = 1] = "FAILURE";
13
+ BB_RESULT[BB_RESULT["ALREADY_PRESENT"] = 2] = "ALREADY_PRESENT";
14
+ })(BB_RESULT || (BB_RESULT = {}));
15
+ /**
16
+ * Invokes the Barretenberg binary with the provided command and args
17
+ * @param pathToBB - The path to the BB binary
18
+ * @param command - The command to execute
19
+ * @param args - The arguments to pass
20
+ * @param logger - A log function
21
+ * @param resultParser - An optional handler for detecting success or failure
22
+ * @returns The completed partial witness outputted from the circuit
23
+ */
24
+ export function executeBB(pathToBB, command, args, logger, resultParser = (code) => code === 0) {
25
+ return new Promise((resolve, reject) => {
26
+ // spawn the bb process
27
+ const bb = proc.spawn(pathToBB, [command, ...args]);
28
+ bb.stdout.on('data', data => {
29
+ const message = data.toString('utf-8').replace(/\n$/, '');
30
+ logger(message);
31
+ });
32
+ bb.stderr.on('data', data => {
33
+ const message = data.toString('utf-8').replace(/\n$/, '');
34
+ logger(message);
35
+ });
36
+ bb.on('close', (code) => {
37
+ if (resultParser(code)) {
38
+ resolve(BB_RESULT.SUCCESS);
39
+ }
40
+ else {
41
+ reject();
42
+ }
43
+ });
44
+ }).catch(_ => BB_RESULT.FAILURE);
45
+ }
46
+ const bytecodeHashFilename = 'bytecode_hash';
47
+ const bytecodeFilename = 'bytecode';
48
+ /**
49
+ * Used for generating either a proving or verification key, will exit early if the key already exists
50
+ * It assumes the provided working directory is one where the caller wishes to maintain a permanent set of keys
51
+ * It is not considered a temporary directory
52
+ * @param pathToBB - The full path to the bb binary
53
+ * @param workingDirectory - The directory into which the key should be created
54
+ * @param circuitName - An identifier for the circuit
55
+ * @param compiledCircuit - The compiled circuit
56
+ * @param key - The type of key, either 'pk' or 'vk'
57
+ * @param log - A logging function
58
+ * @param force - Force the key to be regenerated even if it already exists
59
+ * @returns An instance of BBResult
60
+ */
61
+ export async function generateKeyForNoirCircuit(pathToBB, workingDirectory, circuitName, compiledCircuit, key, log, force = false) {
62
+ const bytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
63
+ // The key generation is written to e.g. /workingDirectory/pk/BaseParityArtifact/pk
64
+ // The bytecode hash file is also written here as /workingDirectory/pk/BaseParityArtifact/bytecode-hash
65
+ // The bytecode is written to e.g. /workingDirectory/pk/BaseParityArtifact/bytecode
66
+ // The bytecode is removed after the key is generated, leaving just the hash file
67
+ const circuitOutputDirectory = `${workingDirectory}/${key}/${circuitName}`;
68
+ const bytecodeHashPath = `${circuitOutputDirectory}/${bytecodeHashFilename}`;
69
+ const bytecodePath = `${circuitOutputDirectory}/${bytecodeFilename}`;
70
+ const bytecodeHash = sha256(bytecode);
71
+ const outputPath = `${circuitOutputDirectory}`;
72
+ // ensure the directory exists
73
+ await fs.mkdir(circuitOutputDirectory, { recursive: true });
74
+ // Generate the key if we have been told to, or there is no bytecode hash
75
+ let mustRegenerate = force ||
76
+ (await fs
77
+ .access(bytecodeHashPath, fs.constants.R_OK)
78
+ .then(_ => false)
79
+ .catch(_ => true));
80
+ if (!mustRegenerate) {
81
+ // Check to see if the bytecode hash has changed from the stored value
82
+ const data = await fs.readFile(bytecodeHashPath).catch(_ => Buffer.alloc(0));
83
+ mustRegenerate = data.length == 0 || !data.equals(bytecodeHash);
84
+ }
85
+ if (!mustRegenerate) {
86
+ // No need to generate, early out
87
+ return {
88
+ status: BB_RESULT.ALREADY_PRESENT,
89
+ duration: 0,
90
+ pkPath: key === 'pk' ? outputPath : undefined,
91
+ vkPath: key === 'vk' ? outputPath : undefined,
92
+ proofPath: undefined,
93
+ };
94
+ }
95
+ // Check we have access to bb
96
+ const binaryPresent = await fs
97
+ .access(pathToBB, fs.constants.R_OK)
98
+ .then(_ => true)
99
+ .catch(_ => false);
100
+ if (!binaryPresent) {
101
+ return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
102
+ }
103
+ // We are now going to generate the key
104
+ try {
105
+ // Write the bytecode to the working directory
106
+ await fs.writeFile(bytecodePath, bytecode);
107
+ // args are the output path and the input bytecode path
108
+ const args = ['-o', outputPath, '-b', bytecodePath];
109
+ const timer = new Timer();
110
+ let result = await executeBB(pathToBB, `write_${key}`, args, log);
111
+ // If we succeeded and the type of key if verification, have bb write the 'fields' version too
112
+ if (result == BB_RESULT.SUCCESS && key === 'vk') {
113
+ const asFieldsArgs = ['-k', `${outputPath}/${VK_FILENAME}`, '-o', `${outputPath}/${VK_FIELDS_FILENAME}`, '-v'];
114
+ result = await executeBB(pathToBB, `vk_as_fields`, asFieldsArgs, log);
115
+ }
116
+ const duration = timer.ms();
117
+ // Cleanup the bytecode file
118
+ await fs.rm(bytecodePath, { force: true });
119
+ if (result == BB_RESULT.SUCCESS) {
120
+ // Store the bytecode hash so we don't need to regenerate at a later time
121
+ await fs.writeFile(bytecodeHashPath, bytecodeHash);
122
+ return {
123
+ status: BB_RESULT.SUCCESS,
124
+ duration,
125
+ pkPath: key === 'pk' ? outputPath : undefined,
126
+ vkPath: key === 'vk' ? outputPath : undefined,
127
+ proofPath: undefined,
128
+ };
129
+ }
130
+ // Not a great error message here but it is difficult to decipher what comes from bb
131
+ return { status: BB_RESULT.FAILURE, reason: `Failed to generate key` };
132
+ }
133
+ catch (error) {
134
+ return { status: BB_RESULT.FAILURE, reason: `${error}` };
135
+ }
136
+ }
137
+ /**
138
+ * Used for generating proofs of noir circuits.
139
+ * It is assumed that the working directory is a temporary and/or random directory used solely for generating this proof.
140
+ * @param pathToBB - The full path to the bb binary
141
+ * @param workingDirectory - A working directory for use by bb
142
+ * @param circuitName - An identifier for the circuit
143
+ * @param bytecode - The compiled circuit bytecode
144
+ * @param inputWitnessFile - The circuit input witness
145
+ * @param log - A logging function
146
+ * @returns An object containing a result indication, the location of the proof and the duration taken
147
+ */
148
+ export async function generateProof(pathToBB, workingDirectory, circuitName, bytecode, inputWitnessFile, log) {
149
+ // Check that the working directory exists
150
+ try {
151
+ await fs.access(workingDirectory);
152
+ }
153
+ catch (error) {
154
+ return { status: BB_RESULT.FAILURE, reason: `Working directory ${workingDirectory} does not exist` };
155
+ }
156
+ // The bytecode is written to e.g. /workingDirectory/BaseParityArtifact-bytecode
157
+ const bytecodePath = `${workingDirectory}/${circuitName}-bytecode`;
158
+ // The proof is written to e.g. /workingDirectory/proof
159
+ const outputPath = `${workingDirectory}`;
160
+ const binaryPresent = await fs
161
+ .access(pathToBB, fs.constants.R_OK)
162
+ .then(_ => true)
163
+ .catch(_ => false);
164
+ if (!binaryPresent) {
165
+ return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
166
+ }
167
+ try {
168
+ // Write the bytecode to the working directory
169
+ await fs.writeFile(bytecodePath, bytecode);
170
+ const args = ['-o', outputPath, '-b', bytecodePath, '-w', inputWitnessFile, '-v'];
171
+ const timer = new Timer();
172
+ const logFunction = (message) => {
173
+ log(`${circuitName} BB out - ${message}`);
174
+ };
175
+ const result = await executeBB(pathToBB, 'prove_output_all', args, logFunction);
176
+ const duration = timer.ms();
177
+ // cleanup the bytecode
178
+ await fs.rm(bytecodePath, { force: true });
179
+ if (result == BB_RESULT.SUCCESS) {
180
+ return {
181
+ status: BB_RESULT.SUCCESS,
182
+ duration,
183
+ proofPath: `${outputPath}`,
184
+ pkPath: undefined,
185
+ vkPath: `${outputPath}`,
186
+ };
187
+ }
188
+ // Not a great error message here but it is difficult to decipher what comes from bb
189
+ return { status: BB_RESULT.FAILURE, reason: `Failed to generate proof` };
190
+ }
191
+ catch (error) {
192
+ return { status: BB_RESULT.FAILURE, reason: `${error}` };
193
+ }
194
+ }
195
+ /**
196
+ * Used for verifying proofs of noir circuits
197
+ * @param pathToBB - The full path to the bb binary
198
+ * @param proofFullPath - The full path to the proof to be verified
199
+ * @param verificationKeyPath - The full path to the circuit verification key
200
+ * @param log - A logging function
201
+ * @returns An object containing a result indication and duration taken
202
+ */
203
+ export async function verifyProof(pathToBB, proofFullPath, verificationKeyPath, log) {
204
+ const binaryPresent = await fs
205
+ .access(pathToBB, fs.constants.R_OK)
206
+ .then(_ => true)
207
+ .catch(_ => false);
208
+ if (!binaryPresent) {
209
+ return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
210
+ }
211
+ try {
212
+ const args = ['-p', proofFullPath, '-k', verificationKeyPath];
213
+ const timer = new Timer();
214
+ const result = await executeBB(pathToBB, 'verify', args, log);
215
+ const duration = timer.ms();
216
+ if (result == BB_RESULT.SUCCESS) {
217
+ return { status: BB_RESULT.SUCCESS, duration };
218
+ }
219
+ // Not a great error message here but it is difficult to decipher what comes from bb
220
+ return { status: BB_RESULT.FAILURE, reason: `Failed to verify proof` };
221
+ }
222
+ catch (error) {
223
+ return { status: BB_RESULT.FAILURE, reason: `${error}` };
224
+ }
225
+ }
226
+ /**
227
+ * Used for verifying proofs of noir circuits
228
+ * @param pathToBB - The full path to the bb binary
229
+ * @param verificationKeyPath - The directory containing the binary verification key
230
+ * @param verificationKeyFilename - The filename of the verification key
231
+ * @param log - A logging function
232
+ * @returns An object containing a result indication and duration taken
233
+ */
234
+ export async function writeVkAsFields(pathToBB, verificationKeyPath, verificationKeyFilename, log) {
235
+ const binaryPresent = await fs
236
+ .access(pathToBB, fs.constants.R_OK)
237
+ .then(_ => true)
238
+ .catch(_ => false);
239
+ if (!binaryPresent) {
240
+ return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
241
+ }
242
+ try {
243
+ const args = ['-k', `${verificationKeyPath}/${verificationKeyFilename}`, '-v'];
244
+ const timer = new Timer();
245
+ const result = await executeBB(pathToBB, 'vk_as_fields', args, log);
246
+ const duration = timer.ms();
247
+ if (result == BB_RESULT.SUCCESS) {
248
+ return { status: BB_RESULT.SUCCESS, duration, vkPath: verificationKeyPath };
249
+ }
250
+ // Not a great error message here but it is difficult to decipher what comes from bb
251
+ return { status: BB_RESULT.FAILURE, reason: `Failed to create vk as fields` };
252
+ }
253
+ catch (error) {
254
+ return { status: BB_RESULT.FAILURE, reason: `${error}` };
255
+ }
256
+ }
257
+ /**
258
+ * Used for verifying proofs of noir circuits
259
+ * @param pathToBB - The full path to the bb binary
260
+ * @param proofPath - The directory containing the binary proof
261
+ * @param proofFileName - The filename of the proof
262
+ * @param log - A logging function
263
+ * @returns An object containing a result indication and duration taken
264
+ */
265
+ export async function writeProofAsFields(pathToBB, proofPath, proofFileName, log) {
266
+ const binaryPresent = await fs
267
+ .access(pathToBB, fs.constants.R_OK)
268
+ .then(_ => true)
269
+ .catch(_ => false);
270
+ if (!binaryPresent) {
271
+ return { status: BB_RESULT.FAILURE, reason: `Failed to find bb binary at ${pathToBB}` };
272
+ }
273
+ try {
274
+ const args = ['-p', `${proofPath}/${proofFileName}`, '-v'];
275
+ const timer = new Timer();
276
+ const result = await executeBB(pathToBB, 'proof_as_fields', args, log);
277
+ const duration = timer.ms();
278
+ if (result == BB_RESULT.SUCCESS) {
279
+ return { status: BB_RESULT.SUCCESS, duration, proofPath: proofPath };
280
+ }
281
+ // Not a great error message here but it is difficult to decipher what comes from bb
282
+ return { status: BB_RESULT.FAILURE, reason: `Failed to create proof as fields` };
283
+ }
284
+ catch (error) {
285
+ return { status: BB_RESULT.FAILURE, reason: `${error}` };
286
+ }
287
+ }
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYi9leGVjdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHaEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBRXpELE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDbkIsK0NBQU8sQ0FBQTtJQUNQLCtDQUFPLENBQUE7SUFDUCwrREFBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQWlCRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFFBQWdCLEVBQ2hCLE9BQWUsRUFDZixJQUFjLEVBQ2QsTUFBYSxFQUNiLGVBQWUsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDO0lBRTNDLE9BQU8sSUFBSSxPQUFPLENBQXdDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzVFLHVCQUF1QjtRQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxF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
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S node --no-warnings
2
+ import 'source-map-support/register.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bb/index.ts"],"names":[],"mappings":";AAGA,OAAO,gCAAgC,CAAC"}
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env -S node --no-warnings
2
+ import { createConsoleLogger } from '@aztec/foundation/log';
3
+ import 'source-map-support/register.js';
4
+ import { getProgram } from './cli.js';
5
+ const log = createConsoleLogger();
6
+ /** CLI main entrypoint */
7
+ async function main() {
8
+ process.once('SIGINT', () => process.exit(0));
9
+ process.once('SIGTERM', () => process.exit(0));
10
+ const program = getProgram(log);
11
+ await program.parseAsync(process.argv);
12
+ }
13
+ main().catch(err => {
14
+ log(`Error in command execution`);
15
+ log(err);
16
+ process.exit(1);
17
+ });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sZ0NBQWdDLENBQUM7QUFFeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV0QyxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0FBRWxDLDBCQUEwQjtBQUMxQixLQUFLLFVBQVUsSUFBSTtJQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDakIsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ export * from './prover/index.js';
2
+ export * from './test/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
package/dest/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './prover/index.js';
2
+ export * from './test/index.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDIn0=
@@ -0,0 +1,12 @@
1
+ import { PublicKernelType } from '@aztec/circuit-types';
2
+ import { type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
3
+ import { type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
4
+ import { type WitnessMap } from '@noir-lang/types';
5
+ export type PublicKernelProvingOps = {
6
+ artifact: ServerProtocolArtifact;
7
+ convertInputs: (inputs: PublicKernelCircuitPrivateInputs) => WitnessMap;
8
+ convertOutputs: (outputs: WitnessMap) => PublicKernelCircuitPublicInputs;
9
+ };
10
+ export type KernelTypeToArtifact = Record<PublicKernelType, PublicKernelProvingOps | undefined>;
11
+ export declare const PublicKernelArtifactMapping: KernelTypeToArtifact;
12
+ //# sourceMappingURL=mappings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappings.d.ts","sourceRoot":"","sources":["../../src/mappings/mappings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,gCAAgC,EAAE,KAAK,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACjH,OAAO,EACL,KAAK,sBAAsB,EAO5B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,aAAa,EAAE,CAAC,MAAM,EAAE,gCAAgC,KAAK,UAAU,CAAC;IACxE,cAAc,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,+BAA+B,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,SAAS,CAAC,CAAC;AAEhG,eAAO,MAAM,2BAA2B,EAAE,oBAkBzC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { PublicKernelType } from '@aztec/circuit-types';
2
+ import { convertPublicInnerRollupInputsToWitnessMap, convertPublicInnerRollupOutputFromWitnessMap, convertPublicSetupRollupInputsToWitnessMap, convertPublicSetupRollupOutputFromWitnessMap, convertPublicTeardownRollupInputsToWitnessMap, convertPublicTeardownRollupOutputFromWitnessMap, } from '@aztec/noir-protocol-circuits-types';
3
+ export const PublicKernelArtifactMapping = {
4
+ [PublicKernelType.NON_PUBLIC]: undefined,
5
+ [PublicKernelType.APP_LOGIC]: {
6
+ artifact: 'PublicKernelAppLogicArtifact',
7
+ convertInputs: convertPublicInnerRollupInputsToWitnessMap,
8
+ convertOutputs: convertPublicInnerRollupOutputFromWitnessMap,
9
+ },
10
+ [PublicKernelType.SETUP]: {
11
+ artifact: 'PublicKernelSetupArtifact',
12
+ convertInputs: convertPublicSetupRollupInputsToWitnessMap,
13
+ convertOutputs: convertPublicSetupRollupOutputFromWitnessMap,
14
+ },
15
+ [PublicKernelType.TEARDOWN]: {
16
+ artifact: 'PublicKernelTeardownArtifact',
17
+ convertInputs: convertPublicTeardownRollupInputsToWitnessMap,
18
+ convertOutputs: convertPublicTeardownRollupOutputFromWitnessMap,
19
+ },
20
+ [PublicKernelType.TAIL]: undefined,
21
+ };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFwcGluZ3MvbWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUVMLDBDQUEwQyxFQUMxQyw0Q0FBNEMsRUFDNUMsMENBQTBDLEVBQzFDLDRDQUE0QyxFQUM1Qyw2Q0FBNkMsRUFDN0MsK0NBQStDLEdBQ2hELE1BQU0scUNBQXFDLENBQUM7QUFZN0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQXlCO0lBQy9ELENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsU0FBUztJQUN4QyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzVCLFFBQVEsRUFBRSw4QkFBOEI7UUFDeEMsYUFBYSxFQUFFLDBDQUEwQztRQUN6RCxjQUFjLEVBQUUsNENBQTRDO0tBQzdEO0lBQ0QsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN4QixRQUFRLEVBQUUsMkJBQTJCO1FBQ3JDLGFBQWEsRUFBRSwwQ0FBMEM7UUFDekQsY0FBYyxFQUFFLDRDQUE0QztLQUM3RDtJQUNELENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDM0IsUUFBUSxFQUFFLDhCQUE4QjtRQUN4QyxhQUFhLEVBQUUsNkNBQTZDO1FBQzVELGNBQWMsRUFBRSwrQ0FBK0M7S0FDaEU7SUFDRCxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVM7Q0FDbkMsQ0FBQyJ9
@@ -0,0 +1,58 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { type AppCircuitProofOutput, type KernelProofOutput, type ProofCreator } from '@aztec/circuit-types';
3
+ import { Fr, type PrivateCircuitPublicInputs, type PrivateKernelCircuitPublicInputs, type PrivateKernelInitCircuitPrivateInputs, type PrivateKernelInnerCircuitPrivateInputs, type PrivateKernelTailCircuitPrivateInputs, type PrivateKernelTailCircuitPublicInputs, Proof } from '@aztec/circuits.js';
4
+ import { type ClientProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
5
+ import { type ACVMField } from '@aztec/simulator';
6
+ /**
7
+ * This proof creator implementation uses the native bb binary.
8
+ * This is a temporary implementation until we make the WASM version work.
9
+ */
10
+ export declare class BBNativeProofCreator implements ProofCreator {
11
+ private bbBinaryPath;
12
+ private bbWorkingDirectory;
13
+ private log;
14
+ private simulator;
15
+ private verificationKeys;
16
+ constructor(bbBinaryPath: string, bbWorkingDirectory: string, log?: import("@aztec/foundation/log").Logger);
17
+ getSiloedCommitments(publicInputs: PrivateCircuitPublicInputs): Promise<Fr[]>;
18
+ createProofInit(inputs: PrivateKernelInitCircuitPrivateInputs): Promise<KernelProofOutput<PrivateKernelCircuitPublicInputs>>;
19
+ createProofInner(inputs: PrivateKernelInnerCircuitPrivateInputs): Promise<KernelProofOutput<PrivateKernelCircuitPublicInputs>>;
20
+ createProofTail(inputs: PrivateKernelTailCircuitPrivateInputs): Promise<KernelProofOutput<PrivateKernelTailCircuitPublicInputs>>;
21
+ createAppCircuitProof(partialWitness: Map<number, ACVMField>, bytecode: Buffer): Promise<AppCircuitProofOutput>;
22
+ /**
23
+ * Verifies a proof, will generate the verification key if one is not cached internally
24
+ * @param circuitType - The type of circuit whose proof is to be verified
25
+ * @param proof - The proof to be verified
26
+ */
27
+ verifyProofForProtocolCircuit(circuitType: ClientProtocolArtifact, proof: Proof): Promise<void>;
28
+ private verifyProofFromKey;
29
+ /**
30
+ * Returns the verification key data for a circuit, will generate and cache it if not cached internally
31
+ * @param circuitType - The type of circuit for which the verification key is required
32
+ * @returns The verification key data
33
+ */
34
+ private getVerificationKeyDataForCircuit;
35
+ /**
36
+ * Reads the verification key data stored at the specified location and parses into a VerificationKeyData
37
+ * @param filePath - The directory containing the verification key data files
38
+ * @returns The verification key data
39
+ */
40
+ private convertVk;
41
+ /**
42
+ * Ensures our verification key cache includes the key data located at the specified directory
43
+ * @param filePath - The directory containing the verification key data files
44
+ * @param circuitType - The type of circuit to which the verification key corresponds
45
+ */
46
+ private updateVerificationKeyAfterProof;
47
+ private createSafeProof;
48
+ private generateWitnessAndCreateProof;
49
+ private createProof;
50
+ /**
51
+ * Parses and returns the proof data stored at the specified directory
52
+ * @param filePath - The directory containing the proof data
53
+ * @param circuitType - The type of circuit proven
54
+ * @returns The proof
55
+ */
56
+ private readProofAsFields;
57
+ }
58
+ //# sourceMappingURL=bb_native_proof_creator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bb_native_proof_creator.d.ts","sourceRoot":"","sources":["../../src/prover/bb_native_proof_creator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EACL,EAAE,EAEF,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,qCAAqC,EAC1C,KAAK,sCAAsC,EAC3C,KAAK,qCAAqC,EAC1C,KAAK,oCAAoC,EACzC,KAAK,EAKN,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAEL,KAAK,sBAAsB,EAS5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AA4CjE;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IASrD,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,GAAG;IAVb,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO,CAAC,gBAAgB,CAGpB;gBAGM,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,EAC1B,GAAG,yCAA8C;IAGpD,oBAAoB,CAAC,YAAY,EAAE,0BAA0B;IAQvD,eAAe,CAC1B,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IAKlD,gBAAgB,CAC3B,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IAKlD,eAAe,CAC1B,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;IAStD,qBAAqB,CAChC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC;IAsBjC;;;;OAIG;IACU,6BAA6B,CAAC,WAAW,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK;YAmB9E,kBAAkB;IAsBhC;;;;OAIG;YACW,gCAAgC;IAqB9C;;;;OAIG;YACW,SAAS;IAqBvB;;;;OAIG;YACW,+BAA+B;YAU/B,eAAe;YAef,6BAA6B;YAiC7B,WAAW;IA0CzB;;;;;OAKG;YACW,iBAAiB;CAoBhC"}