@aztec/bb-prover 0.41.0 → 0.43.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 (59) hide show
  1. package/dest/bb/cli.d.ts.map +1 -1
  2. package/dest/bb/cli.js +24 -2
  3. package/dest/bb/execute.d.ts +30 -1
  4. package/dest/bb/execute.d.ts.map +1 -1
  5. package/dest/bb/execute.js +252 -60
  6. package/dest/config.d.ts +9 -0
  7. package/dest/config.d.ts.map +1 -0
  8. package/dest/config.js +2 -0
  9. package/dest/index.d.ts +2 -0
  10. package/dest/index.d.ts.map +1 -1
  11. package/dest/index.js +3 -1
  12. package/dest/mappings/mappings.d.ts +1 -0
  13. package/dest/mappings/mappings.d.ts.map +1 -1
  14. package/dest/mappings/mappings.js +27 -8
  15. package/dest/prover/bb_native_proof_creator.d.ts +2 -8
  16. package/dest/prover/bb_native_proof_creator.d.ts.map +1 -1
  17. package/dest/prover/bb_native_proof_creator.js +37 -79
  18. package/dest/prover/bb_prover.d.ts +33 -32
  19. package/dest/prover/bb_prover.d.ts.map +1 -1
  20. package/dest/prover/bb_prover.js +231 -162
  21. package/dest/stats.d.ts.map +1 -1
  22. package/dest/stats.js +8 -2
  23. package/dest/test/index.d.ts +1 -0
  24. package/dest/test/index.d.ts.map +1 -1
  25. package/dest/test/index.js +2 -1
  26. package/dest/test/test_circuit_prover.d.ts +9 -7
  27. package/dest/test/test_circuit_prover.d.ts.map +1 -1
  28. package/dest/test/test_circuit_prover.js +32 -16
  29. package/dest/test/test_verifier.d.ts +7 -0
  30. package/dest/test/test_verifier.d.ts.map +1 -0
  31. package/dest/test/test_verifier.js +10 -0
  32. package/dest/verification_key/verification_key_data.d.ts +8 -0
  33. package/dest/verification_key/verification_key_data.d.ts.map +1 -0
  34. package/dest/verification_key/verification_key_data.js +24 -0
  35. package/dest/verifier/bb_verifier.d.ts +18 -0
  36. package/dest/verifier/bb_verifier.d.ts.map +1 -0
  37. package/dest/verifier/bb_verifier.js +90 -0
  38. package/dest/verifier/index.d.ts +2 -0
  39. package/dest/verifier/index.d.ts.map +1 -0
  40. package/dest/verifier/index.js +2 -0
  41. package/package.json +6 -6
  42. package/src/bb/cli.ts +36 -1
  43. package/src/bb/execute.ts +340 -67
  44. package/src/config.ts +9 -0
  45. package/src/index.ts +2 -0
  46. package/src/mappings/mappings.ts +38 -12
  47. package/src/prover/bb_native_proof_creator.ts +49 -91
  48. package/src/prover/bb_prover.ts +396 -221
  49. package/src/stats.ts +7 -1
  50. package/src/test/index.ts +1 -0
  51. package/src/test/test_circuit_prover.ts +85 -23
  52. package/src/test/test_verifier.ts +12 -0
  53. package/src/verification_key/verification_key_data.ts +35 -0
  54. package/src/verifier/bb_verifier.ts +156 -0
  55. package/src/verifier/index.ts +1 -0
  56. package/dest/prover/verification_key_data.d.ts +0 -16
  57. package/dest/prover/verification_key_data.d.ts.map +0 -1
  58. package/dest/prover/verification_key_data.js +0 -5
  59. package/src/prover/verification_key_data.ts +0 -16
@@ -2,7 +2,7 @@
2
2
  import { type AppCircuitProofOutput, type KernelProofOutput, type ProofCreator } from '@aztec/circuit-types';
3
3
  import { Fr, type PrivateCircuitPublicInputs, type PrivateKernelCircuitPublicInputs, type PrivateKernelInitCircuitPrivateInputs, type PrivateKernelInnerCircuitPrivateInputs, type PrivateKernelResetCircuitPrivateInputsVariants, type PrivateKernelTailCircuitPrivateInputs, type PrivateKernelTailCircuitPublicInputs, Proof } from '@aztec/circuits.js';
4
4
  import { type ClientProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
5
- import { type ACVMField } from '@aztec/simulator';
5
+ import { type WitnessMap } from '@noir-lang/types';
6
6
  /**
7
7
  * This proof creator implementation uses the native bb binary.
8
8
  * This is a temporary implementation until we make the WASM version work.
@@ -19,7 +19,7 @@ export declare class BBNativeProofCreator implements ProofCreator {
19
19
  createProofInner(inputs: PrivateKernelInnerCircuitPrivateInputs): Promise<KernelProofOutput<PrivateKernelCircuitPublicInputs>>;
20
20
  createProofReset(inputs: PrivateKernelResetCircuitPrivateInputsVariants): Promise<KernelProofOutput<PrivateKernelCircuitPublicInputs>>;
21
21
  createProofTail(inputs: PrivateKernelTailCircuitPrivateInputs): Promise<KernelProofOutput<PrivateKernelTailCircuitPublicInputs>>;
22
- createAppCircuitProof(partialWitness: Map<number, ACVMField>, bytecode: Buffer, appCircuitName?: string): Promise<AppCircuitProofOutput>;
22
+ createAppCircuitProof(partialWitness: WitnessMap, bytecode: Buffer, appCircuitName?: string): Promise<AppCircuitProofOutput>;
23
23
  /**
24
24
  * Verifies a proof, will generate the verification key if one is not cached internally
25
25
  * @param circuitType - The type of circuit whose proof is to be verified
@@ -33,12 +33,6 @@ export declare class BBNativeProofCreator implements ProofCreator {
33
33
  * @returns The verification key data
34
34
  */
35
35
  private getVerificationKeyDataForCircuit;
36
- /**
37
- * Reads the verification key data stored at the specified location and parses into a VerificationKeyData
38
- * @param filePath - The directory containing the verification key data files
39
- * @returns The verification key data
40
- */
41
- private convertVk;
42
36
  /**
43
37
  * Ensures our verification key cache includes the key data located at the specified directory
44
38
  * @param filePath - The directory containing the verification key data files
@@ -1 +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;AAE7G,OAAO,EACL,EAAE,EAEF,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,qCAAqC,EAC1C,KAAK,sCAAsC,EAC3C,KAAK,8CAA8C,EACnD,KAAK,qCAAqC,EAC1C,KAAK,oCAAoC,EACzC,KAAK,EAKN,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAEL,KAAK,sBAAsB,EAY5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AA0BjE;;;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;IASlD,gBAAgB,CAC3B,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IASlD,gBAAgB,CAC3B,MAAM,EAAE,8CAA8C,GACrD,OAAO,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IASlD,eAAe,CAC1B,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;IAiBtD,qBAAqB,CAChC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EACtC,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,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;YAiBf,6BAA6B;YAiD7B,WAAW;IAsEzB;;;;;OAKG;YACW,iBAAiB;CAoBhC"}
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;AAE7G,OAAO,EAEL,EAAE,EAEF,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,qCAAqC,EAC1C,KAAK,sCAAsC,EAC3C,KAAK,8CAA8C,EACnD,KAAK,qCAAqC,EAC1C,KAAK,oCAAoC,EACzC,KAAK,EAKN,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAEL,KAAK,sBAAsB,EAY5B,MAAM,qCAAqC,CAAC;AAK7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAcnD;;;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;IASlD,gBAAgB,CAC3B,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IASlD,gBAAgB,CAC3B,MAAM,EAAE,8CAA8C,GACrD,OAAO,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IASlD,eAAe,CAC1B,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;IAiBtD,qBAAqB,CAChC,cAAc,EAAE,UAAU,EAC1B,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,qBAAqB,CAAC;IAkBjC;;;;OAIG;IACU,6BAA6B,CAAC,WAAW,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK;YAmB9E,kBAAkB;IAgBhC;;;;OAIG;YACW,gCAAgC;IAqB9C;;;;OAIG;YACW,+BAA+B;YAU/B,eAAe;YAYf,6BAA6B;YA6C7B,WAAW;IA6EzB;;;;;OAKG;YACW,iBAAiB;CAwBhC"}
@@ -1,15 +1,15 @@
1
- import { Fr, NESTED_RECURSIVE_PROOF_LENGTH, Proof, RECURSIVE_PROOF_LENGTH, RecursiveProof, VerificationKeyAsFields, } from '@aztec/circuits.js';
1
+ import { AGGREGATION_OBJECT_LENGTH, Fr, NESTED_RECURSIVE_PROOF_LENGTH, Proof, RECURSIVE_PROOF_LENGTH, RecursiveProof, } from '@aztec/circuits.js';
2
2
  import { siloNoteHash } from '@aztec/circuits.js/hash';
3
- import { randomBytes } from '@aztec/foundation/crypto';
3
+ import { runInDirectory } from '@aztec/foundation/fs';
4
4
  import { createDebugLogger } from '@aztec/foundation/log';
5
5
  import { Timer } from '@aztec/foundation/timer';
6
6
  import { ClientCircuitArtifacts, PrivateResetTagToArtifactName, convertPrivateKernelInitInputsToWitnessMap, convertPrivateKernelInitOutputsFromWitnessMap, convertPrivateKernelInnerInputsToWitnessMap, convertPrivateKernelInnerOutputsFromWitnessMap, convertPrivateKernelResetInputsToWitnessMap, convertPrivateKernelResetOutputsFromWitnessMap, convertPrivateKernelTailForPublicOutputsFromWitnessMap, convertPrivateKernelTailInputsToWitnessMap, convertPrivateKernelTailOutputsFromWitnessMap, convertPrivateKernelTailToPublicInputsToWitnessMap, } from '@aztec/noir-protocol-circuits-types';
7
7
  import { WASMSimulator } from '@aztec/simulator';
8
8
  import { serializeWitness } from '@noir-lang/noirc_abi';
9
9
  import * as fs from 'fs/promises';
10
- import { BB_RESULT, PROOF_FIELDS_FILENAME, PROOF_FILENAME, VK_FIELDS_FILENAME, VK_FILENAME, generateKeyForNoirCircuit, generateProof, verifyProof, } from '../bb/execute.js';
10
+ import { BB_RESULT, PROOF_FIELDS_FILENAME, PROOF_FILENAME, generateKeyForNoirCircuit, generateProof, verifyProof, } from '../bb/execute.js';
11
11
  import { mapProtocolArtifactNameToCircuitName } from '../stats.js';
12
- import { AGGREGATION_OBJECT_SIZE, CIRCUIT_PUBLIC_INPUTS_INDEX, CIRCUIT_RECURSIVE_INDEX, CIRCUIT_SIZE_INDEX, } from './verification_key_data.js';
12
+ import { extractVkData } from '../verification_key/verification_key_data.js';
13
13
  /**
14
14
  * This proof creator implementation uses the native bb binary.
15
15
  * This is a temporary implementation until we make the WASM version work.
@@ -42,12 +42,9 @@ export class BBNativeProofCreator {
42
42
  return await this.createSafeProof(inputs, 'PrivateKernelTailToPublicArtifact', convertPrivateKernelTailToPublicInputsToWitnessMap, convertPrivateKernelTailForPublicOutputsFromWitnessMap);
43
43
  }
44
44
  async createAppCircuitProof(partialWitness, bytecode, appCircuitName) {
45
- const directory = `${this.bbWorkingDirectory}/${randomBytes(8).toString('hex')}`;
46
- await fs.mkdir(directory, { recursive: true });
47
- this.log.debug(`Created directory: ${directory}`);
48
- try {
45
+ const operation = async (directory) => {
49
46
  this.log.debug(`Proving app circuit`);
50
- const proofOutput = await this.createProof(directory, partialWitness, bytecode, 'App', 0, 0, appCircuitName);
47
+ const proofOutput = await this.createProof(directory, partialWitness, bytecode, 'App', appCircuitName);
51
48
  if (proofOutput.proof.proof.length != RECURSIVE_PROOF_LENGTH) {
52
49
  throw new Error(`Incorrect proof length`);
53
50
  }
@@ -57,11 +54,8 @@ export class BBNativeProofCreator {
57
54
  verificationKey: proofOutput.verificationKey,
58
55
  };
59
56
  return output;
60
- }
61
- finally {
62
- await fs.rm(directory, { recursive: true, force: true });
63
- this.log.debug(`Deleted directory: ${directory}`);
64
- }
57
+ };
58
+ return await runInDirectory(this.bbWorkingDirectory, operation);
65
59
  }
66
60
  /**
67
61
  * Verifies a proof, will generate the verification key if one is not cached internally
@@ -70,7 +64,7 @@ export class BBNativeProofCreator {
70
64
  */
71
65
  async verifyProofForProtocolCircuit(circuitType, proof) {
72
66
  const verificationKey = await this.getVerificationKeyDataForCircuit(circuitType);
73
- this.log.debug(`Verifying with key: ${verificationKey.hash.toString()}`);
67
+ this.log.debug(`Verifying with key: ${verificationKey.keyAsFields.hash.toString()}`);
74
68
  const logFunction = (message) => {
75
69
  this.log.debug(`${circuitType} BB out - ${message}`);
76
70
  };
@@ -82,19 +76,14 @@ export class BBNativeProofCreator {
82
76
  this.log.info(`Successfully verified ${circuitType} proof in ${result.duration} ms`);
83
77
  }
84
78
  async verifyProofFromKey(verificationKey, proof, logFunction = () => { }) {
85
- // Create random directory to be used for temp files
86
- const bbWorkingDirectory = `${this.bbWorkingDirectory}/${randomBytes(8).toString('hex')}`;
87
- await fs.mkdir(bbWorkingDirectory, { recursive: true });
88
- const proofFileName = `${bbWorkingDirectory}/proof`;
89
- const verificationKeyPath = `${bbWorkingDirectory}/vk`;
90
- await fs.writeFile(proofFileName, proof.buffer);
91
- await fs.writeFile(verificationKeyPath, verificationKey);
92
- try {
79
+ const operation = async (bbWorkingDirectory) => {
80
+ const proofFileName = `${bbWorkingDirectory}/proof`;
81
+ const verificationKeyPath = `${bbWorkingDirectory}/vk`;
82
+ await fs.writeFile(proofFileName, proof.buffer);
83
+ await fs.writeFile(verificationKeyPath, verificationKey);
93
84
  return await verifyProof(this.bbBinaryPath, proofFileName, verificationKeyPath, logFunction);
94
- }
95
- finally {
96
- await fs.rm(bbWorkingDirectory, { recursive: true, force: true });
97
- }
85
+ };
86
+ return await runInDirectory(this.bbWorkingDirectory, operation);
98
87
  }
99
88
  /**
100
89
  * Returns the verification key data for a circuit, will generate and cache it if not cached internally
@@ -108,37 +97,12 @@ export class BBNativeProofCreator {
108
97
  if (result.status === BB_RESULT.FAILURE) {
109
98
  throw new Error(`Failed to generate verification key for ${circuitType}, ${result.reason}`);
110
99
  }
111
- return this.convertVk(result.vkPath);
100
+ return extractVkData(result.vkPath);
112
101
  });
113
102
  this.verificationKeys.set(circuitType, promise);
114
103
  }
115
104
  return await promise;
116
105
  }
117
- /**
118
- * Reads the verification key data stored at the specified location and parses into a VerificationKeyData
119
- * @param filePath - The directory containing the verification key data files
120
- * @returns The verification key data
121
- */
122
- async convertVk(filePath) {
123
- const [rawFields, rawBinary] = await Promise.all([
124
- fs.readFile(`${filePath}/${VK_FIELDS_FILENAME}`, { encoding: 'utf-8' }),
125
- fs.readFile(`${filePath}/${VK_FILENAME}`),
126
- ]);
127
- const fieldsJson = JSON.parse(rawFields);
128
- const fields = fieldsJson.map(Fr.fromString);
129
- // The first item is the hash, this is not part of the actual VK
130
- const vkHash = fields[0];
131
- const actualVk = fields.slice(1);
132
- const vk = {
133
- hash: vkHash,
134
- keyAsFields: actualVk,
135
- keyAsBytes: rawBinary,
136
- numPublicInputs: Number(actualVk[CIRCUIT_PUBLIC_INPUTS_INDEX]),
137
- circuitSize: Number(actualVk[CIRCUIT_SIZE_INDEX]),
138
- isRecursive: actualVk[CIRCUIT_RECURSIVE_INDEX] == Fr.ONE,
139
- };
140
- return vk;
141
- }
142
106
  /**
143
107
  * Ensures our verification key cache includes the key data located at the specified directory
144
108
  * @param filePath - The directory containing the verification key data files
@@ -147,23 +111,17 @@ export class BBNativeProofCreator {
147
111
  async updateVerificationKeyAfterProof(filePath, circuitType) {
148
112
  let promise = this.verificationKeys.get(circuitType);
149
113
  if (!promise) {
150
- promise = this.convertVk(filePath);
114
+ promise = extractVkData(filePath);
151
115
  this.log.debug(`Updated verification key for circuit: ${circuitType}`);
152
116
  this.verificationKeys.set(circuitType, promise);
153
117
  }
154
118
  return await promise;
155
119
  }
156
120
  async createSafeProof(inputs, circuitType, convertInputs, convertOutputs) {
157
- const directory = `${this.bbWorkingDirectory}/${randomBytes(8).toString('hex')}`;
158
- await fs.mkdir(directory, { recursive: true });
159
- this.log.debug(`Created directory: ${directory}`);
160
- try {
121
+ const operation = async (directory) => {
161
122
  return await this.generateWitnessAndCreateProof(inputs, circuitType, directory, convertInputs, convertOutputs);
162
- }
163
- finally {
164
- await fs.rm(directory, { recursive: true, force: true });
165
- this.log.debug(`Deleted directory: ${directory}`);
166
- }
123
+ };
124
+ return await runInDirectory(this.bbWorkingDirectory, operation);
167
125
  }
168
126
  async generateWitnessAndCreateProof(inputs, circuitType, directory, convertInputs, convertOutputs) {
169
127
  this.log.debug(`Generating witness for ${circuitType}`);
@@ -172,16 +130,14 @@ export class BBNativeProofCreator {
172
130
  const timer = new Timer();
173
131
  const outputWitness = await this.simulator.simulateCircuit(witnessMap, compiledCircuit);
174
132
  const output = convertOutputs(outputWitness);
175
- const inputSize = inputs.toBuffer().length;
176
- const outputSize = output.toBuffer().length;
177
133
  this.log.debug(`Generated witness for ${circuitType}`, {
178
134
  eventName: 'circuit-witness-generation',
179
135
  circuitName: mapProtocolArtifactNameToCircuitName(circuitType),
180
136
  duration: timer.ms(),
181
- inputSize,
182
- outputSize,
137
+ inputSize: inputs.toBuffer().length,
138
+ outputSize: output.toBuffer().length,
183
139
  });
184
- const proofOutput = await this.createProof(directory, outputWitness, Buffer.from(compiledCircuit.bytecode, 'base64'), circuitType, inputSize, outputSize);
140
+ const proofOutput = await this.createProof(directory, outputWitness, Buffer.from(compiledCircuit.bytecode, 'base64'), circuitType);
185
141
  if (proofOutput.proof.proof.length != NESTED_RECURSIVE_PROOF_LENGTH) {
186
142
  throw new Error(`Incorrect proof length`);
187
143
  }
@@ -193,45 +149,47 @@ export class BBNativeProofCreator {
193
149
  };
194
150
  return kernelOutput;
195
151
  }
196
- async createProof(directory, partialWitness, bytecode, circuitType, inputSize, outputSize, appCircuitName) {
152
+ async createProof(directory, partialWitness, bytecode, circuitType, appCircuitName) {
197
153
  const compressedBincodedWitness = serializeWitness(partialWitness);
198
154
  const inputsWitnessFile = `${directory}/witness.gz`;
199
155
  await fs.writeFile(inputsWitnessFile, compressedBincodedWitness);
200
156
  this.log.debug(`Written ${inputsWitnessFile}`);
157
+ this.log.info(`Proving ${circuitType} circuit...`);
158
+ const timer = new Timer();
201
159
  const provingResult = await generateProof(this.bbBinaryPath, directory, circuitType, bytecode, inputsWitnessFile, this.log.debug);
202
160
  if (provingResult.status === BB_RESULT.FAILURE) {
203
161
  this.log.error(`Failed to generate proof for ${circuitType}: ${provingResult.reason}`);
204
162
  throw new Error(provingResult.reason);
205
163
  }
164
+ this.log.info(`Generated ${circuitType === 'App' ? appCircuitName : circuitType} circuit proof in ${timer.ms()} ms`);
206
165
  if (circuitType === 'App') {
207
- const vkData = await this.convertVk(directory);
166
+ const vkData = await extractVkData(directory);
208
167
  const proof = await this.readProofAsFields(directory, circuitType, vkData);
209
168
  this.log.debug(`Generated proof`, {
210
169
  eventName: 'circuit-proving',
211
170
  circuitName: 'app-circuit',
212
171
  duration: provingResult.duration,
213
- inputSize,
214
- outputSize,
172
+ inputSize: compressedBincodedWitness.length,
215
173
  proofSize: proof.binaryProof.buffer.length,
216
174
  appCircuitName,
217
175
  circuitSize: vkData.circuitSize,
218
176
  numPublicInputs: vkData.numPublicInputs,
219
177
  });
220
- return { proof, verificationKey: new VerificationKeyAsFields(vkData.keyAsFields, vkData.hash) };
178
+ return { proof, verificationKey: vkData.keyAsFields };
221
179
  }
222
180
  const vkData = await this.updateVerificationKeyAfterProof(directory, circuitType);
223
181
  const proof = await this.readProofAsFields(directory, circuitType, vkData);
182
+ await this.verifyProofForProtocolCircuit(circuitType, proof.binaryProof);
224
183
  this.log.debug(`Generated proof`, {
225
184
  circuitName: mapProtocolArtifactNameToCircuitName(circuitType),
226
185
  duration: provingResult.duration,
227
186
  eventName: 'circuit-proving',
228
- inputSize,
229
- outputSize,
187
+ inputSize: compressedBincodedWitness.length,
230
188
  proofSize: proof.binaryProof.buffer.length,
231
189
  circuitSize: vkData.circuitSize,
232
190
  numPublicInputs: vkData.numPublicInputs,
233
191
  });
234
- return { proof, verificationKey: new VerificationKeyAsFields(vkData.keyAsFields, vkData.hash) };
192
+ return { proof, verificationKey: vkData.keyAsFields };
235
193
  }
236
194
  /**
237
195
  * Parses and returns the proof data stored at the specified directory
@@ -246,11 +204,11 @@ export class BBNativeProofCreator {
246
204
  ]);
247
205
  const json = JSON.parse(proofString);
248
206
  const fields = json.map(Fr.fromString);
249
- const numPublicInputs = circuitType === 'App' ? vkData.numPublicInputs : vkData.numPublicInputs - AGGREGATION_OBJECT_SIZE;
207
+ const numPublicInputs = circuitType === 'App' ? vkData.numPublicInputs : vkData.numPublicInputs - AGGREGATION_OBJECT_LENGTH;
250
208
  const fieldsWithoutPublicInputs = fields.slice(numPublicInputs);
251
209
  this.log.debug(`Circuit type: ${circuitType}, complete proof length: ${fields.length}, without public inputs: ${fieldsWithoutPublicInputs.length}, num public inputs: ${numPublicInputs}, circuit size: ${vkData.circuitSize}, is recursive: ${vkData.isRecursive}, raw length: ${binaryProof.length}`);
252
- const proof = new RecursiveProof(fieldsWithoutPublicInputs, new Proof(binaryProof));
210
+ const proof = new RecursiveProof(fieldsWithoutPublicInputs, new Proof(binaryProof, vkData.numPublicInputs), true);
253
211
  return proof;
254
212
  }
255
213
  }
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfbmF0aXZlX3Byb29mX2NyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmVyL2JiX25hdGl2ZV9wcm9vZl9jcmVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxFQUFFLEVBQ0YsNkJBQTZCLEVBUTdCLEtBQUssRUFDTCxzQkFBc0IsRUFDdEIsY0FBYyxFQUVkLHVCQUF1QixHQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsNkJBQTZCLEVBQzdCLDBDQUEwQyxFQUMxQyw2Q0FBNkMsRUFDN0MsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QywyQ0FBMkMsRUFDM0MsOENBQThDLEVBQzlDLHNEQUFzRCxFQUN0RCwwQ0FBMEMsRUFDMUMsNkNBQTZDLEVBQzdDLGtEQUFrRCxHQUNuRCxNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixXQUFXLEdBQ1osTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxhQUFhLENBQUM7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
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfbmF0aXZlX3Byb29mX2NyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmVyL2JiX25hdGl2ZV9wcm9vZl9jcmVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsRUFBRSxFQUNGLDZCQUE2QixFQVE3QixLQUFLLEVBQ0wsc0JBQXNCLEVBQ3RCLGNBQWMsR0FHZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsNkJBQTZCLEVBQzdCLDBDQUEwQyxFQUMxQyw2Q0FBNkMsRUFDN0MsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QywyQ0FBMkMsRUFDM0MsOENBQThDLEVBQzlDLHNEQUFzRCxFQUN0RCwwQ0FBMEMsRUFDMUMsNkNBQTZDLEVBQzdDLGtEQUFrRCxHQUNuRCxNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsQyxPQUFPLEVBQ0wsU0FBUyxFQUNULHFCQUFxQixFQUNyQixjQUFjLEVBQ2QseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixXQUFXLEdBQ1osTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRTdFOzs7R0FHRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFRL0IsWUFDVSxZQUFvQixFQUNwQixrQkFBMEIsRUFDMUIsTUFBTSxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQztRQUZqRCxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBOEM7UUFWbkQsY0FBUyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFFaEMscUJBQWdCLEdBQThELElBQUksR0FBRyxFQUcxRixDQUFDO0lBTUQsQ0FBQztJQUVHLG9CQUFvQixDQUFDLFlBQXdDO1FBQ2xFLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUM7UUFFeEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUNwQixZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzlGLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FDMUIsTUFBNkM7UUFFN0MsT0FBTyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQy9CLE1BQU0sRUFDTiwyQkFBMkIsRUFDM0IsMENBQTBDLEVBQzFDLDZDQUE2QyxDQUM5QyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDM0IsTUFBOEM7UUFFOUMsT0FBTyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQy9CLE1BQU0sRUFDTiw0QkFBNEIsRUFDNUIsMkNBQTJDLEVBQzNDLDhDQUE4QyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDM0IsTUFBc0Q7UUFFdEQsT0FBTyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQy9CLE1BQU0sRUFDTiw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQzdDLDJDQUEyQyxFQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDLDhDQUE4QyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQ2pGLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FDMUIsTUFBNkM7UUFFN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUMvQixNQUFNLEVBQ04sMkJBQTJCLEVBQzNCLDBDQUEwQyxFQUMxQyw2Q0FBNkMsQ0FDOUMsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FDL0IsTUFBTSxFQUNOLG1DQUFtQyxFQUNuQyxrREFBa0QsRUFDbEQsc0RBQXNELENBQ3ZELENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLHFCQUFxQixDQUNoQyxjQUEwQixFQUMxQixRQUFnQixFQUNoQixjQUF1QjtRQUV2QixNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN2RyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2dCQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFzRCxDQUFDO1lBQ2pGLE1BQU0sTUFBTSxHQUEwQjtnQkFDcEMsS0FBSztnQkFDTCxlQUFlLEVBQUUsV0FBVyxDQUFDLGVBQWU7YUFDN0MsQ0FBQztZQUNGLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGLE9BQU8sTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLDZCQUE2QixDQUFDLFdBQW1DLEVBQUUsS0FBWTtRQUMxRixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqRixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJGLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLGFBQWEsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU3RixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixXQUFXLFNBQVMsQ0FBQztZQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsV0FBVyxhQUFhLE1BQU0sQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQzlCLGVBQXVCLEVBQ3ZCLEtBQVksRUFDWixjQUF5QyxHQUFHLEVBQUUsR0FBRSxDQUFDO1FBRWpELE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxrQkFBMEIsRUFBRSxFQUFFO1lBQ3JELE1BQU0sYUFBYSxHQUFHLEdBQUcsa0JBQWtCLFFBQVEsQ0FBQztZQUNwRCxNQUFNLG1CQUFtQixHQUFHLEdBQUcsa0JBQWtCLEtBQUssQ0FBQztZQUV2RCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDekQsT0FBTyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxtQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUM7UUFDRixPQUFPLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxXQUFtQztRQUNoRixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sR0FBRyx5QkFBeUIsQ0FDakMsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixXQUFXLEVBQ1gsc0JBQXNCLENBQUMsV0FBVyxDQUFDLEVBQ25DLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDZixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDZCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxXQUFXLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzlGLENBQUM7Z0JBQ0QsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU8sTUFBTSxPQUFPLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsK0JBQStCLENBQUMsUUFBZ0IsRUFBRSxXQUFtQztRQUNqRyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMseUNBQXlDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU8sTUFBTSxPQUFPLENBQUM7SUFDdkIsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlLENBQzNCLE1BQVMsRUFDVCxXQUFtQyxFQUNuQyxhQUF3QyxFQUN4QyxjQUEwQztRQUUxQyxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1lBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2pILENBQUMsQ0FBQztRQUNGLE9BQU8sTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxLQUFLLENBQUMsNkJBQTZCLENBSXpDLE1BQVMsRUFDVCxXQUFtQyxFQUNuQyxTQUFpQixFQUNqQixhQUF3QyxFQUN4QyxjQUEwQztRQUUxQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN4RCxNQUFNLGVBQWUsR0FBd0Isc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakYsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDeEYsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHlCQUF5QixXQUFXLEVBQUUsRUFBRTtZQUNyRCxTQUFTLEVBQUUsNEJBQTRCO1lBQ3ZDLFdBQVcsRUFBRSxvQ0FBb0MsQ0FBQyxXQUFXLENBQUM7WUFDOUQsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDcEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1lBQ25DLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTTtTQUNHLENBQUMsQ0FBQztRQUUzQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQ3hDLFNBQVMsRUFDVCxhQUFhLEVBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUMvQyxXQUFXLENBQ1osQ0FBQztRQUNGLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLDZCQUE2QixFQUFFLENBQUM7WUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBNkQsQ0FBQztRQUU5RixNQUFNLFlBQVksR0FBeUI7WUFDekMsWUFBWSxFQUFFLE1BQU07WUFDcEIsS0FBSyxFQUFFLFdBQVc7WUFDbEIsZUFBZSxFQUFFLFdBQVcsQ0FBQyxlQUFlO1NBQzdDLENBQUM7UUFDRixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FDdkIsU0FBaUIsRUFDakIsY0FBMEIsRUFDMUIsUUFBZ0IsRUFDaEIsV0FBMkMsRUFDM0MsY0FBdUI7UUFLdkIsTUFBTSx5QkFBeUIsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRSxNQUFNLGlCQUFpQixHQUFHLEdBQUcsU0FBUyxhQUFhLENBQUM7UUFFcEQsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxXQUFXLGFBQWEsQ0FBQyxDQUFDO1FBRW5ELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFFMUIsTUFBTSxhQUFhLEdBQUcsTUFBTSxhQUFhLENBQ3ZDLElBQUksQ0FBQyxZQUFZLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDZixDQUFDO1FBRUYsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsV0FBVyxLQUFLLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWCxhQUFhLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxxQkFBcUIsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQ3RHLENBQUM7UUFFRixJQUFJLFdBQVcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBZ0MsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUUxRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEMsU0FBUyxFQUFFLGlCQUFpQjtnQkFDNUIsV0FBVyxFQUFFLGFBQWE7Z0JBQzFCLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtnQkFDaEMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLE1BQU07Z0JBQzNDLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUMxQyxjQUFjO2dCQUNkLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztnQkFDL0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO2FBQ2pCLENBQUMsQ0FBQztZQUUxQixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEQsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLCtCQUErQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVsRixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBdUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVqSCxNQUFNLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO1lBQ2hDLFdBQVcsRUFBRSxvQ0FBb0MsQ0FBQyxXQUFXLENBQUM7WUFDOUQsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQ2hDLFNBQVMsRUFBRSxpQkFBaUI7WUFDNUIsU0FBUyxFQUFFLHlCQUF5QixDQUFDLE1BQU07WUFDM0MsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtTQUNqQixDQUFDLENBQUM7UUFFMUIsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLEtBQUssQ0FBQyxpQkFBaUIsQ0FDN0IsUUFBZ0IsRUFDaEIsV0FBMkMsRUFDM0MsTUFBMkI7UUFFM0IsTUFBTSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDbkQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUM1QyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxJQUFJLHFCQUFxQixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDM0UsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxNQUFNLGVBQWUsR0FDbkIsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztRQUN0RyxNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ1osaUJBQWlCLFdBQVcsNEJBQTRCLE1BQU0sQ0FBQyxNQUFNLDRCQUE0Qix5QkFBeUIsQ0FBQyxNQUFNLHdCQUF3QixlQUFlLG1CQUFtQixNQUFNLENBQUMsV0FBVyxtQkFBbUIsTUFBTSxDQUFDLFdBQVcsaUJBQWlCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FDeFIsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUM5Qix5QkFBeUIsRUFDekIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFDOUMsSUFBSSxDQUNMLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiJ9
@@ -1,15 +1,10 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { type PublicInputsAndProof, type PublicKernelNonTailRequest, type PublicKernelTailRequest, type ServerCircuitProver } from '@aztec/circuit-types';
3
- import { type BaseOrMergeRollupPublicInputs, type BaseParityInputs, type BaseRollupInputs, type KernelCircuitPublicInputs, type MergeRollupInputs, NESTED_RECURSIVE_PROOF_LENGTH, Proof, type PublicKernelCircuitPublicInputs, RECURSIVE_PROOF_LENGTH, RecursiveProof, RootParityInput, type RootParityInputs, type RootRollupInputs, type RootRollupPublicInputs, VerificationKeyAsFields } from '@aztec/circuits.js';
1
+ import { type ProofAndVerificationKey, type PublicInputsAndRecursiveProof, type PublicKernelNonTailRequest, type PublicKernelTailRequest, type ServerCircuitProver } from '@aztec/circuit-types';
2
+ import { type AvmCircuitInputs, type BaseOrMergeRollupPublicInputs, type BaseParityInputs, type BaseRollupInputs, type KernelCircuitPublicInputs, type MergeRollupInputs, NESTED_RECURSIVE_PROOF_LENGTH, type PrivateKernelEmptyInputData, Proof, type PublicKernelCircuitPublicInputs, RECURSIVE_PROOF_LENGTH, RecursiveProof, RootParityInput, type RootParityInputs, type RootRollupInputs, type RootRollupPublicInputs, type VerificationKeyAsFields, type VerificationKeyData } from '@aztec/circuits.js';
4
3
  import { type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
5
- import { type WitnessMap } from '@noir-lang/types';
6
- export type BBProverConfig = {
7
- bbBinaryPath: string;
8
- bbWorkingDirectory: string;
9
- acvmBinaryPath: string;
10
- acvmWorkingDirectory: string;
4
+ import type { ACVMConfig, BBConfig } from '../config.js';
5
+ export interface BBProverConfig extends BBConfig, ACVMConfig {
11
6
  circuitFilter?: ServerProtocolArtifact[];
12
- };
7
+ }
13
8
  /**
14
9
  * Prover implementation that uses barretenberg native proving
15
10
  */
@@ -30,41 +25,49 @@ export declare class BBNativeRollupProver implements ServerCircuitProver {
30
25
  * @returns The public inputs of the parity circuit.
31
26
  */
32
27
  getRootParityProof(inputs: RootParityInputs): Promise<RootParityInput<typeof NESTED_RECURSIVE_PROOF_LENGTH>>;
28
+ /**
29
+ * Creates an AVM proof and verifies it.
30
+ * @param inputs - The inputs to the AVM circuit.
31
+ * @returns The proof.
32
+ */
33
+ getAvmProof(inputs: AvmCircuitInputs): Promise<ProofAndVerificationKey>;
33
34
  /**
34
35
  * Requests that a public kernel circuit be executed and the proof generated
35
36
  * @param kernelRequest - The object encapsulating the request for a proof
36
37
  * @returns The requested circuit's public inputs and proof
37
38
  */
38
- getPublicKernelProof(kernelRequest: PublicKernelNonTailRequest): Promise<PublicInputsAndProof<PublicKernelCircuitPublicInputs>>;
39
+ getPublicKernelProof(kernelRequest: PublicKernelNonTailRequest): Promise<PublicInputsAndRecursiveProof<PublicKernelCircuitPublicInputs>>;
39
40
  /**
40
41
  * Requests that the public kernel tail circuit be executed and the proof generated
41
42
  * @param kernelRequest - The object encapsulating the request for a proof
42
43
  * @returns The requested circuit's public inputs and proof
43
44
  */
44
- getPublicTailProof(kernelRequest: PublicKernelTailRequest): Promise<PublicInputsAndProof<KernelCircuitPublicInputs>>;
45
+ getPublicTailProof(kernelRequest: PublicKernelTailRequest): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>>;
45
46
  /**
46
47
  * Simulates the base rollup circuit from its inputs.
47
48
  * @param input - Inputs to the circuit.
48
49
  * @returns The public inputs as outputs of the simulation.
49
50
  */
50
- getBaseRollupProof(input: BaseRollupInputs): Promise<PublicInputsAndProof<BaseOrMergeRollupPublicInputs>>;
51
+ getBaseRollupProof(input: BaseRollupInputs): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>>;
51
52
  /**
52
53
  * Simulates the merge rollup circuit from its inputs.
53
54
  * @param input - Inputs to the circuit.
54
55
  * @returns The public inputs as outputs of the simulation.
55
56
  */
56
- getMergeRollupProof(input: MergeRollupInputs): Promise<PublicInputsAndProof<BaseOrMergeRollupPublicInputs>>;
57
+ getMergeRollupProof(input: MergeRollupInputs): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>>;
57
58
  /**
58
59
  * Simulates the root rollup circuit from its inputs.
59
60
  * @param input - Inputs to the circuit.
60
61
  * @returns The public inputs as outputs of the simulation.
61
62
  */
62
- getRootRollupProof(input: RootRollupInputs): Promise<PublicInputsAndProof<RootRollupPublicInputs>>;
63
- createProof<Input extends {
64
- toBuffer: () => Buffer;
65
- }, Output extends {
66
- toBuffer: () => Buffer;
67
- }>(input: Input, circuitType: ServerProtocolArtifact, convertInput: (input: Input) => WitnessMap, convertOutput: (outputWitness: WitnessMap) => Output): Promise<[Output, Proof]>;
63
+ getRootRollupProof(input: RootRollupInputs): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs>>;
64
+ getEmptyPrivateKernelProof(inputs: PrivateKernelEmptyInputData): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>>;
65
+ private getEmptyNestedProof;
66
+ private getEmptyPrivateKernelProofFromEmptyNested;
67
+ private generateProofWithBB;
68
+ private createProof;
69
+ private generateAvmProofWithBB;
70
+ private createAvmProof;
68
71
  /**
69
72
  * Executes a circuit and returns it's outputs and corresponding proof with embedded aggregation object
70
73
  * @param witnessMap - The input witness
@@ -74,36 +77,34 @@ export declare class BBNativeRollupProver implements ServerCircuitProver {
74
77
  * @param convertOutput - Function for parsing the output witness to it's corresponding object
75
78
  * @returns The circuits output object and it's proof
76
79
  */
77
- createRecursiveProof<PROOF_LENGTH extends number, CircuitInputType extends {
78
- toBuffer: () => Buffer;
79
- }, CircuitOutputType extends {
80
- toBuffer: () => Buffer;
81
- }>(input: CircuitInputType, circuitType: ServerProtocolArtifact, proofLength: PROOF_LENGTH, convertInput: (input: CircuitInputType) => WitnessMap, convertOutput: (outputWitness: WitnessMap) => CircuitOutputType): Promise<[CircuitOutputType, RecursiveProof<PROOF_LENGTH>]>;
80
+ private createRecursiveProof;
82
81
  /**
83
82
  * Verifies a proof, will generate the verification key if one is not cached internally
84
83
  * @param circuitType - The type of circuit whose proof is to be verified
85
84
  * @param proof - The proof to be verified
86
85
  */
87
86
  verifyProof(circuitType: ServerProtocolArtifact, proof: Proof): Promise<void>;
87
+ verifyAvmProof(proof: Proof, verificationKey: VerificationKeyData): Promise<void>;
88
+ verifyWithKey(verificationKey: VerificationKeyData, proof: Proof): Promise<void>;
89
+ private verifyWithKeyInternal;
88
90
  /**
89
91
  * Returns the verification key for a circuit, will generate it if not cached internally
90
92
  * @param circuitType - The type of circuit for which the verification key is required
91
93
  * @returns The verification key
92
94
  */
93
95
  getVerificationKeyForCircuit(circuitType: ServerProtocolArtifact): Promise<VerificationKeyAsFields>;
94
- private verifyPreviousRollupProof;
96
+ /**
97
+ * Will check a recursive proof argument for validity of it's 'fields' format of proof and convert if required
98
+ * @param proof - The input proof that may need converting
99
+ * @returns - The valid proof
100
+ */
101
+ ensureValidProof(proof: RecursiveProof<typeof NESTED_RECURSIVE_PROOF_LENGTH>, circuit: ServerProtocolArtifact, vk: VerificationKeyData): Promise<RecursiveProof<109>>;
95
102
  /**
96
103
  * Returns the verification key data for a circuit, will generate and cache it if not cached internally
97
104
  * @param circuitType - The type of circuit for which the verification key is required
98
105
  * @returns The verification key data
99
106
  */
100
107
  private getVerificationKeyDataForCircuit;
101
- /**
102
- * Reads the verification key data stored at the specified location and parses into a VerificationKeyData
103
- * @param filePath - The directory containing the verification key data files
104
- * @returns The verification key data
105
- */
106
- private convertVk;
107
108
  /**
108
109
  * Ensures our verification key cache includes the key data located at the specified directory
109
110
  * @param filePath - The directory containing the verification key data files
@@ -1 +1 @@
1
- {"version":3,"file":"bb_prover.d.ts","sourceRoot":"","sources":["../../src/prover/bb_prover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bb_prover.d.ts","sourceRoot":"","sources":["../../src/prover/bb_prover.ts"],"names":[],"mappings":"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"}