@aztec/bb-prover 3.0.0-devnet.2 → 3.0.0-devnet.2-patch.1
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/avm_proving_tests/avm_proving_tester.d.ts +3 -4
- package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
- package/dest/avm_proving_tests/avm_proving_tester.js +16 -2
- package/dest/bb/cli.d.ts +1 -1
- package/dest/bb/execute.d.ts +4 -4
- package/dest/bb/execute.d.ts.map +1 -1
- package/dest/bb/execute.js +19 -15
- package/dest/bb/index.d.ts +1 -1
- package/dest/config.d.ts +1 -1
- package/dest/honk.d.ts +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/instrumentation.d.ts +1 -1
- package/dest/instrumentation.d.ts.map +1 -1
- package/dest/prover/client/bb_private_kernel_prover.d.ts +11 -5
- package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
- package/dest/prover/client/bb_private_kernel_prover.js +35 -6
- package/dest/prover/client/bundle.d.ts +6 -0
- package/dest/prover/client/bundle.d.ts.map +1 -0
- package/dest/prover/client/bundle.js +7 -0
- package/dest/prover/client/lazy.d.ts +6 -0
- package/dest/prover/client/lazy.d.ts.map +1 -0
- package/dest/prover/client/lazy.js +7 -0
- package/dest/prover/index.d.ts +1 -1
- package/dest/prover/proof_utils.d.ts +8 -8
- package/dest/prover/proof_utils.d.ts.map +1 -1
- package/dest/prover/proof_utils.js +18 -18
- package/dest/prover/server/bb_prover.d.ts +3 -12
- package/dest/prover/server/bb_prover.d.ts.map +1 -1
- package/dest/prover/server/bb_prover.js +6 -6
- package/dest/test/delay_values.d.ts +1 -1
- package/dest/test/delay_values.js +23 -23
- package/dest/test/index.d.ts +1 -1
- package/dest/test/test_circuit_prover.d.ts +3 -3
- package/dest/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/test/test_circuit_prover.js +3 -3
- package/dest/test/test_verifier.d.ts +3 -1
- package/dest/test/test_verifier.d.ts.map +1 -1
- package/dest/test/test_verifier.js +15 -0
- package/dest/verification_key/verification_key_data.d.ts +1 -1
- package/dest/verification_key/verification_key_data.js +1 -1
- package/dest/verifier/bb_verifier.d.ts +1 -1
- package/dest/verifier/bb_verifier.d.ts.map +1 -1
- package/dest/verifier/bb_verifier.js +9 -6
- package/dest/verifier/index.d.ts +2 -2
- package/dest/verifier/index.d.ts.map +1 -1
- package/dest/verifier/index.js +1 -1
- package/dest/verifier/queued_chonk_verifier.d.ts +15 -0
- package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -0
- package/dest/verifier/{queued_ivc_verifier.js → queued_chonk_verifier.js} +3 -3
- package/package.json +23 -22
- package/src/avm_proving_tests/avm_proving_tester.ts +17 -3
- package/src/bb/execute.ts +12 -15
- package/src/prover/client/bb_private_kernel_prover.ts +45 -8
- package/src/prover/client/bundle.ts +10 -0
- package/src/prover/client/lazy.ts +10 -0
- package/src/prover/proof_utils.ts +18 -18
- package/src/prover/server/bb_prover.ts +14 -12
- package/src/test/delay_values.ts +23 -23
- package/src/test/test_circuit_prover.ts +10 -8
- package/src/test/test_verifier.ts +8 -0
- package/src/verification_key/verification_key_data.ts +1 -1
- package/src/verifier/bb_verifier.ts +9 -9
- package/src/verifier/index.ts +1 -1
- package/src/verifier/{queued_ivc_verifier.ts → queued_chonk_verifier.ts} +3 -3
- package/dest/prover/client/native/bb_native_private_kernel_prover.d.ts +0 -23
- package/dest/prover/client/native/bb_native_private_kernel_prover.d.ts.map +0 -1
- package/dest/prover/client/native/bb_native_private_kernel_prover.js +0 -66
- package/dest/prover/client/wasm/bb_wasm_private_kernel_prover.d.ts +0 -15
- package/dest/prover/client/wasm/bb_wasm_private_kernel_prover.d.ts.map +0 -1
- package/dest/prover/client/wasm/bb_wasm_private_kernel_prover.js +0 -46
- package/dest/prover/client/wasm/bundle.d.ts +0 -6
- package/dest/prover/client/wasm/bundle.d.ts.map +0 -1
- package/dest/prover/client/wasm/bundle.js +0 -8
- package/dest/prover/client/wasm/lazy.d.ts +0 -6
- package/dest/prover/client/wasm/lazy.d.ts.map +0 -1
- package/dest/prover/client/wasm/lazy.js +0 -8
- package/dest/verifier/queued_ivc_verifier.d.ts +0 -15
- package/dest/verifier/queued_ivc_verifier.d.ts.map +0 -1
- package/src/prover/client/native/bb_native_private_kernel_prover.ts +0 -107
- package/src/prover/client/wasm/bb_wasm_private_kernel_prover.ts +0 -60
- package/src/prover/client/wasm/bundle.ts +0 -11
- package/src/prover/client/wasm/lazy.ts +0 -11
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
type TestPrivateInsertions,
|
|
9
9
|
} from '@aztec/simulator/public/fixtures';
|
|
10
10
|
import type { PublicTxResult } from '@aztec/simulator/server';
|
|
11
|
-
import {
|
|
11
|
+
import { AvmCircuitInputs, AvmCircuitPublicInputs, PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
12
12
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
13
13
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
14
14
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
@@ -88,6 +88,16 @@ class InterceptingLogger implements Logger {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
// Config with collectHints enabled for proving tests
|
|
92
|
+
const provingConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
|
|
93
|
+
skipFeeEnforcement: false,
|
|
94
|
+
collectCallMetadata: true, // For results.
|
|
95
|
+
collectDebugLogs: false,
|
|
96
|
+
collectHints: true, // Required for proving!
|
|
97
|
+
collectPublicInputs: true, // Required for proving!
|
|
98
|
+
collectStatistics: false,
|
|
99
|
+
});
|
|
100
|
+
|
|
91
101
|
export class AvmProvingTester extends PublicTxSimulationTester {
|
|
92
102
|
private bbWorkingDirectory: string = '';
|
|
93
103
|
|
|
@@ -98,7 +108,8 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
98
108
|
globals?: GlobalVariables,
|
|
99
109
|
metrics?: TestExecutorMetrics,
|
|
100
110
|
) {
|
|
101
|
-
|
|
111
|
+
// simulator factory is undefined because for proving, we use the default C++ simulator
|
|
112
|
+
super(merkleTrees, contractDataSource, globals, metrics, /*simulatorFactory=*/ undefined, provingConfig);
|
|
102
113
|
}
|
|
103
114
|
|
|
104
115
|
static async new(
|
|
@@ -211,6 +222,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
211
222
|
txLabel: string = 'unlabeledTx',
|
|
212
223
|
disableRevertCheck: boolean = false,
|
|
213
224
|
): Promise<PublicTxResult> {
|
|
225
|
+
const simTimer = new Timer();
|
|
214
226
|
const simRes = await this.simulateTx(
|
|
215
227
|
sender,
|
|
216
228
|
setupCalls,
|
|
@@ -220,6 +232,8 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
220
232
|
privateInsertions,
|
|
221
233
|
txLabel,
|
|
222
234
|
);
|
|
235
|
+
const simDuration = simTimer.ms();
|
|
236
|
+
this.logger.info(`Simulation took ${simDuration} ms for tx ${txLabel}`);
|
|
223
237
|
|
|
224
238
|
if (!disableRevertCheck) {
|
|
225
239
|
expect(simRes.revertCode.isOK()).toBe(expectRevert ? false : true);
|
|
@@ -227,7 +241,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
227
241
|
|
|
228
242
|
const opString = this.checkCircuitOnly ? 'Check circuit' : 'Proving and verification';
|
|
229
243
|
|
|
230
|
-
const avmCircuitInputs = simRes.
|
|
244
|
+
const avmCircuitInputs = new AvmCircuitInputs(simRes.hints!, simRes.publicInputs!);
|
|
231
245
|
const timer = new Timer();
|
|
232
246
|
await this.proveVerify(avmCircuitInputs, txLabel);
|
|
233
247
|
this.logger.info(`${opString} took ${timer.ms()} ms for tx ${txLabel}`);
|
package/src/bb/execute.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sha256 } from '@aztec/foundation/crypto';
|
|
1
|
+
import { sha256 } from '@aztec/foundation/crypto/sha256';
|
|
2
2
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
3
3
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
4
|
import type { AvmCircuitInputs, AvmCircuitPublicInputs } from '@aztec/stdlib/avm';
|
|
@@ -6,6 +6,7 @@ import type { AvmCircuitInputs, AvmCircuitPublicInputs } from '@aztec/stdlib/avm
|
|
|
6
6
|
import * as proc from 'child_process';
|
|
7
7
|
import { promises as fs } from 'fs';
|
|
8
8
|
import { basename, dirname, join } from 'path';
|
|
9
|
+
import readline from 'readline';
|
|
9
10
|
|
|
10
11
|
import type { UltraHonkFlavor } from '../honk.js';
|
|
11
12
|
|
|
@@ -85,6 +86,7 @@ export function executeBB(
|
|
|
85
86
|
logger(`BB concurrency: ${env.HARDWARE_CONCURRENCY}`);
|
|
86
87
|
logger(`Executing BB with: ${pathToBB} ${command} ${args.join(' ')}`);
|
|
87
88
|
const bb = proc.spawn(pathToBB, [command, ...args], {
|
|
89
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
88
90
|
env,
|
|
89
91
|
});
|
|
90
92
|
|
|
@@ -99,14 +101,9 @@ export function executeBB(
|
|
|
99
101
|
}, timeout);
|
|
100
102
|
}
|
|
101
103
|
|
|
102
|
-
bb.stdout.on('
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
});
|
|
106
|
-
bb.stderr.on('data', data => {
|
|
107
|
-
const message = data.toString('utf-8').replace(/\n$/, '');
|
|
108
|
-
logger(message);
|
|
109
|
-
});
|
|
104
|
+
readline.createInterface({ input: bb.stdout }).on('line', logger);
|
|
105
|
+
readline.createInterface({ input: bb.stderr }).on('line', logger);
|
|
106
|
+
|
|
110
107
|
bb.on('close', (exitCode: number, signal?: string) => {
|
|
111
108
|
if (timeoutId) {
|
|
112
109
|
clearTimeout(timeoutId);
|
|
@@ -120,7 +117,7 @@ export function executeBB(
|
|
|
120
117
|
}).catch(_ => ({ status: BB_RESULT.FAILURE, exitCode: -1, signal: undefined }));
|
|
121
118
|
}
|
|
122
119
|
|
|
123
|
-
export async function
|
|
120
|
+
export async function executeBbChonkProof(
|
|
124
121
|
pathToBB: string,
|
|
125
122
|
workingDirectory: string,
|
|
126
123
|
inputsPath: string,
|
|
@@ -153,7 +150,7 @@ export async function executeBbClientIvcProof(
|
|
|
153
150
|
log(`bb - ${message}`);
|
|
154
151
|
};
|
|
155
152
|
|
|
156
|
-
const args = ['-o', outputPath, '--ivc_inputs_path', inputsPath, '-v', '--scheme', '
|
|
153
|
+
const args = ['-o', outputPath, '--ivc_inputs_path', inputsPath, '-v', '--scheme', 'chonk'];
|
|
157
154
|
if (writeVk) {
|
|
158
155
|
args.push('--write_vk');
|
|
159
156
|
}
|
|
@@ -424,7 +421,7 @@ export async function verifyAvmProof(
|
|
|
424
421
|
}
|
|
425
422
|
|
|
426
423
|
/**
|
|
427
|
-
* Verifies a
|
|
424
|
+
* Verifies a ChonkProof
|
|
428
425
|
* TODO(#7370) The verification keys should be supplied separately
|
|
429
426
|
* @param pathToBB - The full path to the bb binary
|
|
430
427
|
* @param targetPath - The path to the folder with the proof, accumulator, and verification keys
|
|
@@ -432,7 +429,7 @@ export async function verifyAvmProof(
|
|
|
432
429
|
* @param concurrency - The number of threads to use for the verification
|
|
433
430
|
* @returns An object containing a result indication and duration taken
|
|
434
431
|
*/
|
|
435
|
-
export async function
|
|
432
|
+
export async function verifyChonkProof(
|
|
436
433
|
pathToBB: string,
|
|
437
434
|
proofPath: string,
|
|
438
435
|
keyPath: string,
|
|
@@ -448,7 +445,7 @@ export async function verifyClientIvcProof(
|
|
|
448
445
|
}
|
|
449
446
|
|
|
450
447
|
try {
|
|
451
|
-
const args = ['--scheme', '
|
|
448
|
+
const args = ['--scheme', 'chonk', '-p', proofPath, '-k', keyPath, '-v'];
|
|
452
449
|
const timer = new Timer();
|
|
453
450
|
const command = 'verify';
|
|
454
451
|
|
|
@@ -638,7 +635,7 @@ export async function computeGateCountForCircuit(
|
|
|
638
635
|
const result = await executeBB(
|
|
639
636
|
pathToBB,
|
|
640
637
|
'gates',
|
|
641
|
-
['--scheme', flavor === 'mega_honk' ? '
|
|
638
|
+
['--scheme', flavor === 'mega_honk' ? 'chonk' : 'ultra_honk', '-b', bytecodePath, '-v'],
|
|
642
639
|
logHandler,
|
|
643
640
|
);
|
|
644
641
|
const duration = timer.ms();
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AztecClientBackend, type BackendOptions, Barretenberg } from '@aztec/bb.js';
|
|
2
|
+
import { type LogLevel, type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
+
import { serializeWitness } from '@aztec/noir-noirc_abi';
|
|
2
5
|
import {
|
|
3
6
|
convertHidingKernelPublicInputsToWitnessMapWithAbi,
|
|
4
7
|
convertHidingKernelToRollupInputsToWitnessMapWithAbi,
|
|
@@ -37,15 +40,22 @@ import type {
|
|
|
37
40
|
PrivateKernelTailCircuitPublicInputs,
|
|
38
41
|
} from '@aztec/stdlib/kernel';
|
|
39
42
|
import type { NoirCompiledCircuitWithName } from '@aztec/stdlib/noir';
|
|
40
|
-
import
|
|
43
|
+
import { ChonkProofWithPublicInputs } from '@aztec/stdlib/proofs';
|
|
41
44
|
import type { CircuitSimulationStats, CircuitWitnessGenerationStats } from '@aztec/stdlib/stats';
|
|
42
45
|
|
|
46
|
+
import { ungzip } from 'pako';
|
|
47
|
+
|
|
48
|
+
export type BBPrivateKernelProverOptions = Omit<BackendOptions, 'logger'> & { logger?: Logger };
|
|
43
49
|
export abstract class BBPrivateKernelProver implements PrivateKernelProver {
|
|
50
|
+
private log: Logger;
|
|
51
|
+
|
|
44
52
|
constructor(
|
|
45
53
|
protected artifactProvider: ArtifactProvider,
|
|
46
54
|
protected simulator: CircuitSimulator,
|
|
47
|
-
protected
|
|
48
|
-
) {
|
|
55
|
+
protected options: BBPrivateKernelProverOptions = {},
|
|
56
|
+
) {
|
|
57
|
+
this.log = options.logger || createLogger('bb-prover:private-kernel');
|
|
58
|
+
}
|
|
49
59
|
|
|
50
60
|
public async generateInitOutput(
|
|
51
61
|
inputs: PrivateKernelInitCircuitPrivateInputs,
|
|
@@ -263,11 +273,38 @@ export abstract class BBPrivateKernelProver implements PrivateKernelProver {
|
|
|
263
273
|
return kernelProofOutput;
|
|
264
274
|
}
|
|
265
275
|
|
|
266
|
-
public
|
|
267
|
-
|
|
276
|
+
public async createChonkProof(executionSteps: PrivateExecutionStep[]): Promise<ChonkProofWithPublicInputs> {
|
|
277
|
+
const timer = new Timer();
|
|
278
|
+
this.log.info(`Generating ClientIVC proof...`);
|
|
279
|
+
const barretenberg = await Barretenberg.initSingleton({
|
|
280
|
+
...this.options,
|
|
281
|
+
logger: this.options.logger?.[(process.env.LOG_LEVEL as LogLevel) || 'verbose'],
|
|
282
|
+
});
|
|
283
|
+
const backend = new AztecClientBackend(
|
|
284
|
+
executionSteps.map(step => ungzip(step.bytecode)),
|
|
285
|
+
barretenberg,
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
const [proof] = await backend.prove(
|
|
289
|
+
executionSteps.map(step => ungzip(serializeWitness(step.witness))),
|
|
290
|
+
executionSteps.map(step => step.vk),
|
|
291
|
+
);
|
|
292
|
+
this.log.info(`Generated ClientIVC proof`, {
|
|
293
|
+
eventName: 'client-ivc-proof-generation',
|
|
294
|
+
duration: timer.ms(),
|
|
295
|
+
proofSize: proof.length,
|
|
296
|
+
});
|
|
297
|
+
return ChonkProofWithPublicInputs.fromBufferArray(proof);
|
|
268
298
|
}
|
|
269
299
|
|
|
270
|
-
public computeGateCountForCircuit(_bytecode: Buffer, _circuitName: string): Promise<number> {
|
|
271
|
-
|
|
300
|
+
public async computeGateCountForCircuit(_bytecode: Buffer, _circuitName: string): Promise<number> {
|
|
301
|
+
// Note we do not pass the vk to the backend. This is unneeded for gate counts.
|
|
302
|
+
const barretenberg = await Barretenberg.initSingleton({
|
|
303
|
+
...this.options,
|
|
304
|
+
logger: this.options.logger?.[(process.env.LOG_LEVEL as LogLevel) || 'verbose'],
|
|
305
|
+
});
|
|
306
|
+
const backend = new AztecClientBackend([ungzip(_bytecode)], barretenberg);
|
|
307
|
+
const gateCount = await backend.gates();
|
|
308
|
+
return gateCount[0];
|
|
272
309
|
}
|
|
273
310
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BundleArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/bundle';
|
|
2
|
+
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
3
|
+
|
|
4
|
+
import { BBPrivateKernelProver, type BBPrivateKernelProverOptions } from './bb_private_kernel_prover.js';
|
|
5
|
+
|
|
6
|
+
export class BBBundlePrivateKernelProver extends BBPrivateKernelProver {
|
|
7
|
+
constructor(simulator: CircuitSimulator, options: BBPrivateKernelProverOptions = {}) {
|
|
8
|
+
super(new BundleArtifactProvider(), simulator, options);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LazyArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/lazy';
|
|
2
|
+
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
3
|
+
|
|
4
|
+
import { BBPrivateKernelProver, type BBPrivateKernelProverOptions } from './bb_private_kernel_prover.js';
|
|
5
|
+
|
|
6
|
+
export class BBLazyPrivateKernelProver extends BBPrivateKernelProver {
|
|
7
|
+
constructor(simulator: CircuitSimulator, options: BBPrivateKernelProverOptions = {}) {
|
|
8
|
+
super(new LazyArtifactProvider(), simulator, options);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
CHONK_PROOF_LENGTH,
|
|
3
3
|
HIDING_KERNEL_IO_PUBLIC_INPUTS_SIZE,
|
|
4
4
|
IPA_CLAIM_SIZE,
|
|
5
5
|
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
@@ -7,9 +7,9 @@ import {
|
|
|
7
7
|
PAIRING_POINTS_SIZE,
|
|
8
8
|
ULTRA_KECCAK_PROOF_LENGTH,
|
|
9
9
|
} from '@aztec/constants';
|
|
10
|
-
import { Fr } from '@aztec/foundation/
|
|
10
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
11
11
|
import type { Logger } from '@aztec/foundation/log';
|
|
12
|
-
import {
|
|
12
|
+
import { ChonkProofWithPublicInputs, Proof, RecursiveProof } from '@aztec/stdlib/proofs';
|
|
13
13
|
import type { VerificationKeyData } from '@aztec/stdlib/vks';
|
|
14
14
|
|
|
15
15
|
import assert from 'assert';
|
|
@@ -19,33 +19,33 @@ import * as path from 'path';
|
|
|
19
19
|
import { PROOF_FILENAME, PUBLIC_INPUTS_FILENAME } from '../bb/execute.js';
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* Create a
|
|
22
|
+
* Create a ChonkProof proof file.
|
|
23
23
|
*
|
|
24
24
|
* @param directory the directory to read the proof from.
|
|
25
|
-
* @returns the encapsulated
|
|
25
|
+
* @returns the encapsulated chonk proof
|
|
26
26
|
*/
|
|
27
|
-
export async function
|
|
27
|
+
export async function readChonkProofFromOutputDirectory(directory: string) {
|
|
28
28
|
const proofFilename = path.join(directory, PROOF_FILENAME);
|
|
29
29
|
const binaryProof = await fs.readFile(proofFilename);
|
|
30
30
|
const proofFields = splitBufferIntoFields(binaryProof);
|
|
31
|
-
return new
|
|
31
|
+
return new ChonkProofWithPublicInputs(proofFields);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Serialize a
|
|
35
|
+
* Serialize a ChonkProof to a proof file.
|
|
36
36
|
*
|
|
37
|
-
* @param proof the
|
|
37
|
+
* @param proof the ChonkProof from object
|
|
38
38
|
* @param directory the directory to write in
|
|
39
39
|
*/
|
|
40
|
-
export async function
|
|
41
|
-
// NB: Don't use
|
|
42
|
-
const fieldsBuf = Buffer.concat(
|
|
40
|
+
export async function writeChonkProofToPath(chonkProof: ChonkProofWithPublicInputs, outputPath: string) {
|
|
41
|
+
// NB: Don't use chonkProof.toBuffer here because it will include the proof length.
|
|
42
|
+
const fieldsBuf = Buffer.concat(chonkProof.fieldsWithPublicInputs.map(field => field.toBuffer()));
|
|
43
43
|
await fs.writeFile(outputPath, fieldsBuf);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
function getNumCustomPublicInputs(proofLength: number, vkData: VerificationKeyData) {
|
|
47
47
|
let numPublicInputs = vkData.numPublicInputs;
|
|
48
|
-
if (proofLength ==
|
|
48
|
+
if (proofLength == CHONK_PROOF_LENGTH) {
|
|
49
49
|
numPublicInputs -= HIDING_KERNEL_IO_PUBLIC_INPUTS_SIZE;
|
|
50
50
|
} else {
|
|
51
51
|
numPublicInputs -= PAIRING_POINTS_SIZE;
|
|
@@ -71,7 +71,7 @@ export async function readProofsFromOutputDirectory<PROOF_LENGTH extends number>
|
|
|
71
71
|
logger: Logger,
|
|
72
72
|
): Promise<RecursiveProof<PROOF_LENGTH>> {
|
|
73
73
|
assert(
|
|
74
|
-
proofLength ==
|
|
74
|
+
proofLength == CHONK_PROOF_LENGTH ||
|
|
75
75
|
proofLength == NESTED_RECURSIVE_PROOF_LENGTH ||
|
|
76
76
|
proofLength == NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH ||
|
|
77
77
|
proofLength == ULTRA_KECCAK_PROOF_LENGTH,
|
|
@@ -81,17 +81,17 @@ export async function readProofsFromOutputDirectory<PROOF_LENGTH extends number>
|
|
|
81
81
|
const publicInputsFilename = path.join(directory, PUBLIC_INPUTS_FILENAME);
|
|
82
82
|
const proofFilename = path.join(directory, PROOF_FILENAME);
|
|
83
83
|
|
|
84
|
-
// Handle
|
|
85
|
-
const
|
|
84
|
+
// Handle CHONK separately because bb outputs the proof fields with public inputs for CHONK.
|
|
85
|
+
const isChonk = proofLength == CHONK_PROOF_LENGTH;
|
|
86
86
|
|
|
87
87
|
const [binaryPublicInputs, binaryProof] = await Promise.all([
|
|
88
|
-
|
|
88
|
+
isChonk ? Buffer.alloc(0) : fs.readFile(publicInputsFilename),
|
|
89
89
|
fs.readFile(proofFilename),
|
|
90
90
|
]);
|
|
91
91
|
|
|
92
92
|
const numPublicInputs = getNumCustomPublicInputs(proofLength, vkData);
|
|
93
93
|
let fieldsWithoutPublicInputs = splitBufferIntoFields(binaryProof);
|
|
94
|
-
if (
|
|
94
|
+
if (isChonk) {
|
|
95
95
|
fieldsWithoutPublicInputs = fieldsWithoutPublicInputs.slice(numPublicInputs);
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
RECURSIVE_PROOF_LENGTH,
|
|
7
7
|
ULTRA_KECCAK_PROOF_LENGTH,
|
|
8
8
|
} from '@aztec/constants';
|
|
9
|
-
import { Fr } from '@aztec/foundation/
|
|
9
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
10
10
|
import { runInDirectory } from '@aztec/foundation/fs';
|
|
11
11
|
import { createLogger } from '@aztec/foundation/log';
|
|
12
12
|
import { BufferReader } from '@aztec/foundation/serialize';
|
|
@@ -38,8 +38,8 @@ import {
|
|
|
38
38
|
convertParityRootPrivateInputsToWitnessMap,
|
|
39
39
|
convertPrivateTxBaseRollupOutputsFromWitnessMap,
|
|
40
40
|
convertPrivateTxBaseRollupPrivateInputsToWitnessMap,
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
convertPublicChonkVerifierOutputsFromWitnessMap,
|
|
42
|
+
convertPublicChonkVerifierPrivateInputsToWitnessMap,
|
|
43
43
|
convertPublicTxBaseRollupOutputsFromWitnessMap,
|
|
44
44
|
convertPublicTxBaseRollupPrivateInputsToWitnessMap,
|
|
45
45
|
convertRootRollupOutputsFromWitnessMap,
|
|
@@ -77,8 +77,8 @@ import {
|
|
|
77
77
|
CheckpointRootRollupPrivateInputs,
|
|
78
78
|
CheckpointRootSingleBlockRollupPrivateInputs,
|
|
79
79
|
type PrivateTxBaseRollupPrivateInputs,
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
PublicChonkVerifierPrivateInputs,
|
|
81
|
+
PublicChonkVerifierPublicInputs,
|
|
82
82
|
PublicTxBaseRollupPrivateInputs,
|
|
83
83
|
type RootRollupPrivateInputs,
|
|
84
84
|
type RootRollupPublicInputs,
|
|
@@ -202,17 +202,19 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
202
202
|
return proofAndVk;
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
public async
|
|
206
|
-
inputs:
|
|
207
|
-
): Promise<
|
|
208
|
-
|
|
205
|
+
public async getPublicChonkVerifierProof(
|
|
206
|
+
inputs: PublicChonkVerifierPrivateInputs,
|
|
207
|
+
): Promise<
|
|
208
|
+
PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
209
|
+
> {
|
|
210
|
+
const artifactName = 'PublicChonkVerifier';
|
|
209
211
|
|
|
210
212
|
const { circuitOutput, proof } = await this.createRecursiveProof(
|
|
211
213
|
inputs,
|
|
212
214
|
artifactName,
|
|
213
215
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
214
|
-
|
|
215
|
-
|
|
216
|
+
convertPublicChonkVerifierPrivateInputsToWitnessMap,
|
|
217
|
+
convertPublicChonkVerifierOutputsFromWitnessMap,
|
|
216
218
|
);
|
|
217
219
|
|
|
218
220
|
const verificationKey = this.getVerificationKeyDataForCircuit(artifactName);
|
|
@@ -585,7 +587,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
585
587
|
convertInput: (input: CircuitInputType) => WitnessMap,
|
|
586
588
|
convertOutput: (outputWitness: WitnessMap) => CircuitOutputType,
|
|
587
589
|
): Promise<{ circuitOutput: CircuitOutputType; proof: RecursiveProof<PROOF_LENGTH> }> {
|
|
588
|
-
// this probably is gonna need to call
|
|
590
|
+
// this probably is gonna need to call chonk
|
|
589
591
|
const operation = async (bbWorkingDirectory: string) => {
|
|
590
592
|
const { provingResult, circuitOutput: output } = await this.generateProofWithBB(
|
|
591
593
|
input,
|
package/src/test/delay_values.ts
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
2
2
|
|
|
3
3
|
export const WITGEN_DELAY_MS: Record<ProvingRequestType, number> = {
|
|
4
|
-
[ProvingRequestType.PARITY_BASE]:
|
|
5
|
-
[ProvingRequestType.BLOCK_MERGE_ROLLUP]:
|
|
6
|
-
[ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP]:
|
|
7
|
-
[ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP]:
|
|
8
|
-
[ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP]:
|
|
4
|
+
[ProvingRequestType.PARITY_BASE]: 2_000,
|
|
5
|
+
[ProvingRequestType.BLOCK_MERGE_ROLLUP]: 30,
|
|
6
|
+
[ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP]: 45,
|
|
7
|
+
[ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP]: 27,
|
|
8
|
+
[ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP]: 18,
|
|
9
9
|
[ProvingRequestType.BLOCK_ROOT_ROLLUP]: 40_000,
|
|
10
10
|
[ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP]: 20_000,
|
|
11
11
|
[ProvingRequestType.CHECKPOINT_ROOT_ROLLUP]: 40_000,
|
|
12
|
-
[ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP]:
|
|
12
|
+
[ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP]: 36_600,
|
|
13
13
|
[ProvingRequestType.CHECKPOINT_PADDING_ROLLUP]: 0,
|
|
14
|
-
[ProvingRequestType.CHECKPOINT_MERGE_ROLLUP]:
|
|
14
|
+
[ProvingRequestType.CHECKPOINT_MERGE_ROLLUP]: 30,
|
|
15
15
|
[ProvingRequestType.TX_MERGE_ROLLUP]: 0,
|
|
16
|
-
[ProvingRequestType.PRIVATE_TX_BASE_ROLLUP]:
|
|
17
|
-
[ProvingRequestType.PUBLIC_TX_BASE_ROLLUP]:
|
|
18
|
-
[ProvingRequestType.PARITY_ROOT]:
|
|
19
|
-
[ProvingRequestType.ROOT_ROLLUP]:
|
|
20
|
-
[ProvingRequestType.
|
|
16
|
+
[ProvingRequestType.PRIVATE_TX_BASE_ROLLUP]: 2_500, // Guess based on public
|
|
17
|
+
[ProvingRequestType.PUBLIC_TX_BASE_ROLLUP]: 2_500,
|
|
18
|
+
[ProvingRequestType.PARITY_ROOT]: 40,
|
|
19
|
+
[ProvingRequestType.ROOT_ROLLUP]: 35,
|
|
20
|
+
[ProvingRequestType.PUBLIC_CHONK_VERIFIER]: 60,
|
|
21
21
|
[ProvingRequestType.PUBLIC_VM]: 0,
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
export const PROOF_DELAY_MS: Record<ProvingRequestType, number> = {
|
|
25
|
-
[ProvingRequestType.PARITY_BASE]:
|
|
25
|
+
[ProvingRequestType.PARITY_BASE]: 16_300,
|
|
26
26
|
[ProvingRequestType.BLOCK_MERGE_ROLLUP]: 15_000,
|
|
27
|
-
[ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP]:
|
|
28
|
-
[ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP]:
|
|
29
|
-
[ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP]:
|
|
27
|
+
[ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP]: 16_500,
|
|
28
|
+
[ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP]: 9_210,
|
|
29
|
+
[ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP]: 4_560,
|
|
30
30
|
[ProvingRequestType.BLOCK_ROOT_ROLLUP]: 35_000,
|
|
31
31
|
[ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP]: 15_000,
|
|
32
32
|
[ProvingRequestType.CHECKPOINT_ROOT_ROLLUP]: 35_000,
|
|
33
|
-
[ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP]:
|
|
33
|
+
[ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP]: 38_800,
|
|
34
34
|
[ProvingRequestType.CHECKPOINT_PADDING_ROLLUP]: 0,
|
|
35
|
-
[ProvingRequestType.CHECKPOINT_MERGE_ROLLUP]:
|
|
35
|
+
[ProvingRequestType.CHECKPOINT_MERGE_ROLLUP]: 9_760,
|
|
36
36
|
[ProvingRequestType.TX_MERGE_ROLLUP]: 0,
|
|
37
|
-
[ProvingRequestType.PRIVATE_TX_BASE_ROLLUP]:
|
|
38
|
-
[ProvingRequestType.PUBLIC_TX_BASE_ROLLUP]:
|
|
39
|
-
[ProvingRequestType.PARITY_ROOT]:
|
|
40
|
-
[ProvingRequestType.ROOT_ROLLUP]:
|
|
41
|
-
[ProvingRequestType.
|
|
37
|
+
[ProvingRequestType.PRIVATE_TX_BASE_ROLLUP]: 45_000, // Guess based on public
|
|
38
|
+
[ProvingRequestType.PUBLIC_TX_BASE_ROLLUP]: 45_000,
|
|
39
|
+
[ProvingRequestType.PARITY_ROOT]: 18_600,
|
|
40
|
+
[ProvingRequestType.ROOT_ROLLUP]: 84_000,
|
|
41
|
+
[ProvingRequestType.PUBLIC_CHONK_VERIFIER]: 16_300,
|
|
42
42
|
[ProvingRequestType.PUBLIC_VM]: 0,
|
|
43
43
|
};
|
|
@@ -73,8 +73,8 @@ import {
|
|
|
73
73
|
type CheckpointRootRollupPrivateInputs,
|
|
74
74
|
type CheckpointRootSingleBlockRollupPrivateInputs,
|
|
75
75
|
type PrivateTxBaseRollupPrivateInputs,
|
|
76
|
-
type
|
|
77
|
-
|
|
76
|
+
type PublicChonkVerifierPrivateInputs,
|
|
77
|
+
PublicChonkVerifierPublicInputs,
|
|
78
78
|
type PublicTxBaseRollupPrivateInputs,
|
|
79
79
|
type RootRollupPrivateInputs,
|
|
80
80
|
type RootRollupPublicInputs,
|
|
@@ -158,14 +158,16 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
158
158
|
);
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
public
|
|
162
|
-
inputs:
|
|
163
|
-
): Promise<
|
|
164
|
-
|
|
161
|
+
public getPublicChonkVerifierProof(
|
|
162
|
+
inputs: PublicChonkVerifierPrivateInputs,
|
|
163
|
+
): Promise<
|
|
164
|
+
PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
165
|
+
> {
|
|
166
|
+
return this.applyDelay(ProvingRequestType.PUBLIC_CHONK_VERIFIER, () =>
|
|
165
167
|
makePublicInputsAndRecursiveProof(
|
|
166
|
-
new
|
|
168
|
+
new PublicChonkVerifierPublicInputs(inputs.hidingKernelProofData.publicInputs, inputs.proverId),
|
|
167
169
|
makeEmptyRecursiveProof(NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH),
|
|
168
|
-
ProtocolCircuitVks.
|
|
170
|
+
ProtocolCircuitVks.PublicChonkVerifier,
|
|
169
171
|
),
|
|
170
172
|
);
|
|
171
173
|
}
|
|
@@ -2,7 +2,15 @@ import type { ClientProtocolCircuitVerifier, IVCProofVerificationResult } from '
|
|
|
2
2
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
3
3
|
|
|
4
4
|
export class TestCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
5
|
+
constructor(private verificationDelayMs?: number) {}
|
|
5
6
|
verifyProof(_tx: Tx): Promise<IVCProofVerificationResult> {
|
|
7
|
+
if (this.verificationDelayMs !== undefined && this.verificationDelayMs > 0) {
|
|
8
|
+
return new Promise(resolve => {
|
|
9
|
+
setTimeout(() => {
|
|
10
|
+
resolve({ valid: true, durationMs: this.verificationDelayMs!, totalDurationMs: this.verificationDelayMs! });
|
|
11
|
+
}, this.verificationDelayMs);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
6
14
|
return Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 });
|
|
7
15
|
}
|
|
8
16
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AVM_V2_VERIFICATION_KEY_LENGTH_IN_FIELDS_PADDED } from '@aztec/constants';
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { BufferReader } from '@aztec/foundation/serialize';
|
|
4
4
|
import { VerificationKeyAsFields, VerificationKeyData } from '@aztec/stdlib/vks';
|
|
5
5
|
|
|
@@ -22,12 +22,12 @@ import {
|
|
|
22
22
|
PROOF_FILENAME,
|
|
23
23
|
PUBLIC_INPUTS_FILENAME,
|
|
24
24
|
VK_FILENAME,
|
|
25
|
-
|
|
25
|
+
verifyChonkProof,
|
|
26
26
|
verifyProof,
|
|
27
27
|
} from '../bb/execute.js';
|
|
28
28
|
import type { BBConfig } from '../config.js';
|
|
29
29
|
import { getUltraHonkFlavorForCircuit } from '../honk.js';
|
|
30
|
-
import {
|
|
30
|
+
import { writeChonkProofToPath } from '../prover/proof_utils.js';
|
|
31
31
|
|
|
32
32
|
export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
33
33
|
private constructor(
|
|
@@ -40,6 +40,9 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
public static async new(config: BBConfig, logger = createLogger('bb-prover:verifier')) {
|
|
43
|
+
if (!config.bbWorkingDirectory) {
|
|
44
|
+
throw new Error(`Barretenberg working directory (BB_WORKING_DIRECTORY) is not set`);
|
|
45
|
+
}
|
|
43
46
|
await fs.mkdir(config.bbWorkingDirectory, { recursive: true });
|
|
44
47
|
return new BBCircuitVerifier(config, logger);
|
|
45
48
|
}
|
|
@@ -90,7 +93,7 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
90
93
|
}
|
|
91
94
|
|
|
92
95
|
public async verifyProof(tx: Tx): Promise<IVCProofVerificationResult> {
|
|
93
|
-
const proofType = '
|
|
96
|
+
const proofType = 'Chonk';
|
|
94
97
|
try {
|
|
95
98
|
const totalTimer = new Timer();
|
|
96
99
|
let verificationDuration = 0;
|
|
@@ -104,17 +107,14 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
104
107
|
};
|
|
105
108
|
|
|
106
109
|
const proofPath = path.join(bbWorkingDirectory, PROOF_FILENAME);
|
|
107
|
-
await
|
|
108
|
-
tx.clientIvcProof.attachPublicInputs(tx.data.publicInputs().toFields()),
|
|
109
|
-
proofPath,
|
|
110
|
-
);
|
|
110
|
+
await writeChonkProofToPath(tx.chonkProof.attachPublicInputs(tx.data.publicInputs().toFields()), proofPath);
|
|
111
111
|
|
|
112
112
|
const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
|
|
113
113
|
const verificationKey = this.getVerificationKeyData(circuit);
|
|
114
114
|
await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
|
|
115
115
|
|
|
116
116
|
const timer = new Timer();
|
|
117
|
-
const result = await
|
|
117
|
+
const result = await verifyChonkProof(
|
|
118
118
|
this.config.bbBinaryPath,
|
|
119
119
|
proofPath,
|
|
120
120
|
verificationKeyPath,
|
|
@@ -132,7 +132,7 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
132
132
|
circuitName: mapProtocolArtifactNameToCircuitName(circuit),
|
|
133
133
|
duration: result.durationMs,
|
|
134
134
|
eventName: 'circuit-verification',
|
|
135
|
-
proofType: '
|
|
135
|
+
proofType: 'chonk',
|
|
136
136
|
} satisfies CircuitVerificationStats);
|
|
137
137
|
};
|
|
138
138
|
await runInDirectory(this.config.bbWorkingDirectory, operation, this.config.bbSkipCleanup, this.logger);
|
package/src/verifier/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './bb_verifier.js';
|
|
2
|
-
export * from './
|
|
2
|
+
export * from './queued_chonk_verifier.js';
|
|
@@ -38,13 +38,13 @@ class IVCVerifierMetrics {
|
|
|
38
38
|
|
|
39
39
|
this.ivcVerificationHistogram = meter.createHistogram(Metrics.IVC_VERIFIER_TIME, {
|
|
40
40
|
unit: 'ms',
|
|
41
|
-
description: 'Duration to verify
|
|
41
|
+
description: 'Duration to verify chonk proofs',
|
|
42
42
|
valueType: ValueType.INT,
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
this.ivcTotalVerificationHistogram = meter.createHistogram(Metrics.IVC_VERIFIER_TOTAL_TIME, {
|
|
46
46
|
unit: 'ms',
|
|
47
|
-
description: 'Total duration to verify
|
|
47
|
+
description: 'Total duration to verify chonk proofs, including serde',
|
|
48
48
|
valueType: ValueType.INT,
|
|
49
49
|
});
|
|
50
50
|
|
|
@@ -120,7 +120,7 @@ export class QueuedIVCVerifier implements ClientProtocolCircuitVerifier {
|
|
|
120
120
|
config: BBConfig,
|
|
121
121
|
private verifier: ClientProtocolCircuitVerifier,
|
|
122
122
|
private telemetry: TelemetryClient = getTelemetryClient(),
|
|
123
|
-
private logger = createLogger('bb-prover:
|
|
123
|
+
private logger = createLogger('bb-prover:queued_chonk_verifier'),
|
|
124
124
|
) {
|
|
125
125
|
this.metrics = new IVCVerifierMetrics(this.telemetry, 'QueuedIVCVerifier');
|
|
126
126
|
this.queue = new SerialQueue();
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { type Logger } from '@aztec/foundation/log';
|
|
2
|
-
import type { CircuitSimulator } from '@aztec/simulator/server';
|
|
3
|
-
import { type PrivateExecutionStep } from '@aztec/stdlib/kernel';
|
|
4
|
-
import type { ClientIvcProofWithPublicInputs } from '@aztec/stdlib/proofs';
|
|
5
|
-
import type { BBConfig } from '../../../config.js';
|
|
6
|
-
import { BBPrivateKernelProver } from '../bb_private_kernel_prover.js';
|
|
7
|
-
/**
|
|
8
|
-
* This proof creator implementation uses the native bb binary.
|
|
9
|
-
*/
|
|
10
|
-
export declare class BBNativePrivateKernelProver extends BBPrivateKernelProver {
|
|
11
|
-
private bbBinaryPath;
|
|
12
|
-
private bbWorkingDirectory;
|
|
13
|
-
private skipCleanup;
|
|
14
|
-
protected simulator: CircuitSimulator;
|
|
15
|
-
protected log: Logger;
|
|
16
|
-
private constructor();
|
|
17
|
-
static new(config: BBConfig, simulator: CircuitSimulator, log?: Logger): Promise<BBNativePrivateKernelProver>;
|
|
18
|
-
private _createClientIvcProof;
|
|
19
|
-
createClientIvcProof(executionSteps: PrivateExecutionStep[]): Promise<ClientIvcProofWithPublicInputs>;
|
|
20
|
-
computeGateCountForCircuit(bytecode: Buffer, circuitName: string): Promise<number>;
|
|
21
|
-
private runInDirectory;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=bb_native_private_kernel_prover.d.ts.map
|