@aztec/bb-prover 0.82.3 → 0.83.1-alpha-testnet.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.
- package/dest/bb/execute.d.ts +2 -0
- package/dest/bb/execute.d.ts.map +1 -1
- package/dest/bb/execute.js +27 -7
- package/dest/instrumentation.d.ts.map +1 -1
- package/dest/instrumentation.js +2 -4
- package/dest/prover/bb_prover.d.ts.map +1 -1
- package/dest/prover/bb_prover.js +26 -13
- package/package.json +15 -15
- package/src/bb/execute.ts +14 -1
- package/src/instrumentation.ts +0 -2
- package/src/prover/bb_prover.ts +33 -16
package/dest/bb/execute.d.ts
CHANGED
|
@@ -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";
|
package/dest/bb/execute.d.ts.map
CHANGED
|
@@ -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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"}
|
package/dest/bb/execute.js
CHANGED
|
@@ -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
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
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;
|
|
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"}
|
package/dest/instrumentation.js
CHANGED
|
@@ -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":"AACA,OAAO,EAEL,0BAA0B,EAE1B,6BAA6B,EAC7B,yCAAyC,EACzC,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EACL,KAAK,sBAAsB,EAsB5B,MAAM,4CAA4C,CAAC;AAIpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EAGzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,KAAK,EAAgD,MAAM,sBAAsB,CAAC;AAC3F,OAAO,KAAK,EACV,6BAA6B,EAC7B,sBAAsB,EACtB,iCAAiC,EACjC,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,6BAA6B,EAC7B,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAc,KAAK,eAAe,EAAiC,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"bb_prover.d.ts","sourceRoot":"","sources":["../../src/prover/bb_prover.ts"],"names":[],"mappings":"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"}
|
package/dest/prover/bb_prover.js
CHANGED
|
@@ -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 =
|
|
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(
|
|
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
|
|
392
|
-
const fieldsWithoutPublicInputs = json.
|
|
393
|
-
|
|
394
|
-
|
|
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.
|
|
3
|
+
"version": "0.83.1-alpha-testnet.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.
|
|
72
|
-
"@aztec/constants": "0.
|
|
73
|
-
"@aztec/foundation": "0.
|
|
74
|
-
"@aztec/noir-noirc_abi": "0.
|
|
75
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
76
|
-
"@aztec/noir-types": "0.
|
|
77
|
-
"@aztec/simulator": "0.
|
|
78
|
-
"@aztec/stdlib": "0.
|
|
79
|
-
"@aztec/telemetry-client": "0.
|
|
80
|
-
"@aztec/world-state": "0.
|
|
71
|
+
"@aztec/bb.js": "0.83.1-alpha-testnet.0",
|
|
72
|
+
"@aztec/constants": "0.83.1-alpha-testnet.0",
|
|
73
|
+
"@aztec/foundation": "0.83.1-alpha-testnet.0",
|
|
74
|
+
"@aztec/noir-noirc_abi": "0.83.1-alpha-testnet.0",
|
|
75
|
+
"@aztec/noir-protocol-circuits-types": "0.83.1-alpha-testnet.0",
|
|
76
|
+
"@aztec/noir-types": "0.83.1-alpha-testnet.0",
|
|
77
|
+
"@aztec/simulator": "0.83.1-alpha-testnet.0",
|
|
78
|
+
"@aztec/stdlib": "0.83.1-alpha-testnet.0",
|
|
79
|
+
"@aztec/telemetry-client": "0.83.1-alpha-testnet.0",
|
|
80
|
+
"@aztec/world-state": "0.83.1-alpha-testnet.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.
|
|
89
|
-
"@aztec/kv-store": "0.
|
|
90
|
-
"@aztec/noir-contracts.js": "0.
|
|
91
|
-
"@aztec/protocol-contracts": "0.
|
|
88
|
+
"@aztec/ethereum": "0.83.1-alpha-testnet.0",
|
|
89
|
+
"@aztec/kv-store": "0.83.1-alpha-testnet.0",
|
|
90
|
+
"@aztec/noir-contracts.js": "0.83.1-alpha-testnet.0",
|
|
91
|
+
"@aztec/protocol-contracts": "0.83.1-alpha-testnet.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
|
-
|
|
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 !== '') {
|
package/src/instrumentation.ts
CHANGED
|
@@ -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
|
|
package/src/prover/bb_prover.ts
CHANGED
|
@@ -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 =
|
|
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
|
|
752
|
+
assert(json.length == proofLength, 'Proof length mismatch');
|
|
750
753
|
|
|
751
|
-
const fieldsWithoutPublicInputs = json.
|
|
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: ${
|
|
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(
|