@aztec/bb-prover 0.56.0 → 0.58.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 +1 -1
- package/dest/bb/execute.d.ts.map +1 -1
- package/dest/bb/execute.js +1 -1
- package/dest/bb/index.js +0 -0
- package/dest/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/honk.d.ts +5 -5
- package/dest/honk.d.ts.map +1 -1
- package/dest/honk.js +2 -5
- package/dest/index.d.ts +1 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -1
- package/dest/prover/bb_private_kernel_prover.d.ts +2 -3
- package/dest/prover/bb_private_kernel_prover.d.ts.map +1 -1
- package/dest/prover/bb_private_kernel_prover.js +9 -11
- package/dest/prover/bb_prover.d.ts +8 -13
- package/dest/prover/bb_prover.d.ts.map +1 -1
- package/dest/prover/bb_prover.js +12 -15
- package/dest/stats.d.ts.map +1 -1
- package/dest/stats.js +6 -16
- package/dest/test/test_circuit_prover.d.ts +10 -8
- package/dest/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/test/test_circuit_prover.js +26 -14
- package/dest/verification_key/verification_key_data.d.ts +2 -2
- package/dest/verification_key/verification_key_data.d.ts.map +1 -1
- package/dest/verification_key/verification_key_data.js +7 -6
- package/dest/verifier/bb_verifier.d.ts +2 -1
- package/dest/verifier/bb_verifier.d.ts.map +1 -1
- package/dest/verifier/bb_verifier.js +1 -1
- package/package.json +10 -7
- package/src/bb/execute.ts +1 -1
- package/src/config.ts +1 -1
- package/src/honk.ts +7 -10
- package/src/index.ts +1 -0
- package/src/prover/bb_private_kernel_prover.ts +15 -20
- package/src/prover/bb_prover.ts +25 -24
- package/src/stats.ts +5 -15
- package/src/test/test_circuit_prover.ts +48 -13
- package/src/verification_key/verification_key_data.ts +6 -7
- package/src/verifier/bb_verifier.ts +2 -2
|
@@ -2,6 +2,7 @@ import { type ClientProtocolCircuitVerifier, Tx } from '@aztec/circuit-types';
|
|
|
2
2
|
import { type Proof, type VerificationKeyData } from '@aztec/circuits.js';
|
|
3
3
|
import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
|
|
4
4
|
import { type BBConfig } from '../config.js';
|
|
5
|
+
import { type UltraKeccakHonkProtocolArtifact } from '../honk.js';
|
|
5
6
|
export declare class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
6
7
|
private config;
|
|
7
8
|
private verificationKeys;
|
|
@@ -11,7 +12,7 @@ export declare class BBCircuitVerifier implements ClientProtocolCircuitVerifier
|
|
|
11
12
|
private static generateVerificationKey;
|
|
12
13
|
getVerificationKeyData(circuit: ProtocolArtifact): Promise<VerificationKeyData>;
|
|
13
14
|
verifyProofForCircuit(circuit: ProtocolArtifact, proof: Proof): Promise<void>;
|
|
14
|
-
generateSolidityContract(circuit:
|
|
15
|
+
generateSolidityContract(circuit: UltraKeccakHonkProtocolArtifact, contractName: string): Promise<string>;
|
|
15
16
|
verifyProof(tx: Tx): Promise<boolean>;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=bb_verifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bb_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/bb_verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,6BAA6B,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,qCAAqC,CAAC;AAc7C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bb_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/bb_verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,6BAA6B,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,qCAAqC,CAAC;AAc7C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,KAAK,+BAA+B,EAAgC,MAAM,YAAY,CAAC;AAIhG,qBAAa,iBAAkB,YAAW,6BAA6B;IAEnE,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IAHhB,OAAO;WAMa,GAAG,CACrB,MAAM,EAAE,QAAQ,EAChB,eAAe,GAAE,gBAAgB,EAAO,EACxC,MAAM,yCAAyC;mBAgB5B,uBAAuB;IAsB/B,sBAAsB,CAAC,OAAO,EAAE,gBAAgB;IAehD,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK;IAsC7D,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,EAAE,YAAY,EAAE,MAAM;IAiBvF,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAuCnD"}
|
|
@@ -109,4 +109,4 @@ export class BBCircuitVerifier {
|
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvYmJfdmVyaWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxFQUFFLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFnQyxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hGLE9BQU8sRUFHTCx3QkFBd0IsR0FDekIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQ0wsU0FBUyxFQUNULGNBQWMsRUFDZCxXQUFXLEVBQ1gsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDcEIsV0FBVyxHQUNaLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUF3Qyw0QkFBNEIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRTdFLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFDVSxNQUFnQixFQUNoQixtQkFBbUIsSUFBSSxHQUFHLEVBQWtELEVBQzVFLE1BQW1CO1FBRm5CLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE0RDtRQUM1RSxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQzFCLENBQUM7SUFFRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDckIsTUFBZ0IsRUFDaEIsa0JBQXNDLEVBQUUsRUFDeEMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDO1FBRS9DLE1B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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/bb-prover",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.58.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js"
|
|
@@ -41,6 +41,9 @@
|
|
|
41
41
|
"parser": {
|
|
42
42
|
"syntax": "typescript",
|
|
43
43
|
"decorators": true
|
|
44
|
+
},
|
|
45
|
+
"transform": {
|
|
46
|
+
"decoratorVersion": "2022-03"
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
}
|
|
@@ -59,12 +62,12 @@
|
|
|
59
62
|
]
|
|
60
63
|
},
|
|
61
64
|
"dependencies": {
|
|
62
|
-
"@aztec/circuit-types": "0.
|
|
63
|
-
"@aztec/circuits.js": "0.
|
|
64
|
-
"@aztec/foundation": "0.
|
|
65
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
66
|
-
"@aztec/simulator": "0.
|
|
67
|
-
"@aztec/telemetry-client": "0.
|
|
65
|
+
"@aztec/circuit-types": "0.58.0",
|
|
66
|
+
"@aztec/circuits.js": "0.58.0",
|
|
67
|
+
"@aztec/foundation": "0.58.0",
|
|
68
|
+
"@aztec/noir-protocol-circuits-types": "0.58.0",
|
|
69
|
+
"@aztec/simulator": "0.58.0",
|
|
70
|
+
"@aztec/telemetry-client": "0.58.0",
|
|
68
71
|
"@msgpack/msgpack": "^3.0.0-beta2",
|
|
69
72
|
"@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
|
|
70
73
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
package/src/bb/execute.ts
CHANGED
|
@@ -263,7 +263,7 @@ export async function computeVerificationKey(
|
|
|
263
263
|
workingDirectory: string,
|
|
264
264
|
circuitName: string,
|
|
265
265
|
bytecode: Buffer,
|
|
266
|
-
flavor: UltraHonkFlavor,
|
|
266
|
+
flavor: UltraHonkFlavor | 'mega_honk',
|
|
267
267
|
log: LogFn,
|
|
268
268
|
): Promise<BBFailure | BBSuccess> {
|
|
269
269
|
// Check that the working directory exists
|
package/src/config.ts
CHANGED
package/src/honk.ts
CHANGED
|
@@ -2,20 +2,17 @@ import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
|
|
|
2
2
|
|
|
3
3
|
export type UltraHonkFlavor = 'ultra_honk' | 'ultra_keccak_honk';
|
|
4
4
|
|
|
5
|
-
const UltraKeccakHonkCircuits = [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
] as const satisfies ProtocolArtifact[];
|
|
9
|
-
type UltraKeccakHonkCircuits = (typeof UltraKeccakHonkCircuits)[number];
|
|
10
|
-
type UltraHonkCircuits = Exclude<ProtocolArtifact, UltraKeccakHonkCircuits>;
|
|
5
|
+
const UltraKeccakHonkCircuits = ['RootRollupArtifact'] as const satisfies ProtocolArtifact[];
|
|
6
|
+
export type UltraKeccakHonkProtocolArtifact = (typeof UltraKeccakHonkCircuits)[number];
|
|
7
|
+
export type UltraHonkProtocolArtifact = Exclude<ProtocolArtifact, UltraKeccakHonkProtocolArtifact>;
|
|
11
8
|
|
|
12
|
-
export function getUltraHonkFlavorForCircuit(artifact:
|
|
13
|
-
export function getUltraHonkFlavorForCircuit(artifact:
|
|
9
|
+
export function getUltraHonkFlavorForCircuit(artifact: UltraKeccakHonkProtocolArtifact): 'ultra_keccak_honk';
|
|
10
|
+
export function getUltraHonkFlavorForCircuit(artifact: UltraHonkProtocolArtifact): 'ultra_honk';
|
|
14
11
|
export function getUltraHonkFlavorForCircuit(artifact: ProtocolArtifact): UltraHonkFlavor;
|
|
15
12
|
export function getUltraHonkFlavorForCircuit(artifact: ProtocolArtifact): UltraHonkFlavor {
|
|
16
13
|
return isUltraKeccakHonkCircuit(artifact) ? 'ultra_keccak_honk' : 'ultra_honk';
|
|
17
14
|
}
|
|
18
15
|
|
|
19
|
-
function isUltraKeccakHonkCircuit(artifact: ProtocolArtifact): artifact is
|
|
20
|
-
return UltraKeccakHonkCircuits.includes(artifact as
|
|
16
|
+
function isUltraKeccakHonkCircuit(artifact: ProtocolArtifact): artifact is UltraKeccakHonkProtocolArtifact {
|
|
17
|
+
return UltraKeccakHonkCircuits.includes(artifact as UltraKeccakHonkProtocolArtifact);
|
|
21
18
|
}
|
package/src/index.ts
CHANGED
|
@@ -8,11 +8,10 @@ import {
|
|
|
8
8
|
AGGREGATION_OBJECT_LENGTH,
|
|
9
9
|
ClientIvcProof,
|
|
10
10
|
Fr,
|
|
11
|
-
type PrivateCircuitPublicInputs,
|
|
12
11
|
type PrivateKernelCircuitPublicInputs,
|
|
13
12
|
type PrivateKernelInitCircuitPrivateInputs,
|
|
14
13
|
type PrivateKernelInnerCircuitPrivateInputs,
|
|
15
|
-
type
|
|
14
|
+
type PrivateKernelResetCircuitPrivateInputs,
|
|
16
15
|
type PrivateKernelTailCircuitPrivateInputs,
|
|
17
16
|
type PrivateKernelTailCircuitPublicInputs,
|
|
18
17
|
Proof,
|
|
@@ -20,14 +19,13 @@ import {
|
|
|
20
19
|
type VerificationKeyAsFields,
|
|
21
20
|
type VerificationKeyData,
|
|
22
21
|
} from '@aztec/circuits.js';
|
|
23
|
-
import { siloNoteHash } from '@aztec/circuits.js/hash';
|
|
24
22
|
import { runInDirectory } from '@aztec/foundation/fs';
|
|
25
23
|
import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
|
|
26
24
|
import { Timer } from '@aztec/foundation/timer';
|
|
27
25
|
import {
|
|
28
26
|
ClientCircuitArtifacts,
|
|
27
|
+
ClientCircuitVks,
|
|
29
28
|
type ClientProtocolArtifact,
|
|
30
|
-
PrivateResetTagToArtifactName,
|
|
31
29
|
ProtocolCircuitVks,
|
|
32
30
|
convertPrivateKernelInitInputsToWitnessMap,
|
|
33
31
|
convertPrivateKernelInitOutputsFromWitnessMap,
|
|
@@ -39,6 +37,7 @@ import {
|
|
|
39
37
|
convertPrivateKernelTailInputsToWitnessMap,
|
|
40
38
|
convertPrivateKernelTailOutputsFromWitnessMap,
|
|
41
39
|
convertPrivateKernelTailToPublicInputsToWitnessMap,
|
|
40
|
+
getPrivateKernelResetArtifactName,
|
|
42
41
|
} from '@aztec/noir-protocol-circuits-types';
|
|
43
42
|
import { WASMSimulator } from '@aztec/simulator';
|
|
44
43
|
import { type NoirCompiledCircuit } from '@aztec/types/noir';
|
|
@@ -130,12 +129,6 @@ export class BBNativePrivateKernelProver implements PrivateKernelProver {
|
|
|
130
129
|
return await this.runInDirectory(operation);
|
|
131
130
|
}
|
|
132
131
|
|
|
133
|
-
public getSiloedCommitments(publicInputs: PrivateCircuitPublicInputs) {
|
|
134
|
-
const contractAddress = publicInputs.callContext.storageContractAddress;
|
|
135
|
-
|
|
136
|
-
return Promise.resolve(publicInputs.noteHashes.map(commitment => siloNoteHash(contractAddress, commitment.value)));
|
|
137
|
-
}
|
|
138
|
-
|
|
139
132
|
public async simulateProofInit(
|
|
140
133
|
inputs: PrivateKernelInitCircuitPrivateInputs,
|
|
141
134
|
): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>> {
|
|
@@ -159,13 +152,15 @@ export class BBNativePrivateKernelProver implements PrivateKernelProver {
|
|
|
159
152
|
}
|
|
160
153
|
|
|
161
154
|
public async simulateProofReset(
|
|
162
|
-
inputs:
|
|
155
|
+
inputs: PrivateKernelResetCircuitPrivateInputs,
|
|
163
156
|
): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>> {
|
|
157
|
+
const variantInputs = inputs.trimToSizes();
|
|
158
|
+
const artifactName = getPrivateKernelResetArtifactName(inputs.dimensions);
|
|
164
159
|
return await this.simulate(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
convertPrivateKernelResetInputsToWitnessMap,
|
|
168
|
-
output => convertPrivateKernelResetOutputsFromWitnessMap(output,
|
|
160
|
+
variantInputs,
|
|
161
|
+
artifactName,
|
|
162
|
+
variantInputs => convertPrivateKernelResetInputsToWitnessMap(variantInputs, artifactName),
|
|
163
|
+
output => convertPrivateKernelResetOutputsFromWitnessMap(output, artifactName),
|
|
169
164
|
);
|
|
170
165
|
}
|
|
171
166
|
|
|
@@ -283,14 +278,14 @@ export class BBNativePrivateKernelProver implements PrivateKernelProver {
|
|
|
283
278
|
outputSize: output.toBuffer().length,
|
|
284
279
|
} satisfies CircuitWitnessGenerationStats);
|
|
285
280
|
|
|
286
|
-
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
);
|
|
281
|
+
const verificationKey = ClientCircuitVks[circuitType].keyAsFields;
|
|
282
|
+
const bytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
|
|
283
|
+
|
|
290
284
|
const kernelOutput: PrivateKernelSimulateOutput<O> = {
|
|
291
285
|
publicInputs: output,
|
|
292
286
|
verificationKey,
|
|
293
287
|
outputWitness,
|
|
288
|
+
bytecode,
|
|
294
289
|
};
|
|
295
290
|
return kernelOutput;
|
|
296
291
|
}
|
|
@@ -313,7 +308,7 @@ export class BBNativePrivateKernelProver implements PrivateKernelProver {
|
|
|
313
308
|
directory,
|
|
314
309
|
circuitType,
|
|
315
310
|
bytecode,
|
|
316
|
-
circuitType === 'App' ? '
|
|
311
|
+
circuitType === 'App' ? 'mega_honk' : getUltraHonkFlavorForCircuit(circuitType),
|
|
317
312
|
this.log.debug,
|
|
318
313
|
);
|
|
319
314
|
|
package/src/prover/bb_prover.ts
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
/* eslint-disable require-await */
|
|
2
2
|
import {
|
|
3
|
-
type
|
|
3
|
+
type ProofAndVerificationKey,
|
|
4
4
|
type PublicInputsAndRecursiveProof,
|
|
5
5
|
type ServerCircuitProver,
|
|
6
|
+
makeProofAndVerificationKey,
|
|
6
7
|
makePublicInputsAndRecursiveProof,
|
|
7
8
|
} from '@aztec/circuit-types';
|
|
8
9
|
import { type CircuitProvingStats, type CircuitWitnessGenerationStats } from '@aztec/circuit-types/stats';
|
|
9
10
|
import {
|
|
10
11
|
AGGREGATION_OBJECT_LENGTH,
|
|
11
12
|
type AvmCircuitInputs,
|
|
12
|
-
type AvmVerificationKeyData,
|
|
13
13
|
type BaseOrMergeRollupPublicInputs,
|
|
14
14
|
type BaseParityInputs,
|
|
15
15
|
type BaseRollupInputs,
|
|
16
16
|
type BlockMergeRollupInputs,
|
|
17
17
|
type BlockRootOrBlockMergePublicInputs,
|
|
18
18
|
type BlockRootRollupInputs,
|
|
19
|
+
type EmptyBlockRootRollupInputs,
|
|
19
20
|
EmptyNestedCircuitInputs,
|
|
20
21
|
EmptyNestedData,
|
|
21
22
|
Fr,
|
|
@@ -47,6 +48,7 @@ import { createDebugLogger } from '@aztec/foundation/log';
|
|
|
47
48
|
import { Timer } from '@aztec/foundation/timer';
|
|
48
49
|
import {
|
|
49
50
|
ProtocolCircuitVkIndexes,
|
|
51
|
+
ProtocolCircuitVks,
|
|
50
52
|
ServerCircuitArtifacts,
|
|
51
53
|
type ServerProtocolArtifact,
|
|
52
54
|
convertBaseParityInputsToWitnessMap,
|
|
@@ -57,6 +59,8 @@ import {
|
|
|
57
59
|
convertBlockMergeRollupOutputsFromWitnessMap,
|
|
58
60
|
convertBlockRootRollupInputsToWitnessMap,
|
|
59
61
|
convertBlockRootRollupOutputsFromWitnessMap,
|
|
62
|
+
convertEmptyBlockRootRollupInputsToWitnessMap,
|
|
63
|
+
convertEmptyBlockRootRollupOutputsFromWitnessMap,
|
|
60
64
|
convertMergeRollupInputsToWitnessMap,
|
|
61
65
|
convertMergeRollupOutputsFromWitnessMap,
|
|
62
66
|
convertPrivateKernelEmptyInputsToWitnessMap,
|
|
@@ -204,7 +208,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
204
208
|
@trackSpan('BBNativeRollupProver.getAvmProof', inputs => ({
|
|
205
209
|
[Attributes.APP_CIRCUIT_NAME]: inputs.functionName,
|
|
206
210
|
}))
|
|
207
|
-
public async getAvmProof(inputs: AvmCircuitInputs): Promise<
|
|
211
|
+
public async getAvmProof(inputs: AvmCircuitInputs): Promise<ProofAndVerificationKey<Proof>> {
|
|
208
212
|
const proofAndVk = await this.createAvmProof(inputs);
|
|
209
213
|
await this.verifyAvmProof(proofAndVk.proof, proofAndVk.verificationKey);
|
|
210
214
|
return proofAndVk;
|
|
@@ -381,29 +385,26 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
381
385
|
}
|
|
382
386
|
|
|
383
387
|
/**
|
|
384
|
-
* Simulates the block root rollup circuit from its inputs.
|
|
385
|
-
* Returns a non-recursive proof to verify on L1.
|
|
386
|
-
* @dev TODO(palla/prover): This is a temporary workaround to get the proof to L1 with the old block flow.
|
|
388
|
+
* Simulates the empty block root rollup circuit from its inputs.
|
|
387
389
|
* @param input - Inputs to the circuit.
|
|
388
390
|
* @returns The public inputs as outputs of the simulation.
|
|
389
391
|
*/
|
|
390
|
-
public async
|
|
391
|
-
input:
|
|
392
|
+
public async getEmptyBlockRootRollupProof(
|
|
393
|
+
input: EmptyBlockRootRollupInputs,
|
|
392
394
|
): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
|
|
393
|
-
const { circuitOutput, proof } = await this.
|
|
395
|
+
const { circuitOutput, proof } = await this.createRecursiveProof(
|
|
394
396
|
input,
|
|
395
|
-
'
|
|
396
|
-
|
|
397
|
-
|
|
397
|
+
'EmptyBlockRootRollupArtifact',
|
|
398
|
+
RECURSIVE_PROOF_LENGTH,
|
|
399
|
+
convertEmptyBlockRootRollupInputsToWitnessMap,
|
|
400
|
+
convertEmptyBlockRootRollupOutputsFromWitnessMap,
|
|
398
401
|
);
|
|
399
402
|
|
|
400
|
-
const
|
|
401
|
-
|
|
402
|
-
const verificationKey = await this.getVerificationKeyDataForCircuit('BlockRootRollupFinalArtifact');
|
|
403
|
+
const verificationKey = await this.getVerificationKeyDataForCircuit('EmptyBlockRootRollupArtifact');
|
|
403
404
|
|
|
404
|
-
await this.verifyProof('
|
|
405
|
+
await this.verifyProof('EmptyBlockRootRollupArtifact', proof.binaryProof);
|
|
405
406
|
|
|
406
|
-
return makePublicInputsAndRecursiveProof(circuitOutput,
|
|
407
|
+
return makePublicInputsAndRecursiveProof(circuitOutput, proof, verificationKey);
|
|
407
408
|
}
|
|
408
409
|
|
|
409
410
|
/**
|
|
@@ -529,7 +530,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
529
530
|
convertPrivateKernelEmptyOutputsFromWitnessMap,
|
|
530
531
|
);
|
|
531
532
|
//info(`proof: ${proof.proof}`);
|
|
532
|
-
const verificationKey =
|
|
533
|
+
const verificationKey = ProtocolCircuitVks['PrivateKernelEmptyArtifact'];
|
|
533
534
|
await this.verifyProof('PrivateKernelEmptyArtifact', proof.binaryProof);
|
|
534
535
|
|
|
535
536
|
return makePublicInputsAndRecursiveProof(circuitOutput, proof, verificationKey);
|
|
@@ -676,8 +677,8 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
676
677
|
return provingResult;
|
|
677
678
|
}
|
|
678
679
|
|
|
679
|
-
private async createAvmProof(input: AvmCircuitInputs): Promise<
|
|
680
|
-
const operation = async (bbWorkingDirectory: string): Promise<
|
|
680
|
+
private async createAvmProof(input: AvmCircuitInputs): Promise<ProofAndVerificationKey<Proof>> {
|
|
681
|
+
const operation = async (bbWorkingDirectory: string): Promise<ProofAndVerificationKey<Proof>> => {
|
|
681
682
|
const provingResult = await this.generateAvmProofWithBB(input, bbWorkingDirectory);
|
|
682
683
|
|
|
683
684
|
const rawProof = await fs.readFile(provingResult.proofPath!);
|
|
@@ -708,14 +709,14 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
708
709
|
} satisfies CircuitProvingStats,
|
|
709
710
|
);
|
|
710
711
|
|
|
711
|
-
return
|
|
712
|
+
return makeProofAndVerificationKey(proof, verificationKey);
|
|
712
713
|
};
|
|
713
714
|
return await this.runInDirectory(operation);
|
|
714
715
|
}
|
|
715
716
|
|
|
716
717
|
public async getTubeProof(
|
|
717
718
|
input: TubeInputs,
|
|
718
|
-
): Promise<
|
|
719
|
+
): Promise<ProofAndVerificationKey<RecursiveProof<typeof TUBE_PROOF_LENGTH>>> {
|
|
719
720
|
// this probably is gonna need to call client ivc
|
|
720
721
|
const operation = async (bbWorkingDirectory: string) => {
|
|
721
722
|
logger.debug(`createTubeProof: ${bbWorkingDirectory}`);
|
|
@@ -739,7 +740,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
739
740
|
} fields`,
|
|
740
741
|
);
|
|
741
742
|
|
|
742
|
-
return
|
|
743
|
+
return makeProofAndVerificationKey(tubeProof, tubeVK);
|
|
743
744
|
};
|
|
744
745
|
return await this.runInDirectory(operation);
|
|
745
746
|
}
|
|
@@ -813,7 +814,7 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
813
814
|
return await this.verifyWithKey(getUltraHonkFlavorForCircuit(circuitType), verificationKey, proof);
|
|
814
815
|
}
|
|
815
816
|
|
|
816
|
-
public async verifyAvmProof(proof: Proof, verificationKey:
|
|
817
|
+
public async verifyAvmProof(proof: Proof, verificationKey: VerificationKeyData) {
|
|
817
818
|
return await this.verifyWithKeyInternal(proof, verificationKey, (proofPath, vkPath) =>
|
|
818
819
|
verifyAvmProof(this.config.bbBinaryPath, proofPath, vkPath, logger.debug),
|
|
819
820
|
);
|
package/src/stats.ts
CHANGED
|
@@ -15,6 +15,8 @@ export function mapProtocolArtifactNameToCircuitName(
|
|
|
15
15
|
return 'merge-rollup';
|
|
16
16
|
case 'BlockRootRollupArtifact':
|
|
17
17
|
return 'block-root-rollup';
|
|
18
|
+
case 'EmptyBlockRootRollupArtifact':
|
|
19
|
+
return 'empty-block-root-rollup';
|
|
18
20
|
case 'BlockMergeRollupArtifact':
|
|
19
21
|
return 'block-merge-rollup';
|
|
20
22
|
case 'RootRollupArtifact':
|
|
@@ -33,26 +35,14 @@ export function mapProtocolArtifactNameToCircuitName(
|
|
|
33
35
|
return 'private-kernel-tail';
|
|
34
36
|
case 'PrivateKernelTailToPublicArtifact':
|
|
35
37
|
return 'private-kernel-tail-to-public';
|
|
36
|
-
case 'PrivateKernelResetFullArtifact':
|
|
37
|
-
return 'private-kernel-reset-full';
|
|
38
|
-
case 'PrivateKernelResetFullInnerArtifact':
|
|
39
|
-
return 'private-kernel-reset-full-inner';
|
|
40
|
-
case 'PrivateKernelResetBigArtifact':
|
|
41
|
-
return 'private-kernel-reset-big';
|
|
42
|
-
case 'PrivateKernelResetMediumArtifact':
|
|
43
|
-
return 'private-kernel-reset-medium';
|
|
44
|
-
case 'PrivateKernelResetSmallArtifact':
|
|
45
|
-
return 'private-kernel-reset-small';
|
|
46
|
-
case 'PrivateKernelResetTinyArtifact':
|
|
47
|
-
return 'private-kernel-reset-tiny';
|
|
48
38
|
case 'EmptyNestedArtifact':
|
|
49
39
|
return 'empty-nested';
|
|
50
40
|
case 'PrivateKernelEmptyArtifact':
|
|
51
41
|
return 'private-kernel-empty';
|
|
52
|
-
case 'BlockRootRollupFinalArtifact':
|
|
53
|
-
return 'block-root-rollup-final';
|
|
54
42
|
default: {
|
|
55
|
-
|
|
43
|
+
if (artifact.startsWith('PrivateKernelReset')) {
|
|
44
|
+
return 'private-kernel-reset';
|
|
45
|
+
}
|
|
56
46
|
throw new Error(`Unknown circuit type: ${artifact}`);
|
|
57
47
|
}
|
|
58
48
|
}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
|
-
type
|
|
2
|
+
type ProofAndVerificationKey,
|
|
3
3
|
type PublicInputsAndRecursiveProof,
|
|
4
4
|
type ServerCircuitProver,
|
|
5
|
+
makeProofAndVerificationKey,
|
|
5
6
|
makePublicInputsAndRecursiveProof,
|
|
6
7
|
} from '@aztec/circuit-types';
|
|
7
8
|
import {
|
|
9
|
+
AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS,
|
|
8
10
|
type AvmCircuitInputs,
|
|
9
|
-
AvmVerificationKeyData,
|
|
10
11
|
type BaseOrMergeRollupPublicInputs,
|
|
11
12
|
type BaseParityInputs,
|
|
12
13
|
type BaseRollupInputs,
|
|
13
14
|
type BlockMergeRollupInputs,
|
|
14
15
|
type BlockRootOrBlockMergePublicInputs,
|
|
15
16
|
type BlockRootRollupInputs,
|
|
17
|
+
type EmptyBlockRootRollupInputs,
|
|
16
18
|
EmptyNestedData,
|
|
17
19
|
type KernelCircuitPublicInputs,
|
|
18
20
|
type MergeRollupInputs,
|
|
@@ -52,6 +54,8 @@ import {
|
|
|
52
54
|
convertBlockMergeRollupOutputsFromWitnessMap,
|
|
53
55
|
convertBlockRootRollupInputsToWitnessMap,
|
|
54
56
|
convertBlockRootRollupOutputsFromWitnessMap,
|
|
57
|
+
convertEmptyBlockRootRollupInputsToWitnessMap,
|
|
58
|
+
convertEmptyBlockRootRollupOutputsFromWitnessMap,
|
|
55
59
|
convertMergeRollupInputsToWitnessMap,
|
|
56
60
|
convertMergeRollupOutputsFromWitnessMap,
|
|
57
61
|
convertPrivateKernelEmptyInputsToWitnessMap,
|
|
@@ -111,6 +115,7 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
111
115
|
inputs.chainId,
|
|
112
116
|
inputs.version,
|
|
113
117
|
inputs.vkTreeRoot,
|
|
118
|
+
inputs.protocolContractTreeRoot,
|
|
114
119
|
);
|
|
115
120
|
const witnessMap = convertPrivateKernelEmptyInputsToWitnessMap(kernelInputs);
|
|
116
121
|
const witness = await this.wasmSimulator.simulateCircuit(
|
|
@@ -139,6 +144,7 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
139
144
|
inputs.chainId,
|
|
140
145
|
inputs.version,
|
|
141
146
|
inputs.vkTreeRoot,
|
|
147
|
+
inputs.protocolContractTreeRoot,
|
|
142
148
|
);
|
|
143
149
|
const witnessMap = convertPrivateKernelEmptyInputsToWitnessMap(kernelInputs);
|
|
144
150
|
const witness = await this.wasmSimulator.simulateCircuit(
|
|
@@ -150,7 +156,7 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
150
156
|
return makePublicInputsAndRecursiveProof(
|
|
151
157
|
result,
|
|
152
158
|
makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
|
|
153
|
-
VerificationKeyData.
|
|
159
|
+
VerificationKeyData.makeFakeHonk(),
|
|
154
160
|
);
|
|
155
161
|
}
|
|
156
162
|
|
|
@@ -268,12 +274,9 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
268
274
|
|
|
269
275
|
public async getTubeProof(
|
|
270
276
|
_tubeInput: TubeInputs,
|
|
271
|
-
): Promise<
|
|
277
|
+
): Promise<ProofAndVerificationKey<RecursiveProof<typeof TUBE_PROOF_LENGTH>>> {
|
|
272
278
|
await this.delay();
|
|
273
|
-
return
|
|
274
|
-
tubeVK: VerificationKeyData.makeFake(),
|
|
275
|
-
tubeProof: makeEmptyRecursiveProof(TUBE_PROOF_LENGTH),
|
|
276
|
-
};
|
|
279
|
+
return makeProofAndVerificationKey(makeEmptyRecursiveProof(TUBE_PROOF_LENGTH), VerificationKeyData.makeFakeHonk());
|
|
277
280
|
}
|
|
278
281
|
|
|
279
282
|
/**
|
|
@@ -347,10 +350,39 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
347
350
|
);
|
|
348
351
|
}
|
|
349
352
|
|
|
350
|
-
|
|
351
|
-
|
|
353
|
+
/**
|
|
354
|
+
* Simulates the empty block root rollup circuit from its inputs.
|
|
355
|
+
* @param input - Inputs to the circuit.
|
|
356
|
+
* @returns The public inputs as outputs of the simulation.
|
|
357
|
+
*/
|
|
358
|
+
@trackSpan('TestCircuitProver.getEmptyBlockRootRollupProof')
|
|
359
|
+
public async getEmptyBlockRootRollupProof(
|
|
360
|
+
input: EmptyBlockRootRollupInputs,
|
|
352
361
|
): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
|
|
353
|
-
|
|
362
|
+
const timer = new Timer();
|
|
363
|
+
const witnessMap = convertEmptyBlockRootRollupInputsToWitnessMap(input);
|
|
364
|
+
|
|
365
|
+
// use WASM here as it is faster for small circuits
|
|
366
|
+
const witness = await this.wasmSimulator.simulateCircuit(
|
|
367
|
+
witnessMap,
|
|
368
|
+
SimulatedServerCircuitArtifacts.EmptyBlockRootRollupArtifact,
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
const result = convertEmptyBlockRootRollupOutputsFromWitnessMap(witness);
|
|
372
|
+
|
|
373
|
+
this.instrumentation.recordDuration('simulationDuration', 'empty-block-root-rollup', timer);
|
|
374
|
+
emitCircuitSimulationStats(
|
|
375
|
+
'empty-block-root-rollup',
|
|
376
|
+
timer.ms(),
|
|
377
|
+
input.toBuffer().length,
|
|
378
|
+
result.toBuffer().length,
|
|
379
|
+
this.logger,
|
|
380
|
+
);
|
|
381
|
+
return makePublicInputsAndRecursiveProof(
|
|
382
|
+
result,
|
|
383
|
+
makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
|
|
384
|
+
ProtocolCircuitVks['EmptyBlockRootRollupArtifact'],
|
|
385
|
+
);
|
|
354
386
|
}
|
|
355
387
|
|
|
356
388
|
/**
|
|
@@ -512,12 +544,15 @@ export class TestCircuitProver implements ServerCircuitProver {
|
|
|
512
544
|
);
|
|
513
545
|
}
|
|
514
546
|
|
|
515
|
-
public async getAvmProof(_inputs: AvmCircuitInputs): Promise<
|
|
547
|
+
public async getAvmProof(_inputs: AvmCircuitInputs): Promise<ProofAndVerificationKey<Proof>> {
|
|
516
548
|
// We can't simulate the AVM because we don't have enough context to do so (e.g., DBs).
|
|
517
549
|
// We just return an empty proof and VK data.
|
|
518
550
|
this.logger.debug('Skipping AVM simulation in TestCircuitProver.');
|
|
519
551
|
await this.delay();
|
|
520
|
-
return
|
|
552
|
+
return makeProofAndVerificationKey(
|
|
553
|
+
makeEmptyProof(),
|
|
554
|
+
VerificationKeyData.makeFake(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS),
|
|
555
|
+
);
|
|
521
556
|
}
|
|
522
557
|
|
|
523
558
|
private async delay(): Promise<void> {
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS,
|
|
3
|
-
AvmVerificationKeyAsFields,
|
|
4
|
-
AvmVerificationKeyData,
|
|
5
3
|
Fr,
|
|
6
4
|
VerificationKeyAsFields,
|
|
7
5
|
VerificationKeyData,
|
|
8
6
|
} from '@aztec/circuits.js';
|
|
7
|
+
import { hashVk } from '@aztec/noir-protocol-circuits-types';
|
|
9
8
|
|
|
10
9
|
import { strict as assert } from 'assert';
|
|
11
10
|
import * as fs from 'fs/promises';
|
|
@@ -25,14 +24,14 @@ export async function extractVkData(vkDirectoryPath: string): Promise<Verificati
|
|
|
25
24
|
]);
|
|
26
25
|
const fieldsJson = JSON.parse(rawFields);
|
|
27
26
|
const fields = fieldsJson.map(Fr.fromString);
|
|
28
|
-
// The
|
|
29
|
-
const vkHash = fields
|
|
27
|
+
// The hash is not included in the BB response
|
|
28
|
+
const vkHash = hashVk(fields);
|
|
30
29
|
const vkAsFields = new VerificationKeyAsFields(fields, vkHash);
|
|
31
30
|
return new VerificationKeyData(vkAsFields, rawBinary);
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
// TODO: This was adapted from the above function. A refactor might be needed.
|
|
35
|
-
export async function extractAvmVkData(vkDirectoryPath: string): Promise<
|
|
34
|
+
export async function extractAvmVkData(vkDirectoryPath: string): Promise<VerificationKeyData> {
|
|
36
35
|
const [rawFields, rawBinary] = await Promise.all([
|
|
37
36
|
fs.readFile(path.join(vkDirectoryPath, VK_FIELDS_FILENAME), { encoding: 'utf-8' }),
|
|
38
37
|
fs.readFile(path.join(vkDirectoryPath, VK_FILENAME)),
|
|
@@ -43,7 +42,7 @@ export async function extractAvmVkData(vkDirectoryPath: string): Promise<AvmVeri
|
|
|
43
42
|
// TODO: is the above actually the case?
|
|
44
43
|
const vkHash = fields[0];
|
|
45
44
|
assert(fields.length === AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, 'Invalid AVM verification key length');
|
|
46
|
-
const vkAsFields = new
|
|
47
|
-
const vk = new
|
|
45
|
+
const vkAsFields = new VerificationKeyAsFields(fields, vkHash);
|
|
46
|
+
const vk = new VerificationKeyData(vkAsFields, rawBinary);
|
|
48
47
|
return vk;
|
|
49
48
|
}
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
verifyProof,
|
|
23
23
|
} from '../bb/execute.js';
|
|
24
24
|
import { type BBConfig } from '../config.js';
|
|
25
|
-
import { getUltraHonkFlavorForCircuit } from '../honk.js';
|
|
25
|
+
import { type UltraKeccakHonkProtocolArtifact, getUltraHonkFlavorForCircuit } from '../honk.js';
|
|
26
26
|
import { mapProtocolArtifactNameToCircuitName } from '../stats.js';
|
|
27
27
|
import { extractVkData } from '../verification_key/verification_key_data.js';
|
|
28
28
|
|
|
@@ -127,7 +127,7 @@ export class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
|
127
127
|
await runInDirectory(this.config.bbWorkingDirectory, operation, this.config.bbSkipCleanup);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
public async generateSolidityContract(circuit:
|
|
130
|
+
public async generateSolidityContract(circuit: UltraKeccakHonkProtocolArtifact, contractName: string) {
|
|
131
131
|
const result = await generateContractForCircuit(
|
|
132
132
|
this.config.bbBinaryPath,
|
|
133
133
|
this.config.bbWorkingDirectory,
|