@aztec/bb-prover 0.82.3 → 0.83.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.
@@ -5,6 +5,8 @@ import type { AvmCircuitInputs, AvmCircuitPublicInputs } from '@aztec/stdlib/avm
5
5
  import type { UltraHonkFlavor } from '../honk.js';
6
6
  export declare const VK_FILENAME = "vk";
7
7
  export declare const VK_FIELDS_FILENAME = "vk_fields.json";
8
+ export declare const PUBLIC_INPUTS_FILENAME = "public_inputs";
9
+ export declare const PUBLIC_INPUTS_FIELDS_FILENAME = "public_inputs_fields.json";
8
10
  export declare const PROOF_FILENAME = "proof";
9
11
  export declare const PROOF_FIELDS_FILENAME = "proof_fields.json";
10
12
  export declare const AVM_INPUTS_FILENAME = "avm_inputs.bin";
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/bb/execute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/bb/execute.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ import { basename, dirname, join } from 'path';
6
6
  import { CLIENT_IVC_PROOF_FILE_NAME } from '../prover/client_ivc_proof_utils.js';
7
7
  export const VK_FILENAME = 'vk';
8
8
  export const VK_FIELDS_FILENAME = 'vk_fields.json';
9
+ export const PUBLIC_INPUTS_FILENAME = 'public_inputs';
10
+ export const PUBLIC_INPUTS_FIELDS_FILENAME = 'public_inputs_fields.json';
9
11
  export const PROOF_FILENAME = 'proof';
10
12
  export const PROOF_FIELDS_FILENAME = 'proof_fields.json';
11
13
  export const AVM_INPUTS_FILENAME = 'avm_inputs.bin';
@@ -591,14 +593,32 @@ export async function verifyAvmProofV2(pathToBB, workingDirectory, proofFullPath
591
593
  const logFunction = (message)=>{
592
594
  logger.verbose(`bb-prover (verify) BB out - ${message}`);
593
595
  };
596
+ // take proofFullPath and remove the suffix past the / to get the directory
597
+ const proofDir = proofFullPath.substring(0, proofFullPath.lastIndexOf('/'));
598
+ const publicInputsFullPath = join(proofDir, '/public_inputs');
599
+ logger.debug(`public inputs path: ${publicInputsFullPath}`);
594
600
  try {
595
- const args = [
596
- '-p',
597
- proofFullPath,
598
- '-k',
599
- verificationKeyPath,
600
- ...extraArgs
601
- ];
601
+ let args;
602
+ // Specify the public inputs path in the case of UH verification.
603
+ if (command == 'verify') {
604
+ args = [
605
+ '-p',
606
+ proofFullPath,
607
+ '-k',
608
+ verificationKeyPath,
609
+ '-i',
610
+ publicInputsFullPath,
611
+ ...extraArgs
612
+ ];
613
+ } else {
614
+ args = [
615
+ '-p',
616
+ proofFullPath,
617
+ '-k',
618
+ verificationKeyPath,
619
+ ...extraArgs
620
+ ];
621
+ }
602
622
  const loggingArg = logger.level === 'debug' || logger.level === 'trace' ? '-d' : logger.level === 'verbose' ? '-v' : '';
603
623
  if (loggingArg !== '') {
604
624
  args.push(loggingArg);
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAEZ,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,eAAe,CAAY;IAEnC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,gBAAgB,CAAQ;IAEhC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,uBAAuB,CAAQ;IAEvC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IAmDpD;;;;;OAKG;IACH,cAAc,CACZ,MAAM,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,iBAAiB,EACnE,WAAW,EAAE,WAAW,GAAG,aAAa,EACxC,SAAS,EAAE,KAAK,GAAG,MAAM;IAS3B;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM;IAOjH;;;;;OAKG;IACH,UAAU,CACR,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,yBAAyB,EACxG,WAAW,EAAE,WAAW,GAAG,aAAa,EACxC,IAAI,EAAE,MAAM;IAQd;;;;;OAKG;IACH,aAAa,CACX,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,yBAAyB,EACxG,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM;CAMf"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAEZ,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,eAAe,CAAY;IAEnC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,gBAAgB,CAAQ;IAEhC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,uBAAuB,CAAQ;IAEvC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IAmDpD;;;;;OAKG;IACH,cAAc,CACZ,MAAM,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,iBAAiB,EACnE,WAAW,EAAE,WAAW,GAAG,aAAa,EACxC,SAAS,EAAE,KAAK,GAAG,MAAM;IAQ3B;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM;IAOjH;;;;;OAKG;IACH,UAAU,CACR,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,yBAAyB,EACxG,WAAW,EAAE,WAAW,GAAG,aAAa,EACxC,IAAI,EAAE,MAAM;IAOd;;;;;OAKG;IACH,aAAa,CACX,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,yBAAyB,EACxG,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM;CAMf"}
@@ -61,8 +61,7 @@ import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
61
61
  */ recordDuration(metric, circuitName, timerOrMS) {
62
62
  const s = typeof timerOrMS === 'number' ? timerOrMS / 1000 : timerOrMS.s();
63
63
  this[metric].record(s, {
64
- [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
65
- [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server'
64
+ [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName
66
65
  });
67
66
  }
68
67
  /**
@@ -83,8 +82,7 @@ import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
83
82
  * @param size - The size
84
83
  */ recordSize(metric, circuitName, size) {
85
84
  this[metric].record(Math.ceil(size), {
86
- [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
87
- [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server'
85
+ [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName
88
86
  });
89
87
  }
90
88
  /**
@@ -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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"}
@@ -21,7 +21,7 @@ import { assert } from 'console';
21
21
  import crypto from 'crypto';
22
22
  import { promises as fs } from 'fs';
23
23
  import * as path from 'path';
24
- import { BB_RESULT, PROOF_FIELDS_FILENAME, PROOF_FILENAME, VK_FILENAME, generateAvmProof, generateProof, generateTubeProof, verifyAvmProof, verifyProof } from '../bb/execute.js';
24
+ import { BB_RESULT, PROOF_FIELDS_FILENAME, PROOF_FILENAME, PUBLIC_INPUTS_FILENAME, VK_FILENAME, generateAvmProof, generateProof, generateTubeProof, verifyAvmProof, verifyProof } from '../bb/execute.js';
25
25
  import { getUltraHonkFlavorForCircuit } from '../honk.js';
26
26
  import { ProverInstrumentation } from '../instrumentation.js';
27
27
  import { mapProtocolArtifactNameToCircuitName } from '../stats.js';
@@ -162,6 +162,8 @@ const SERVER_CIRCUIT_RECURSIVE = true;
162
162
  const recursiveProof = makeRecursiveProofFromBinary(proof, NESTED_RECURSIVE_PROOF_LENGTH);
163
163
  const verificationKey = this.getVerificationKeyDataForCircuit('RootRollupArtifact');
164
164
  await this.verifyProof('RootRollupArtifact', proof);
165
+ // TODO(https://github.com/AztecProtocol/aztec-packages/issues/13188): Remove this hack.
166
+ recursiveProof.binaryProof.numPublicInputs += AGGREGATION_OBJECT_LENGTH;
165
167
  return makePublicInputsAndRecursiveProof(circuitOutput, recursiveProof, verificationKey);
166
168
  }
167
169
  async generateProofWithBB(input, circuitType, convertInput, convertOutput, workingDirectory) {
@@ -203,20 +205,18 @@ const SERVER_CIRCUIT_RECURSIVE = true;
203
205
  async createProof(input, circuitType, convertInput, convertOutput) {
204
206
  const operation = async (bbWorkingDirectory)=>{
205
207
  const { provingResult, circuitOutput: output } = await this.generateProofWithBB(input, circuitType, convertInput, convertOutput, bbWorkingDirectory);
206
- // Read the binary proof
207
- const rawProof = await fs.readFile(`${provingResult.proofPath}/${PROOF_FILENAME}`);
208
208
  const vkData = this.getVerificationKeyDataForCircuit(circuitType);
209
- const proof = new Proof(rawProof, vkData.numPublicInputs);
209
+ const proof = await this.readProofAsFields(provingResult.proofPath, vkData, RECURSIVE_PROOF_LENGTH);
210
210
  const circuitName = mapProtocolArtifactNameToCircuitName(circuitType);
211
211
  this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs);
212
- this.instrumentation.recordSize('proofSize', circuitName, proof.buffer.length);
212
+ this.instrumentation.recordSize('proofSize', circuitName, proof.binaryProof.buffer.length);
213
213
  this.instrumentation.recordSize('circuitPublicInputCount', circuitName, vkData.numPublicInputs);
214
214
  this.instrumentation.recordSize('circuitSize', circuitName, vkData.circuitSize);
215
215
  logger.info(`Generated proof for ${circuitType} in ${Math.ceil(provingResult.durationMs)} ms`, {
216
216
  circuitName,
217
217
  // does not include reading the proof from disk
218
218
  duration: provingResult.durationMs,
219
- proofSize: proof.buffer.length,
219
+ proofSize: proof.binaryProof.buffer.length,
220
220
  eventName: 'circuit-proving',
221
221
  // circuitOutput is the partial witness that became the input to the proof
222
222
  inputSize: output.toBuffer().length,
@@ -225,7 +225,7 @@ const SERVER_CIRCUIT_RECURSIVE = true;
225
225
  });
226
226
  return {
227
227
  circuitOutput: output,
228
- proof
228
+ proof: proof.binaryProof
229
229
  };
230
230
  };
231
231
  return await this.runInDirectory(operation);
@@ -350,9 +350,11 @@ const SERVER_CIRCUIT_RECURSIVE = true;
350
350
  }
351
351
  async verifyWithKeyInternal(proof, verificationKey, verificationFunction) {
352
352
  const operation = async (bbWorkingDirectory)=>{
353
+ const publicInputsFileName = path.join(bbWorkingDirectory, PUBLIC_INPUTS_FILENAME);
353
354
  const proofFileName = path.join(bbWorkingDirectory, PROOF_FILENAME);
354
355
  const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
355
- await fs.writeFile(proofFileName, proof.buffer);
356
+ await fs.writeFile(publicInputsFileName, proof.buffer.slice(0, proof.numPublicInputs * 32 + 4));
357
+ await fs.writeFile(proofFileName, proof.buffer.slice(proof.numPublicInputs * 32 + 4));
356
358
  await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
357
359
  const result = await verificationFunction(proofFileName, verificationKeyPath);
358
360
  if (result.status === BB_RESULT.FAILURE) {
@@ -375,9 +377,11 @@ const SERVER_CIRCUIT_RECURSIVE = true;
375
377
  return vk;
376
378
  }
377
379
  async readProofAsFields(filePath, vkData, proofLength) {
380
+ const publicInputsFilename = path.join(filePath, PUBLIC_INPUTS_FILENAME);
378
381
  const proofFilename = path.join(filePath, PROOF_FILENAME);
379
382
  const proofFieldsFilename = path.join(filePath, PROOF_FIELDS_FILENAME);
380
- const [binaryProof, proofString] = await Promise.all([
383
+ const [binaryPublicInputs, binaryProof, proofString] = await Promise.all([
384
+ fs.readFile(publicInputsFilename),
381
385
  fs.readFile(proofFilename),
382
386
  fs.readFile(proofFieldsFilename, {
383
387
  encoding: 'utf-8'
@@ -388,10 +392,19 @@ const SERVER_CIRCUIT_RECURSIVE = true;
388
392
  if (proofLength == NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH) {
389
393
  numPublicInputs -= IPA_CLAIM_LENGTH;
390
394
  }
391
- assert(json.length - numPublicInputs == proofLength, 'Proof length mismatch');
392
- const fieldsWithoutPublicInputs = json.slice(numPublicInputs).map(Fr.fromHexString);
393
- logger.debug(`Circuit path: ${filePath}, complete proof length: ${json.length}, num public inputs: ${numPublicInputs}, circuit size: ${vkData.circuitSize}, is recursive: ${vkData.isRecursive}, raw length: ${binaryProof.length}`);
394
- return new RecursiveProof(fieldsWithoutPublicInputs, new Proof(binaryProof, numPublicInputs), true, proofLength);
395
+ assert(json.length == proofLength, 'Proof length mismatch');
396
+ const fieldsWithoutPublicInputs = json.map(Fr.fromHexString);
397
+ // Concat binary public inputs and binary proof
398
+ // This buffer will have the form: [4 bytes of metadata for public inputs, binary public inputs, 4 bytes of metadata for proof, binary proof]
399
+ const binaryProofWithPublicInputs = Buffer.concat([
400
+ binaryPublicInputs,
401
+ binaryProof
402
+ ]);
403
+ // TODO(https://github.com/AztecProtocol/barretenberg/issues/1312): Get rid of if possible.
404
+ const metadataLength = 4;
405
+ assert(binaryProofWithPublicInputs.length == metadataLength + numPublicInputs * 32 + metadataLength + NESTED_RECURSIVE_PROOF_LENGTH * 32);
406
+ logger.debug(`Circuit path: ${filePath}, complete proof length: ${json.length}, num public inputs: ${numPublicInputs}, circuit size: ${vkData.circuitSize}, is recursive: ${vkData.isRecursive}, raw length: ${binaryProofWithPublicInputs.length}`);
407
+ return new RecursiveProof(fieldsWithoutPublicInputs, new Proof(binaryProofWithPublicInputs, numPublicInputs), true, proofLength);
395
408
  }
396
409
  async readAvmProofAsFields(proofFilename, vkData) {
397
410
  const rawProof = await fs.readFile(proofFilename);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/bb-prover",
3
- "version": "0.82.3",
3
+ "version": "0.83.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -68,16 +68,16 @@
68
68
  ]
69
69
  },
70
70
  "dependencies": {
71
- "@aztec/bb.js": "0.82.3",
72
- "@aztec/constants": "0.82.3",
73
- "@aztec/foundation": "0.82.3",
74
- "@aztec/noir-noirc_abi": "0.82.3",
75
- "@aztec/noir-protocol-circuits-types": "0.82.3",
76
- "@aztec/noir-types": "0.82.3",
77
- "@aztec/simulator": "0.82.3",
78
- "@aztec/stdlib": "0.82.3",
79
- "@aztec/telemetry-client": "0.82.3",
80
- "@aztec/world-state": "0.82.3",
71
+ "@aztec/bb.js": "0.83.0",
72
+ "@aztec/constants": "0.83.0",
73
+ "@aztec/foundation": "0.83.0",
74
+ "@aztec/noir-noirc_abi": "0.83.0",
75
+ "@aztec/noir-protocol-circuits-types": "0.83.0",
76
+ "@aztec/noir-types": "0.83.0",
77
+ "@aztec/simulator": "0.83.0",
78
+ "@aztec/stdlib": "0.83.0",
79
+ "@aztec/telemetry-client": "0.83.0",
80
+ "@aztec/world-state": "0.83.0",
81
81
  "@msgpack/msgpack": "^3.0.0-beta2",
82
82
  "commander": "^12.1.0",
83
83
  "pako": "^2.1.0",
@@ -85,10 +85,10 @@
85
85
  "tslib": "^2.4.0"
86
86
  },
87
87
  "devDependencies": {
88
- "@aztec/ethereum": "0.82.3",
89
- "@aztec/kv-store": "0.82.3",
90
- "@aztec/noir-contracts.js": "0.82.3",
91
- "@aztec/protocol-contracts": "0.82.3",
88
+ "@aztec/ethereum": "0.83.0",
89
+ "@aztec/kv-store": "0.83.0",
90
+ "@aztec/noir-contracts.js": "0.83.0",
91
+ "@aztec/protocol-contracts": "0.83.0",
92
92
  "@jest/globals": "^29.5.0",
93
93
  "@types/jest": "^29.5.0",
94
94
  "@types/memdown": "^3.0.0",
package/src/bb/execute.ts CHANGED
@@ -12,6 +12,8 @@ import { CLIENT_IVC_PROOF_FILE_NAME } from '../prover/client_ivc_proof_utils.js'
12
12
 
13
13
  export const VK_FILENAME = 'vk';
14
14
  export const VK_FIELDS_FILENAME = 'vk_fields.json';
15
+ export const PUBLIC_INPUTS_FILENAME = 'public_inputs';
16
+ export const PUBLIC_INPUTS_FIELDS_FILENAME = 'public_inputs_fields.json';
15
17
  export const PROOF_FILENAME = 'proof';
16
18
  export const PROOF_FIELDS_FILENAME = 'proof_fields.json';
17
19
  export const AVM_INPUTS_FILENAME = 'avm_inputs.bin';
@@ -666,8 +668,19 @@ async function verifyProofInternal(
666
668
  logger.verbose(`bb-prover (verify) BB out - ${message}`);
667
669
  };
668
670
 
671
+ // take proofFullPath and remove the suffix past the / to get the directory
672
+ const proofDir = proofFullPath.substring(0, proofFullPath.lastIndexOf('/'));
673
+ const publicInputsFullPath = join(proofDir, '/public_inputs');
674
+
675
+ logger.debug(`public inputs path: ${publicInputsFullPath}`);
669
676
  try {
670
- const args = ['-p', proofFullPath, '-k', verificationKeyPath, ...extraArgs];
677
+ let args;
678
+ // Specify the public inputs path in the case of UH verification.
679
+ if (command == 'verify') {
680
+ args = ['-p', proofFullPath, '-k', verificationKeyPath, '-i', publicInputsFullPath, ...extraArgs];
681
+ } else {
682
+ args = ['-p', proofFullPath, '-k', verificationKeyPath, ...extraArgs];
683
+ }
671
684
  const loggingArg =
672
685
  logger.level === 'debug' || logger.level === 'trace' ? '-d' : logger.level === 'verbose' ? '-v' : '';
673
686
  if (loggingArg !== '') {
@@ -92,7 +92,6 @@ export class ProverInstrumentation {
92
92
  const s = typeof timerOrMS === 'number' ? timerOrMS / 1000 : timerOrMS.s();
93
93
  this[metric].record(s, {
94
94
  [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
95
- [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
96
95
  });
97
96
  }
98
97
 
@@ -122,7 +121,6 @@ export class ProverInstrumentation {
122
121
  ) {
123
122
  this[metric].record(Math.ceil(size), {
124
123
  [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
125
- [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
126
124
  });
127
125
  }
128
126
 
@@ -80,6 +80,7 @@ import {
80
80
  BB_RESULT,
81
81
  PROOF_FIELDS_FILENAME,
82
82
  PROOF_FILENAME,
83
+ PUBLIC_INPUTS_FILENAME,
83
84
  VK_FILENAME,
84
85
  generateAvmProof,
85
86
  generateProof,
@@ -386,7 +387,8 @@ export class BBNativeRollupProver implements ServerCircuitProver {
386
387
  const verificationKey = this.getVerificationKeyDataForCircuit('RootRollupArtifact');
387
388
 
388
389
  await this.verifyProof('RootRollupArtifact', proof);
389
-
390
+ // TODO(https://github.com/AztecProtocol/aztec-packages/issues/13188): Remove this hack.
391
+ recursiveProof.binaryProof.numPublicInputs += AGGREGATION_OBJECT_LENGTH;
390
392
  return makePublicInputsAndRecursiveProof(circuitOutput, recursiveProof, verificationKey);
391
393
  }
392
394
 
@@ -473,15 +475,13 @@ export class BBNativeRollupProver implements ServerCircuitProver {
473
475
  convertOutput,
474
476
  bbWorkingDirectory,
475
477
  );
476
-
477
- // Read the binary proof
478
- const rawProof = await fs.readFile(`${provingResult.proofPath!}/${PROOF_FILENAME}`);
479
478
  const vkData = this.getVerificationKeyDataForCircuit(circuitType);
480
- const proof = new Proof(rawProof, vkData.numPublicInputs);
479
+ const proof = await this.readProofAsFields(provingResult.proofPath!, vkData, RECURSIVE_PROOF_LENGTH);
480
+
481
481
  const circuitName = mapProtocolArtifactNameToCircuitName(circuitType);
482
482
 
483
483
  this.instrumentation.recordDuration('provingDuration', circuitName, provingResult.durationMs);
484
- this.instrumentation.recordSize('proofSize', circuitName, proof.buffer.length);
484
+ this.instrumentation.recordSize('proofSize', circuitName, proof.binaryProof.buffer.length);
485
485
  this.instrumentation.recordSize('circuitPublicInputCount', circuitName, vkData.numPublicInputs);
486
486
  this.instrumentation.recordSize('circuitSize', circuitName, vkData.circuitSize);
487
487
 
@@ -489,7 +489,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
489
489
  circuitName,
490
490
  // does not include reading the proof from disk
491
491
  duration: provingResult.durationMs,
492
- proofSize: proof.buffer.length,
492
+ proofSize: proof.binaryProof.buffer.length,
493
493
  eventName: 'circuit-proving',
494
494
  // circuitOutput is the partial witness that became the input to the proof
495
495
  inputSize: output.toBuffer().length,
@@ -497,7 +497,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
497
497
  numPublicInputs: vkData.numPublicInputs,
498
498
  } satisfies CircuitProvingStats);
499
499
 
500
- return { circuitOutput: output, proof };
500
+ return { circuitOutput: output, proof: proof.binaryProof };
501
501
  };
502
502
  return await this.runInDirectory(operation);
503
503
  }
@@ -694,10 +694,11 @@ export class BBNativeRollupProver implements ServerCircuitProver {
694
694
  verificationFunction: (proofPath: string, vkPath: string) => Promise<BBFailure | BBSuccess>,
695
695
  ) {
696
696
  const operation = async (bbWorkingDirectory: string) => {
697
+ const publicInputsFileName = path.join(bbWorkingDirectory, PUBLIC_INPUTS_FILENAME);
697
698
  const proofFileName = path.join(bbWorkingDirectory, PROOF_FILENAME);
698
699
  const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
699
-
700
- await fs.writeFile(proofFileName, proof.buffer);
700
+ await fs.writeFile(publicInputsFileName, proof.buffer.slice(0, proof.numPublicInputs * 32 + 4));
701
+ await fs.writeFile(proofFileName, proof.buffer.slice(proof.numPublicInputs * 32 + 4));
701
702
  await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
702
703
 
703
704
  const result = await verificationFunction(proofFileName, verificationKeyPath!);
@@ -731,10 +732,12 @@ export class BBNativeRollupProver implements ServerCircuitProver {
731
732
  vkData: VerificationKeyData,
732
733
  proofLength: PROOF_LENGTH,
733
734
  ): Promise<RecursiveProof<PROOF_LENGTH>> {
735
+ const publicInputsFilename = path.join(filePath, PUBLIC_INPUTS_FILENAME);
734
736
  const proofFilename = path.join(filePath, PROOF_FILENAME);
735
737
  const proofFieldsFilename = path.join(filePath, PROOF_FIELDS_FILENAME);
736
738
 
737
- const [binaryProof, proofString] = await Promise.all([
739
+ const [binaryPublicInputs, binaryProof, proofString] = await Promise.all([
740
+ fs.readFile(publicInputsFilename),
738
741
  fs.readFile(proofFilename),
739
742
  fs.readFile(proofFieldsFilename, { encoding: 'utf-8' }),
740
743
  ]);
@@ -746,14 +749,28 @@ export class BBNativeRollupProver implements ServerCircuitProver {
746
749
  numPublicInputs -= IPA_CLAIM_LENGTH;
747
750
  }
748
751
 
749
- assert(json.length - numPublicInputs == proofLength, 'Proof length mismatch');
752
+ assert(json.length == proofLength, 'Proof length mismatch');
750
753
 
751
- const fieldsWithoutPublicInputs = json.slice(numPublicInputs).map(Fr.fromHexString);
754
+ const fieldsWithoutPublicInputs = json.map(Fr.fromHexString);
755
+
756
+ // Concat binary public inputs and binary proof
757
+ // This buffer will have the form: [4 bytes of metadata for public inputs, binary public inputs, 4 bytes of metadata for proof, binary proof]
758
+ const binaryProofWithPublicInputs = Buffer.concat([binaryPublicInputs, binaryProof]);
759
+ // TODO(https://github.com/AztecProtocol/barretenberg/issues/1312): Get rid of if possible.
760
+ const metadataLength = 4;
761
+ assert(
762
+ binaryProofWithPublicInputs.length ==
763
+ metadataLength + numPublicInputs * 32 + metadataLength + NESTED_RECURSIVE_PROOF_LENGTH * 32,
764
+ );
752
765
  logger.debug(
753
- `Circuit path: ${filePath}, complete proof length: ${json.length}, num public inputs: ${numPublicInputs}, circuit size: ${vkData.circuitSize}, is recursive: ${vkData.isRecursive}, raw length: ${binaryProof.length}`,
766
+ `Circuit path: ${filePath}, complete proof length: ${json.length}, num public inputs: ${numPublicInputs}, circuit size: ${vkData.circuitSize}, is recursive: ${vkData.isRecursive}, raw length: ${binaryProofWithPublicInputs.length}`,
767
+ );
768
+ return new RecursiveProof(
769
+ fieldsWithoutPublicInputs,
770
+ new Proof(binaryProofWithPublicInputs, numPublicInputs),
771
+ true,
772
+ proofLength,
754
773
  );
755
-
756
- return new RecursiveProof(fieldsWithoutPublicInputs, new Proof(binaryProof, numPublicInputs), true, proofLength);
757
774
  }
758
775
 
759
776
  private async readAvmProofAsFields(