@aztec/bb-prover 0.69.0-devnet → 0.69.1-devnet
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/cli.d.ts +3 -0
- package/dest/bb/cli.d.ts.map +1 -1
- package/dest/bb/cli.js +7 -2
- package/dest/honk.d.ts +8 -8
- package/dest/honk.d.ts.map +1 -1
- package/dest/honk.js +2 -7
- package/dest/prover/bb_native_private_kernel_prover.d.ts +23 -0
- package/dest/prover/bb_native_private_kernel_prover.d.ts.map +1 -0
- package/dest/prover/bb_native_private_kernel_prover.js +68 -0
- package/dest/prover/bb_private_kernel_prover.d.ts +26 -41
- package/dest/prover/bb_private_kernel_prover.d.ts.map +1 -1
- package/dest/prover/bb_private_kernel_prover.js +62 -117
- package/dest/prover/bb_prover.d.ts +4 -6
- package/dest/prover/bb_prover.d.ts.map +1 -1
- package/dest/prover/bb_prover.js +9 -30
- package/dest/prover/index.d.ts +1 -1
- package/dest/prover/index.d.ts.map +1 -1
- package/dest/prover/index.js +2 -2
- package/dest/stats.d.ts +3 -3
- package/dest/stats.d.ts.map +1 -1
- package/dest/stats.js +4 -7
- package/dest/test/test_circuit_prover.d.ts +4 -4
- package/dest/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/test/test_circuit_prover.js +11 -9
- package/dest/verifier/bb_verifier.d.ts +6 -6
- package/dest/verifier/bb_verifier.d.ts.map +1 -1
- package/dest/verifier/bb_verifier.js +4 -4
- package/dest/wasm/bb_wasm_private_kernel_prover.d.ts +14 -0
- package/dest/wasm/bb_wasm_private_kernel_prover.d.ts.map +1 -0
- package/dest/wasm/bb_wasm_private_kernel_prover.js +30 -0
- package/dest/wasm/bundle.d.ts +5 -0
- package/dest/wasm/bundle.d.ts.map +1 -0
- package/dest/wasm/bundle.js +9 -0
- package/dest/wasm/lazy.d.ts +5 -0
- package/dest/wasm/lazy.d.ts.map +1 -0
- package/dest/wasm/lazy.js +9 -0
- package/package.json +11 -10
- package/src/bb/cli.ts +9 -1
- package/src/honk.ts +16 -21
- package/src/prover/bb_native_private_kernel_prover.ts +110 -0
- package/src/prover/bb_private_kernel_prover.ts +138 -201
- package/src/prover/bb_prover.ts +25 -67
- package/src/prover/index.ts +1 -1
- package/src/stats.ts +6 -11
- package/src/test/test_circuit_prover.ts +21 -36
- package/src/verifier/bb_verifier.ts +11 -10
- package/src/wasm/bb_wasm_private_kernel_prover.ts +40 -0
- package/src/wasm/bundle.ts +10 -0
- package/src/wasm/lazy.ts +10 -0
- package/dest/wasm/index.d.ts +0 -19
- package/dest/wasm/index.d.ts.map +0 -1
- package/dest/wasm/index.js +0 -74
- package/src/wasm/index.ts +0 -155
|
@@ -10,13 +10,9 @@ import {
|
|
|
10
10
|
AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS,
|
|
11
11
|
type AvmCircuitInputs,
|
|
12
12
|
type BaseParityInputs,
|
|
13
|
-
EmptyNestedData,
|
|
14
|
-
type KernelCircuitPublicInputs,
|
|
15
13
|
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
16
14
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
17
15
|
type ParityPublicInputs,
|
|
18
|
-
type PrivateKernelEmptyInputData,
|
|
19
|
-
PrivateKernelEmptyInputs,
|
|
20
16
|
type Proof,
|
|
21
17
|
RECURSIVE_PROOF_LENGTH,
|
|
22
18
|
type RootParityInputs,
|
|
@@ -36,13 +32,13 @@ import {
|
|
|
36
32
|
type PublicBaseRollupInputs,
|
|
37
33
|
type RootRollupInputs,
|
|
38
34
|
type RootRollupPublicInputs,
|
|
35
|
+
type SingleTxBlockRootRollupInputs,
|
|
39
36
|
type TubeInputs,
|
|
40
37
|
} from '@aztec/circuits.js/rollup';
|
|
41
38
|
import { createLogger } from '@aztec/foundation/log';
|
|
42
39
|
import { sleep } from '@aztec/foundation/sleep';
|
|
43
40
|
import { Timer } from '@aztec/foundation/timer';
|
|
44
41
|
import {
|
|
45
|
-
ProtocolCircuitVks,
|
|
46
42
|
type ServerProtocolArtifact,
|
|
47
43
|
SimulatedServerCircuitArtifacts,
|
|
48
44
|
convertBaseParityInputsToWitnessMap,
|
|
@@ -53,7 +49,6 @@ import {
|
|
|
53
49
|
convertEmptyBlockRootRollupOutputsFromWitnessMap,
|
|
54
50
|
convertMergeRollupInputsToWitnessMap,
|
|
55
51
|
convertMergeRollupOutputsFromWitnessMap,
|
|
56
|
-
convertPrivateKernelEmptyInputsToWitnessMap,
|
|
57
52
|
convertRootParityInputsToWitnessMap,
|
|
58
53
|
convertRootParityOutputsFromWitnessMap,
|
|
59
54
|
convertRootRollupInputsToWitnessMap,
|
|
@@ -62,10 +57,12 @@ import {
|
|
|
62
57
|
convertSimulatedBlockRootRollupOutputsFromWitnessMap,
|
|
63
58
|
convertSimulatedPrivateBaseRollupInputsToWitnessMap,
|
|
64
59
|
convertSimulatedPrivateBaseRollupOutputsFromWitnessMap,
|
|
65
|
-
convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap,
|
|
66
60
|
convertSimulatedPublicBaseRollupInputsToWitnessMap,
|
|
67
61
|
convertSimulatedPublicBaseRollupOutputsFromWitnessMap,
|
|
68
|
-
|
|
62
|
+
convertSimulatedSingleTxBlockRootRollupInputsToWitnessMap,
|
|
63
|
+
convertSimulatedSingleTxBlockRootRollupOutputsFromWitnessMap,
|
|
64
|
+
} from '@aztec/noir-protocol-circuits-types/server';
|
|
65
|
+
import { ProtocolCircuitVks } from '@aztec/noir-protocol-circuits-types/vks';
|
|
69
66
|
import { type SimulationProvider, WASMSimulatorWithBlobs, emitCircuitSimulationStats } from '@aztec/simulator';
|
|
70
67
|
import { type TelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
71
68
|
|
|
@@ -95,33 +92,6 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
95
92
|
return this.instrumentation.tracer;
|
|
96
93
|
}
|
|
97
94
|
|
|
98
|
-
public async getEmptyPrivateKernelProof(
|
|
99
|
-
inputs: PrivateKernelEmptyInputData,
|
|
100
|
-
): Promise<
|
|
101
|
-
PublicInputsAndRecursiveProof<KernelCircuitPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
102
|
-
> {
|
|
103
|
-
const emptyNested = new EmptyNestedData(
|
|
104
|
-
makeRecursiveProof(NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH),
|
|
105
|
-
ProtocolCircuitVks['EmptyNestedArtifact'].keyAsFields,
|
|
106
|
-
);
|
|
107
|
-
const kernelInputs = new PrivateKernelEmptyInputs(
|
|
108
|
-
emptyNested,
|
|
109
|
-
inputs.header,
|
|
110
|
-
inputs.chainId,
|
|
111
|
-
inputs.version,
|
|
112
|
-
inputs.vkTreeRoot,
|
|
113
|
-
inputs.protocolContractTreeRoot,
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
return await this.simulate(
|
|
117
|
-
kernelInputs,
|
|
118
|
-
'PrivateKernelEmptyArtifact',
|
|
119
|
-
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
120
|
-
convertPrivateKernelEmptyInputsToWitnessMap,
|
|
121
|
-
convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap,
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
95
|
/**
|
|
126
96
|
* Simulates the base parity circuit from its inputs.
|
|
127
97
|
* @param inputs - Inputs to the circuit.
|
|
@@ -236,6 +206,21 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
236
206
|
);
|
|
237
207
|
}
|
|
238
208
|
|
|
209
|
+
@trackSpan('TestCircuitProver.getSingleTxBlockRootRollupProof')
|
|
210
|
+
public async getSingleTxBlockRootRollupProof(
|
|
211
|
+
input: SingleTxBlockRootRollupInputs,
|
|
212
|
+
): Promise<
|
|
213
|
+
PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
214
|
+
> {
|
|
215
|
+
return await this.simulate(
|
|
216
|
+
input,
|
|
217
|
+
'SingleTxBlockRootRollupArtifact',
|
|
218
|
+
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
219
|
+
convertSimulatedSingleTxBlockRootRollupInputsToWitnessMap,
|
|
220
|
+
convertSimulatedSingleTxBlockRootRollupOutputsFromWitnessMap,
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
239
224
|
/**
|
|
240
225
|
* Simulates the empty block root rollup circuit from its inputs.
|
|
241
226
|
* @param input - Inputs to the circuit.
|
|
@@ -334,7 +319,7 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
334
319
|
const circuitName = mapProtocolArtifactNameToCircuitName(artifactName);
|
|
335
320
|
|
|
336
321
|
let simulationProvider = this.simulationProvider ?? this.wasmSimulator;
|
|
337
|
-
if (
|
|
322
|
+
if (['BlockRootRollupArtifact', 'SingleTxBlockRootRollupArtifact'].includes(artifactName)) {
|
|
338
323
|
// TODO(#10323): temporarily force block root to use wasm while we simulate
|
|
339
324
|
// the blob operations with an oracle. Appears to be no way to provide nativeACVM with a foreign call hander.
|
|
340
325
|
simulationProvider = this.wasmSimulator;
|
|
@@ -3,11 +3,12 @@ import { type CircuitVerificationStats } from '@aztec/circuit-types/stats';
|
|
|
3
3
|
import { type Proof, type VerificationKeyData } from '@aztec/circuits.js';
|
|
4
4
|
import { runInDirectory } from '@aztec/foundation/fs';
|
|
5
5
|
import { type LogFn, type Logger, createLogger } from '@aztec/foundation/log';
|
|
6
|
+
import { ServerCircuitArtifacts } from '@aztec/noir-protocol-circuits-types/server';
|
|
6
7
|
import {
|
|
7
8
|
type ClientProtocolArtifact,
|
|
8
9
|
type ProtocolArtifact,
|
|
9
|
-
|
|
10
|
-
} from '@aztec/noir-protocol-circuits-types';
|
|
10
|
+
type ServerProtocolArtifact,
|
|
11
|
+
} from '@aztec/noir-protocol-circuits-types/types';
|
|
11
12
|
|
|
12
13
|
import { promises as fs } from 'fs';
|
|
13
14
|
import * as path from 'path';
|
|
@@ -22,7 +23,7 @@ import {
|
|
|
22
23
|
verifyProof,
|
|
23
24
|
} from '../bb/execute.js';
|
|
24
25
|
import { type BBConfig } from '../config.js';
|
|
25
|
-
import { type
|
|
26
|
+
import { type UltraKeccakHonkServerProtocolArtifact, getUltraHonkFlavorForCircuit } from '../honk.js';
|
|
26
27
|
import { writeToOutputDirectory } from '../prover/client_ivc_proof_utils.js';
|
|
27
28
|
import { isProtocolArtifactRecursive, mapProtocolArtifactNameToCircuitName } from '../stats.js';
|
|
28
29
|
import { extractVkData } from '../verification_key/verification_key_data.js';
|
|
@@ -36,7 +37,7 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
36
37
|
|
|
37
38
|
public static async new(
|
|
38
39
|
config: BBConfig,
|
|
39
|
-
initialCircuits:
|
|
40
|
+
initialCircuits: ServerProtocolArtifact[] = [],
|
|
40
41
|
logger = createLogger('bb-prover:verifier'),
|
|
41
42
|
) {
|
|
42
43
|
await fs.mkdir(config.bbWorkingDirectory, { recursive: true });
|
|
@@ -54,7 +55,7 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
private static async generateVerificationKey(
|
|
57
|
-
circuit:
|
|
58
|
+
circuit: ServerProtocolArtifact,
|
|
58
59
|
bbPath: string,
|
|
59
60
|
workingDirectory: string,
|
|
60
61
|
logFn: LogFn,
|
|
@@ -63,7 +64,7 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
63
64
|
bbPath,
|
|
64
65
|
workingDirectory,
|
|
65
66
|
circuit,
|
|
66
|
-
|
|
67
|
+
ServerCircuitArtifacts[circuit],
|
|
67
68
|
isProtocolArtifactRecursive(circuit),
|
|
68
69
|
getUltraHonkFlavorForCircuit(circuit),
|
|
69
70
|
logFn,
|
|
@@ -76,7 +77,7 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
76
77
|
});
|
|
77
78
|
}
|
|
78
79
|
|
|
79
|
-
public async getVerificationKeyData(circuit:
|
|
80
|
+
public async getVerificationKeyData(circuit: ServerProtocolArtifact) {
|
|
80
81
|
let promise = this.verificationKeys.get(circuit);
|
|
81
82
|
if (!promise) {
|
|
82
83
|
promise = BBCircuitVerifier.generateVerificationKey(
|
|
@@ -91,7 +92,7 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
91
92
|
return vk.clone();
|
|
92
93
|
}
|
|
93
94
|
|
|
94
|
-
public async verifyProofForCircuit(circuit:
|
|
95
|
+
public async verifyProofForCircuit(circuit: ServerProtocolArtifact, proof: Proof) {
|
|
95
96
|
const operation = async (bbWorkingDirectory: string) => {
|
|
96
97
|
const proofFileName = path.join(bbWorkingDirectory, PROOF_FILENAME);
|
|
97
98
|
const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
|
|
@@ -129,12 +130,12 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
129
130
|
await runInDirectory(this.config.bbWorkingDirectory, operation, this.config.bbSkipCleanup);
|
|
130
131
|
}
|
|
131
132
|
|
|
132
|
-
public async generateSolidityContract(circuit:
|
|
133
|
+
public async generateSolidityContract(circuit: UltraKeccakHonkServerProtocolArtifact, contractName: string) {
|
|
133
134
|
const result = await generateContractForCircuit(
|
|
134
135
|
this.config.bbBinaryPath,
|
|
135
136
|
this.config.bbWorkingDirectory,
|
|
136
137
|
circuit,
|
|
137
|
-
|
|
138
|
+
ServerCircuitArtifacts[circuit],
|
|
138
139
|
contractName,
|
|
139
140
|
this.logger.debug,
|
|
140
141
|
);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AztecClientBackend } from '@aztec/bb.js';
|
|
2
|
+
import { ClientIvcProof } from '@aztec/circuits.js';
|
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
5
|
+
import { type ArtifactProvider } from '@aztec/noir-protocol-circuits-types/types';
|
|
6
|
+
|
|
7
|
+
import { serializeWitness } from '@noir-lang/noirc_abi';
|
|
8
|
+
import { type WitnessMap } from '@noir-lang/types';
|
|
9
|
+
import { ungzip } from 'pako';
|
|
10
|
+
|
|
11
|
+
import { BBPrivateKernelProver } from '../prover/bb_private_kernel_prover.js';
|
|
12
|
+
|
|
13
|
+
export abstract class BBWASMPrivateKernelProver extends BBPrivateKernelProver {
|
|
14
|
+
constructor(
|
|
15
|
+
protected override artifactProvider: ArtifactProvider,
|
|
16
|
+
private threads: number = 1,
|
|
17
|
+
protected override log = createLogger('bb-prover:wasm'),
|
|
18
|
+
) {
|
|
19
|
+
super(artifactProvider, log);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public override async createClientIvcProof(acirs: Buffer[], witnessStack: WitnessMap[]): Promise<ClientIvcProof> {
|
|
23
|
+
const timer = new Timer();
|
|
24
|
+
this.log.info(`Generating ClientIVC proof...`);
|
|
25
|
+
const backend = new AztecClientBackend(
|
|
26
|
+
acirs.map(acir => ungzip(acir)),
|
|
27
|
+
{ threads: this.threads },
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const [proof, vk] = await backend.prove(witnessStack.map(witnessMap => ungzip(serializeWitness(witnessMap))));
|
|
31
|
+
await backend.destroy();
|
|
32
|
+
this.log.info(`Generated ClientIVC proof`, {
|
|
33
|
+
eventName: 'client-ivc-proof-generation',
|
|
34
|
+
duration: timer.ms(),
|
|
35
|
+
proofSize: proof.length,
|
|
36
|
+
vkSize: vk.length,
|
|
37
|
+
});
|
|
38
|
+
return new ClientIvcProof(Buffer.from(proof), Buffer.from(vk));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { BundleArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/bundle';
|
|
3
|
+
|
|
4
|
+
import { BBWASMPrivateKernelProver } from './bb_wasm_private_kernel_prover.js';
|
|
5
|
+
|
|
6
|
+
export class BBWASMBundlePrivateKernelProver extends BBWASMPrivateKernelProver {
|
|
7
|
+
constructor(threads = 1, log = createLogger('bb-prover:wasm:bundle')) {
|
|
8
|
+
super(new BundleArtifactProvider(), threads, log);
|
|
9
|
+
}
|
|
10
|
+
}
|
package/src/wasm/lazy.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { LazyArtifactProvider } from '@aztec/noir-protocol-circuits-types/client/lazy';
|
|
3
|
+
|
|
4
|
+
import { BBWASMPrivateKernelProver } from './bb_wasm_private_kernel_prover.js';
|
|
5
|
+
|
|
6
|
+
export class BBWASMLazyPrivateKernelProver extends BBWASMPrivateKernelProver {
|
|
7
|
+
constructor(threads = 1, log = createLogger('bb-prover:wasm:lazy')) {
|
|
8
|
+
super(new LazyArtifactProvider(), threads, log);
|
|
9
|
+
}
|
|
10
|
+
}
|
package/dest/wasm/index.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import { type PrivateKernelProver, type PrivateKernelSimulateOutput } from '@aztec/circuit-types';
|
|
4
|
-
import { ClientIvcProof, type PrivateKernelCircuitPublicInputs, type PrivateKernelInitCircuitPrivateInputs, type PrivateKernelInnerCircuitPrivateInputs, type PrivateKernelResetCircuitPrivateInputs, type PrivateKernelTailCircuitPrivateInputs, type PrivateKernelTailCircuitPublicInputs } from '@aztec/circuits.js';
|
|
5
|
-
import { type WitnessMap } from '@noir-lang/noir_js';
|
|
6
|
-
export declare class BBWasmPrivateKernelProver implements PrivateKernelProver {
|
|
7
|
-
private threads;
|
|
8
|
-
private log;
|
|
9
|
-
private simulator;
|
|
10
|
-
constructor(threads?: number, log?: import("@aztec/foundation/log").Logger);
|
|
11
|
-
simulateProofInit(inputs: PrivateKernelInitCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
12
|
-
simulateProofInner(inputs: PrivateKernelInnerCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
13
|
-
simulateProofReset(inputs: PrivateKernelResetCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
14
|
-
simulateProofTail(inputs: PrivateKernelTailCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelTailCircuitPublicInputs>>;
|
|
15
|
-
private simulate;
|
|
16
|
-
createClientIvcProof(acirs: Buffer[], witnessStack: WitnessMap[]): Promise<ClientIvcProof>;
|
|
17
|
-
computeGateCountForCircuit(_bytecode: Buffer, _circuitName: string): Promise<number>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dest/wasm/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EACL,cAAc,EACd,KAAK,gCAAgC,EACrC,KAAK,qCAAqC,EAC1C,KAAK,sCAAsC,EAC3C,KAAK,sCAAsC,EAC3C,KAAK,qCAAqC,EAC1C,KAAK,oCAAoC,EAC1C,MAAM,oBAAoB,CAAC;AAsB5B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,qBAAa,yBAA0B,YAAW,mBAAmB;IAGvD,OAAO,CAAC,OAAO;IAAc,OAAO,CAAC,GAAG;IAFpD,OAAO,CAAC,SAAS,CAAuB;gBAEpB,OAAO,GAAE,MAAU,EAAU,GAAG,yCAAiC;IAExE,iBAAiB,CAC5B,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,2BAA2B,CAAC,gCAAgC,CAAC,CAAC;IAS5D,kBAAkB,CAC7B,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,2BAA2B,CAAC,gCAAgC,CAAC,CAAC;IAS5D,kBAAkB,CAC7B,MAAM,EAAE,sCAAsC,GAC7C,OAAO,CAAC,2BAA2B,CAAC,gCAAgC,CAAC,CAAC;IAW5D,iBAAiB,CAC5B,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,2BAA2B,CAAC,oCAAoC,CAAC,CAAC;YAiB/D,QAAQ;IAqChB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAmBhG,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGrF"}
|
package/dest/wasm/index.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { AztecClientBackend } from '@aztec/bb.js';
|
|
2
|
-
import { ClientIvcProof, } from '@aztec/circuits.js';
|
|
3
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
-
import { Timer } from '@aztec/foundation/timer';
|
|
5
|
-
import { ClientCircuitArtifacts, ClientCircuitVks, convertPrivateKernelInitInputsToWitnessMap, convertPrivateKernelInitOutputsFromWitnessMap, convertPrivateKernelInnerInputsToWitnessMap, convertPrivateKernelInnerOutputsFromWitnessMap, convertPrivateKernelResetInputsToWitnessMap, convertPrivateKernelResetOutputsFromWitnessMap, convertPrivateKernelTailForPublicOutputsFromWitnessMap, convertPrivateKernelTailInputsToWitnessMap, convertPrivateKernelTailOutputsFromWitnessMap, convertPrivateKernelTailToPublicInputsToWitnessMap, getPrivateKernelResetArtifactName, } from '@aztec/noir-protocol-circuits-types/client';
|
|
6
|
-
import { WASMSimulator } from '@aztec/simulator/client';
|
|
7
|
-
import { serializeWitness } from '@noir-lang/noirc_abi';
|
|
8
|
-
import { ungzip } from 'pako';
|
|
9
|
-
export class BBWasmPrivateKernelProver {
|
|
10
|
-
constructor(threads = 1, log = createLogger('bb-prover:wasm')) {
|
|
11
|
-
this.threads = threads;
|
|
12
|
-
this.log = log;
|
|
13
|
-
this.simulator = new WASMSimulator();
|
|
14
|
-
}
|
|
15
|
-
async simulateProofInit(inputs) {
|
|
16
|
-
return await this.simulate(inputs, 'PrivateKernelInitArtifact', convertPrivateKernelInitInputsToWitnessMap, convertPrivateKernelInitOutputsFromWitnessMap);
|
|
17
|
-
}
|
|
18
|
-
async simulateProofInner(inputs) {
|
|
19
|
-
return await this.simulate(inputs, 'PrivateKernelInnerArtifact', convertPrivateKernelInnerInputsToWitnessMap, convertPrivateKernelInnerOutputsFromWitnessMap);
|
|
20
|
-
}
|
|
21
|
-
async simulateProofReset(inputs) {
|
|
22
|
-
const variantInputs = inputs.trimToSizes();
|
|
23
|
-
const artifactName = getPrivateKernelResetArtifactName(inputs.dimensions);
|
|
24
|
-
return await this.simulate(variantInputs, artifactName, variantInputs => convertPrivateKernelResetInputsToWitnessMap(variantInputs, artifactName), output => convertPrivateKernelResetOutputsFromWitnessMap(output, artifactName));
|
|
25
|
-
}
|
|
26
|
-
async simulateProofTail(inputs) {
|
|
27
|
-
if (!inputs.isForPublic()) {
|
|
28
|
-
return await this.simulate(inputs, 'PrivateKernelTailArtifact', convertPrivateKernelTailInputsToWitnessMap, convertPrivateKernelTailOutputsFromWitnessMap);
|
|
29
|
-
}
|
|
30
|
-
return await this.simulate(inputs, 'PrivateKernelTailToPublicArtifact', convertPrivateKernelTailToPublicInputsToWitnessMap, convertPrivateKernelTailForPublicOutputsFromWitnessMap);
|
|
31
|
-
}
|
|
32
|
-
async simulate(inputs, circuitType, convertInputs, convertOutputs) {
|
|
33
|
-
this.log.debug(`Generating witness for ${circuitType}`);
|
|
34
|
-
const compiledCircuit = ClientCircuitArtifacts[circuitType];
|
|
35
|
-
const witnessMap = convertInputs(inputs);
|
|
36
|
-
const timer = new Timer();
|
|
37
|
-
const outputWitness = await this.simulator.simulateCircuit(witnessMap, compiledCircuit);
|
|
38
|
-
const output = convertOutputs(outputWitness);
|
|
39
|
-
this.log.debug(`Generated witness for ${circuitType}`, {
|
|
40
|
-
eventName: 'circuit-witness-generation',
|
|
41
|
-
circuitName: circuitType,
|
|
42
|
-
duration: timer.ms(),
|
|
43
|
-
inputSize: inputs.toBuffer().length,
|
|
44
|
-
outputSize: output.toBuffer().length,
|
|
45
|
-
});
|
|
46
|
-
const verificationKey = ClientCircuitVks[circuitType].keyAsFields;
|
|
47
|
-
const bytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
|
|
48
|
-
const kernelOutput = {
|
|
49
|
-
publicInputs: output,
|
|
50
|
-
verificationKey,
|
|
51
|
-
outputWitness,
|
|
52
|
-
bytecode,
|
|
53
|
-
};
|
|
54
|
-
return kernelOutput;
|
|
55
|
-
}
|
|
56
|
-
async createClientIvcProof(acirs, witnessStack) {
|
|
57
|
-
const timer = new Timer();
|
|
58
|
-
this.log.info(`Generating ClientIVC proof...`);
|
|
59
|
-
const backend = new AztecClientBackend(acirs.map(acir => ungzip(acir)), { threads: this.threads });
|
|
60
|
-
const [proof, vk] = await backend.prove(witnessStack.map(witnessMap => ungzip(serializeWitness(witnessMap))));
|
|
61
|
-
await backend.destroy();
|
|
62
|
-
this.log.info(`Generated ClientIVC proof`, {
|
|
63
|
-
eventName: 'client-ivc-proof-generation',
|
|
64
|
-
duration: timer.ms(),
|
|
65
|
-
proofSize: proof.length,
|
|
66
|
-
vkSize: vk.length,
|
|
67
|
-
});
|
|
68
|
-
return new ClientIvcProof(Buffer.from(proof), Buffer.from(vk));
|
|
69
|
-
}
|
|
70
|
-
computeGateCountForCircuit(_bytecode, _circuitName) {
|
|
71
|
-
return Promise.resolve(0);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FzbS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUNMLGNBQWMsR0FPZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFFaEIsMENBQTBDLEVBQzFDLDZDQUE2QyxFQUM3QywyQ0FBMkMsRUFDM0MsOENBQThDLEVBQzlDLDJDQUEyQyxFQUMzQyw4Q0FBOEMsRUFDOUMsc0RBQXNELEVBQ3RELDBDQUEwQyxFQUMxQyw2Q0FBNkMsRUFDN0Msa0RBQWtELEVBQ2xELGlDQUFpQyxHQUNsQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlCLE1BQU0sT0FBTyx5QkFBeUI7SUFHcEMsWUFBb0IsVUFBa0IsQ0FBQyxFQUFVLE1BQU0sWUFBWSxDQUFDLGdCQUFnQixDQUFDO1FBQWpFLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFpQztRQUY3RSxjQUFTLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUVnRCxDQUFDO0lBRWxGLEtBQUssQ0FBQyxpQkFBaUIsQ0FDNUIsTUFBNkM7UUFFN0MsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQ3hCLE1BQU0sRUFDTiwyQkFBMkIsRUFDM0IsMENBQTBDLEVBQzFDLDZDQUE2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
|
package/src/wasm/index.ts
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { AztecClientBackend } from '@aztec/bb.js';
|
|
2
|
-
import { type PrivateKernelProver, type PrivateKernelSimulateOutput } from '@aztec/circuit-types';
|
|
3
|
-
import {
|
|
4
|
-
ClientIvcProof,
|
|
5
|
-
type PrivateKernelCircuitPublicInputs,
|
|
6
|
-
type PrivateKernelInitCircuitPrivateInputs,
|
|
7
|
-
type PrivateKernelInnerCircuitPrivateInputs,
|
|
8
|
-
type PrivateKernelResetCircuitPrivateInputs,
|
|
9
|
-
type PrivateKernelTailCircuitPrivateInputs,
|
|
10
|
-
type PrivateKernelTailCircuitPublicInputs,
|
|
11
|
-
} from '@aztec/circuits.js';
|
|
12
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
13
|
-
import { Timer } from '@aztec/foundation/timer';
|
|
14
|
-
import {
|
|
15
|
-
ClientCircuitArtifacts,
|
|
16
|
-
ClientCircuitVks,
|
|
17
|
-
type ClientProtocolArtifact,
|
|
18
|
-
convertPrivateKernelInitInputsToWitnessMap,
|
|
19
|
-
convertPrivateKernelInitOutputsFromWitnessMap,
|
|
20
|
-
convertPrivateKernelInnerInputsToWitnessMap,
|
|
21
|
-
convertPrivateKernelInnerOutputsFromWitnessMap,
|
|
22
|
-
convertPrivateKernelResetInputsToWitnessMap,
|
|
23
|
-
convertPrivateKernelResetOutputsFromWitnessMap,
|
|
24
|
-
convertPrivateKernelTailForPublicOutputsFromWitnessMap,
|
|
25
|
-
convertPrivateKernelTailInputsToWitnessMap,
|
|
26
|
-
convertPrivateKernelTailOutputsFromWitnessMap,
|
|
27
|
-
convertPrivateKernelTailToPublicInputsToWitnessMap,
|
|
28
|
-
getPrivateKernelResetArtifactName,
|
|
29
|
-
} from '@aztec/noir-protocol-circuits-types/client';
|
|
30
|
-
import { WASMSimulator } from '@aztec/simulator/client';
|
|
31
|
-
import { type NoirCompiledCircuit } from '@aztec/types/noir';
|
|
32
|
-
|
|
33
|
-
import { type WitnessMap } from '@noir-lang/noir_js';
|
|
34
|
-
import { serializeWitness } from '@noir-lang/noirc_abi';
|
|
35
|
-
import { ungzip } from 'pako';
|
|
36
|
-
|
|
37
|
-
export class BBWasmPrivateKernelProver implements PrivateKernelProver {
|
|
38
|
-
private simulator = new WASMSimulator();
|
|
39
|
-
|
|
40
|
-
constructor(private threads: number = 1, private log = createLogger('bb-prover:wasm')) {}
|
|
41
|
-
|
|
42
|
-
public async simulateProofInit(
|
|
43
|
-
inputs: PrivateKernelInitCircuitPrivateInputs,
|
|
44
|
-
): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>> {
|
|
45
|
-
return await this.simulate(
|
|
46
|
-
inputs,
|
|
47
|
-
'PrivateKernelInitArtifact',
|
|
48
|
-
convertPrivateKernelInitInputsToWitnessMap,
|
|
49
|
-
convertPrivateKernelInitOutputsFromWitnessMap,
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public async simulateProofInner(
|
|
54
|
-
inputs: PrivateKernelInnerCircuitPrivateInputs,
|
|
55
|
-
): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>> {
|
|
56
|
-
return await this.simulate(
|
|
57
|
-
inputs,
|
|
58
|
-
'PrivateKernelInnerArtifact',
|
|
59
|
-
convertPrivateKernelInnerInputsToWitnessMap,
|
|
60
|
-
convertPrivateKernelInnerOutputsFromWitnessMap,
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
public async simulateProofReset(
|
|
65
|
-
inputs: PrivateKernelResetCircuitPrivateInputs,
|
|
66
|
-
): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>> {
|
|
67
|
-
const variantInputs = inputs.trimToSizes();
|
|
68
|
-
const artifactName = getPrivateKernelResetArtifactName(inputs.dimensions);
|
|
69
|
-
return await this.simulate(
|
|
70
|
-
variantInputs,
|
|
71
|
-
artifactName,
|
|
72
|
-
variantInputs => convertPrivateKernelResetInputsToWitnessMap(variantInputs, artifactName),
|
|
73
|
-
output => convertPrivateKernelResetOutputsFromWitnessMap(output, artifactName),
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
public async simulateProofTail(
|
|
78
|
-
inputs: PrivateKernelTailCircuitPrivateInputs,
|
|
79
|
-
): Promise<PrivateKernelSimulateOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
80
|
-
if (!inputs.isForPublic()) {
|
|
81
|
-
return await this.simulate(
|
|
82
|
-
inputs,
|
|
83
|
-
'PrivateKernelTailArtifact',
|
|
84
|
-
convertPrivateKernelTailInputsToWitnessMap,
|
|
85
|
-
convertPrivateKernelTailOutputsFromWitnessMap,
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
return await this.simulate(
|
|
89
|
-
inputs,
|
|
90
|
-
'PrivateKernelTailToPublicArtifact',
|
|
91
|
-
convertPrivateKernelTailToPublicInputsToWitnessMap,
|
|
92
|
-
convertPrivateKernelTailForPublicOutputsFromWitnessMap,
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
private async simulate<
|
|
97
|
-
I extends { toBuffer: () => Buffer },
|
|
98
|
-
O extends PrivateKernelCircuitPublicInputs | PrivateKernelTailCircuitPublicInputs,
|
|
99
|
-
>(
|
|
100
|
-
inputs: I,
|
|
101
|
-
circuitType: ClientProtocolArtifact,
|
|
102
|
-
convertInputs: (inputs: I) => WitnessMap,
|
|
103
|
-
convertOutputs: (outputs: WitnessMap) => O,
|
|
104
|
-
): Promise<PrivateKernelSimulateOutput<O>> {
|
|
105
|
-
this.log.debug(`Generating witness for ${circuitType}`);
|
|
106
|
-
const compiledCircuit: NoirCompiledCircuit = ClientCircuitArtifacts[circuitType];
|
|
107
|
-
|
|
108
|
-
const witnessMap = convertInputs(inputs);
|
|
109
|
-
const timer = new Timer();
|
|
110
|
-
const outputWitness = await this.simulator.simulateCircuit(witnessMap, compiledCircuit);
|
|
111
|
-
const output = convertOutputs(outputWitness);
|
|
112
|
-
|
|
113
|
-
this.log.debug(`Generated witness for ${circuitType}`, {
|
|
114
|
-
eventName: 'circuit-witness-generation',
|
|
115
|
-
circuitName: circuitType,
|
|
116
|
-
duration: timer.ms(),
|
|
117
|
-
inputSize: inputs.toBuffer().length,
|
|
118
|
-
outputSize: output.toBuffer().length,
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
const verificationKey = ClientCircuitVks[circuitType].keyAsFields;
|
|
122
|
-
const bytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
|
|
123
|
-
|
|
124
|
-
const kernelOutput: PrivateKernelSimulateOutput<O> = {
|
|
125
|
-
publicInputs: output,
|
|
126
|
-
verificationKey,
|
|
127
|
-
outputWitness,
|
|
128
|
-
bytecode,
|
|
129
|
-
};
|
|
130
|
-
return kernelOutput;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
async createClientIvcProof(acirs: Buffer[], witnessStack: WitnessMap[]): Promise<ClientIvcProof> {
|
|
134
|
-
const timer = new Timer();
|
|
135
|
-
this.log.info(`Generating ClientIVC proof...`);
|
|
136
|
-
const backend = new AztecClientBackend(
|
|
137
|
-
acirs.map(acir => ungzip(acir)),
|
|
138
|
-
{ threads: this.threads },
|
|
139
|
-
);
|
|
140
|
-
|
|
141
|
-
const [proof, vk] = await backend.prove(witnessStack.map(witnessMap => ungzip(serializeWitness(witnessMap))));
|
|
142
|
-
await backend.destroy();
|
|
143
|
-
this.log.info(`Generated ClientIVC proof`, {
|
|
144
|
-
eventName: 'client-ivc-proof-generation',
|
|
145
|
-
duration: timer.ms(),
|
|
146
|
-
proofSize: proof.length,
|
|
147
|
-
vkSize: vk.length,
|
|
148
|
-
});
|
|
149
|
-
return new ClientIvcProof(Buffer.from(proof), Buffer.from(vk));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
computeGateCountForCircuit(_bytecode: Buffer, _circuitName: string): Promise<number> {
|
|
153
|
-
return Promise.resolve(0);
|
|
154
|
-
}
|
|
155
|
-
}
|