@aztec/bb-prover 0.41.0 → 0.43.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/cli.d.ts.map +1 -1
- package/dest/bb/cli.js +24 -2
- package/dest/bb/execute.d.ts +30 -1
- package/dest/bb/execute.d.ts.map +1 -1
- package/dest/bb/execute.js +252 -60
- package/dest/config.d.ts +9 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +2 -0
- package/dest/index.d.ts +2 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +3 -1
- package/dest/mappings/mappings.d.ts +1 -0
- package/dest/mappings/mappings.d.ts.map +1 -1
- package/dest/mappings/mappings.js +27 -8
- package/dest/prover/bb_native_proof_creator.d.ts +2 -8
- package/dest/prover/bb_native_proof_creator.d.ts.map +1 -1
- package/dest/prover/bb_native_proof_creator.js +37 -79
- package/dest/prover/bb_prover.d.ts +33 -32
- package/dest/prover/bb_prover.d.ts.map +1 -1
- package/dest/prover/bb_prover.js +231 -162
- package/dest/stats.d.ts.map +1 -1
- package/dest/stats.js +8 -2
- package/dest/test/index.d.ts +1 -0
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +2 -1
- package/dest/test/test_circuit_prover.d.ts +9 -7
- package/dest/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/test/test_circuit_prover.js +32 -16
- package/dest/test/test_verifier.d.ts +7 -0
- package/dest/test/test_verifier.d.ts.map +1 -0
- package/dest/test/test_verifier.js +10 -0
- package/dest/verification_key/verification_key_data.d.ts +8 -0
- package/dest/verification_key/verification_key_data.d.ts.map +1 -0
- package/dest/verification_key/verification_key_data.js +24 -0
- package/dest/verifier/bb_verifier.d.ts +18 -0
- package/dest/verifier/bb_verifier.d.ts.map +1 -0
- package/dest/verifier/bb_verifier.js +90 -0
- package/dest/verifier/index.d.ts +2 -0
- package/dest/verifier/index.d.ts.map +1 -0
- package/dest/verifier/index.js +2 -0
- package/package.json +6 -6
- package/src/bb/cli.ts +36 -1
- package/src/bb/execute.ts +340 -67
- package/src/config.ts +9 -0
- package/src/index.ts +2 -0
- package/src/mappings/mappings.ts +38 -12
- package/src/prover/bb_native_proof_creator.ts +49 -91
- package/src/prover/bb_prover.ts +396 -221
- package/src/stats.ts +7 -1
- package/src/test/index.ts +1 -0
- package/src/test/test_circuit_prover.ts +85 -23
- package/src/test/test_verifier.ts +12 -0
- package/src/verification_key/verification_key_data.ts +35 -0
- package/src/verifier/bb_verifier.ts +156 -0
- package/src/verifier/index.ts +1 -0
- package/dest/prover/verification_key_data.d.ts +0 -16
- package/dest/prover/verification_key_data.d.ts.map +0 -1
- package/dest/prover/verification_key_data.js +0 -5
- package/src/prover/verification_key_data.ts +0 -16
package/dest/stats.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE/G,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,WAAW,CAajG;AAED,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,sBAAsB,GAAG,sBAAsB,GACxD,WAAW,
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE/G,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,WAAW,CAajG;AAED,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,sBAAsB,GAAG,sBAAsB,GACxD,WAAW,CA6Cb"}
|
package/dest/stats.js
CHANGED
|
@@ -49,8 +49,14 @@ export function mapProtocolArtifactNameToCircuitName(artifact) {
|
|
|
49
49
|
return 'private-kernel-reset-medium';
|
|
50
50
|
case 'PrivateKernelResetSmallArtifact':
|
|
51
51
|
return 'private-kernel-reset-small';
|
|
52
|
-
|
|
52
|
+
case 'EmptyNestedArtifact':
|
|
53
|
+
return 'empty-nested';
|
|
54
|
+
case 'PrivateKernelEmptyArtifact':
|
|
55
|
+
return 'private-kernel-empty';
|
|
56
|
+
default: {
|
|
57
|
+
const _foo = artifact;
|
|
53
58
|
throw new Error(`Unknown circuit type: ${artifact}`);
|
|
59
|
+
}
|
|
54
60
|
}
|
|
55
61
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RhdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSWxGLE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxVQUF1QztJQUNsRixRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssZ0JBQWdCLENBQUMsS0FBSztZQUN6QixPQUFPLHFCQUFxQixDQUFDO1FBQy9CLEtBQUssZ0JBQWdCLENBQUMsU0FBUztZQUM3QixPQUFPLHlCQUF5QixDQUFDO1FBQ25DLEtBQUssZ0JBQWdCLENBQUMsUUFBUTtZQUM1QixPQUFPLHdCQUF3QixDQUFDO1FBQ2xDLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtZQUN4QixPQUFPLG9CQUFvQixDQUFDO1FBQzlCO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxvQ0FBb0MsQ0FDbEQsUUFBeUQ7SUFFekQsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLG9CQUFvQjtZQUN2QixPQUFPLGFBQWEsQ0FBQztRQUN2QixLQUFLLG9CQUFvQjtZQUN2QixPQUFPLGFBQWEsQ0FBQztRQUN2QixLQUFLLG9CQUFvQjtZQUN2QixPQUFPLGFBQWEsQ0FBQztRQUN2QixLQUFLLHFCQUFxQjtZQUN4QixPQUFPLGNBQWMsQ0FBQztRQUN4QixLQUFLLG9CQUFvQjtZQUN2QixPQUFPLGFBQWEsQ0FBQztRQUN2QixLQUFLLDJCQUEyQjtZQUM5QixPQUFPLHFCQUFxQixDQUFDO1FBQy9CLEtBQUssOEJBQThCO1lBQ2pDLE9BQU8seUJBQXlCLENBQUM7UUFDbkMsS0FBSyw4QkFBOEI7WUFDakMsT0FBTyx3QkFBd0IsQ0FBQztRQUNsQyxLQUFLLDBCQUEwQjtZQUM3QixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLEtBQUssMkJBQTJCO1lBQzlCLE9BQU8scUJBQXFCLENBQUM7UUFDL0IsS0FBSyw0QkFBNEI7WUFDL0IsT0FBTyxzQkFBc0IsQ0FBQztRQUNoQyxLQUFLLDJCQUEyQjtZQUM5QixPQUFPLHFCQUFxQixDQUFDO1FBQy9CLEtBQUssbUNBQW1DO1lBQ3RDLE9BQU8sK0JBQStCLENBQUM7UUFDekMsS0FBSyxnQ0FBZ0M7WUFDbkMsT0FBTywyQkFBMkIsQ0FBQztRQUNyQyxLQUFLLCtCQUErQjtZQUNsQyxPQUFPLDBCQUEwQixDQUFDO1FBQ3BDLEtBQUssa0NBQWtDO1lBQ3JDLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsS0FBSyxpQ0FBaUM7WUFDcEMsT0FBTyw0QkFBNEIsQ0FBQztRQUN0QyxLQUFLLHFCQUFxQjtZQUN4QixPQUFPLGNBQWMsQ0FBQztRQUN4QixLQUFLLDRCQUE0QjtZQUMvQixPQUFPLHNCQUFzQixDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixNQUFNLElBQUksR0FBVSxRQUFRLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==
|
package/dest/test/index.d.ts
CHANGED
package/dest/test/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
|
package/dest/test/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export * from './test_circuit_prover.js';
|
|
2
|
-
|
|
2
|
+
export * from './test_verifier.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsb0JBQW9CLENBQUMifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type BaseOrMergeRollupPublicInputs, type BaseParityInputs, type BaseRollupInputs, type KernelCircuitPublicInputs, type MergeRollupInputs, NESTED_RECURSIVE_PROOF_LENGTH, type Proof, type PublicKernelCircuitPublicInputs, RECURSIVE_PROOF_LENGTH, RootParityInput, type RootParityInputs, type RootRollupInputs, type RootRollupPublicInputs } from '@aztec/circuits.js';
|
|
1
|
+
import { type ProofAndVerificationKey, type PublicInputsAndRecursiveProof, type PublicKernelNonTailRequest, type PublicKernelTailRequest, type ServerCircuitProver } from '@aztec/circuit-types';
|
|
2
|
+
import { type AvmCircuitInputs, type BaseOrMergeRollupPublicInputs, type BaseParityInputs, type BaseRollupInputs, type KernelCircuitPublicInputs, type MergeRollupInputs, NESTED_RECURSIVE_PROOF_LENGTH, type PrivateKernelEmptyInputData, type Proof, type PublicKernelCircuitPublicInputs, RECURSIVE_PROOF_LENGTH, RootParityInput, type RootParityInputs, type RootRollupInputs, type RootRollupPublicInputs } from '@aztec/circuits.js';
|
|
3
3
|
import { type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
|
|
4
4
|
import { type SimulationProvider } from '@aztec/simulator';
|
|
5
5
|
/**
|
|
@@ -11,6 +11,7 @@ export declare class TestCircuitProver implements ServerCircuitProver {
|
|
|
11
11
|
private logger;
|
|
12
12
|
private wasmSimulator;
|
|
13
13
|
constructor(simulationProvider?: SimulationProvider | undefined, logger?: import("@aztec/foundation/log").Logger);
|
|
14
|
+
getEmptyPrivateKernelProof(inputs: PrivateKernelEmptyInputData): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>>;
|
|
14
15
|
/**
|
|
15
16
|
* Simulates the base parity circuit from its inputs.
|
|
16
17
|
* @param inputs - Inputs to the circuit.
|
|
@@ -28,21 +29,22 @@ export declare class TestCircuitProver implements ServerCircuitProver {
|
|
|
28
29
|
* @param input - Inputs to the circuit.
|
|
29
30
|
* @returns The public inputs as outputs of the simulation.
|
|
30
31
|
*/
|
|
31
|
-
getBaseRollupProof(input: BaseRollupInputs): Promise<
|
|
32
|
+
getBaseRollupProof(input: BaseRollupInputs): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>>;
|
|
32
33
|
/**
|
|
33
34
|
* Simulates the merge rollup circuit from its inputs.
|
|
34
35
|
* @param input - Inputs to the circuit.
|
|
35
36
|
* @returns The public inputs as outputs of the simulation.
|
|
36
37
|
*/
|
|
37
|
-
getMergeRollupProof(input: MergeRollupInputs): Promise<
|
|
38
|
+
getMergeRollupProof(input: MergeRollupInputs): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>>;
|
|
38
39
|
/**
|
|
39
40
|
* Simulates the root rollup circuit from its inputs.
|
|
40
41
|
* @param input - Inputs to the circuit.
|
|
41
42
|
* @returns The public inputs as outputs of the simulation.
|
|
42
43
|
*/
|
|
43
|
-
getRootRollupProof(input: RootRollupInputs): Promise<
|
|
44
|
-
getPublicKernelProof(kernelRequest: PublicKernelNonTailRequest): Promise<
|
|
45
|
-
getPublicTailProof(kernelRequest: PublicKernelTailRequest): Promise<
|
|
44
|
+
getRootRollupProof(input: RootRollupInputs): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs>>;
|
|
45
|
+
getPublicKernelProof(kernelRequest: PublicKernelNonTailRequest): Promise<PublicInputsAndRecursiveProof<PublicKernelCircuitPublicInputs>>;
|
|
46
|
+
getPublicTailProof(kernelRequest: PublicKernelTailRequest): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>>;
|
|
47
|
+
getAvmProof(_inputs: AvmCircuitInputs): Promise<ProofAndVerificationKey>;
|
|
46
48
|
verifyProof(_1: ServerProtocolArtifact, _2: Proof): Promise<void>;
|
|
47
49
|
}
|
|
48
50
|
//# sourceMappingURL=test_circuit_prover.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_circuit_prover.d.ts","sourceRoot":"","sources":["../../src/test/test_circuit_prover.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"test_circuit_prover.d.ts","sourceRoot":"","sources":["../../src/test/test_circuit_prover.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EAEzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,6BAA6B,EAClC,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAErB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,6BAA6B,EAC7B,KAAK,2BAA2B,EAEhC,KAAK,KAAK,EACV,KAAK,+BAA+B,EACpC,sBAAsB,EACtB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAM5B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAML,KAAK,sBAAsB,EAiB5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,kBAAkB,CAAC;AAmBtG;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,mBAAmB;IAIzD,OAAO,CAAC,kBAAkB,CAAC;IAC3B,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,aAAa,CAAuB;gBAGlC,kBAAkB,CAAC,gCAAoB,EACvC,MAAM,yCAAyC;IAG5C,0BAA0B,CACrC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IAiBpE;;;;OAIG;IACU,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,sBAAsB,CAAC,CAAC;IAyBlH;;;;OAIG;IACU,kBAAkB,CAC7B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,CAAC,OAAO,6BAA6B,CAAC,CAAC;IA0BjE;;;;OAIG;IACU,kBAAkB,CAC7B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,CAAC;IAsBxE;;;;OAIG;IACU,mBAAmB,CAC9B,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,6BAA6B,CAAC,6BAA6B,CAAC,CAAC;IAuBxE;;;;OAIG;IACU,kBAAkB,CAC7B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,CAAC;IAuBpD,oBAAoB,CAC/B,aAAa,EAAE,0BAA0B,GACxC,OAAO,CAAC,6BAA6B,CAAC,+BAA+B,CAAC,CAAC;IA6B7D,kBAAkB,CAC7B,aAAa,EAAE,uBAAuB,GACrC,OAAO,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IAyBpE,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQjE,WAAW,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzE"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { NESTED_RECURSIVE_PROOF_LENGTH, RECURSIVE_PROOF_LENGTH, RootParityInput, VerificationKeyAsFields, makeEmptyProof, makeRecursiveProof, } from '@aztec/circuits.js';
|
|
1
|
+
import { makePublicInputsAndRecursiveProof, } from '@aztec/circuit-types';
|
|
2
|
+
import { EmptyNestedData, NESTED_RECURSIVE_PROOF_LENGTH, PrivateKernelEmptyInputs, RECURSIVE_PROOF_LENGTH, RootParityInput, VerificationKeyAsFields, VerificationKeyData, makeEmptyProof, makeEmptyRecursiveProof, makeRecursiveProof, } from '@aztec/circuits.js';
|
|
3
3
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
5
|
-
import { BaseParityArtifact, MergeRollupArtifact, RootParityArtifact, RootRollupArtifact,
|
|
5
|
+
import { BaseParityArtifact, MergeRollupArtifact, PrivateKernelEmptyArtifact, RootParityArtifact, RootRollupArtifact, SimulatedBaseRollupArtifact, SimulatedServerCircuitArtifacts, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap, convertPrivateKernelEmptyInputsToWitnessMap, convertPrivateKernelEmptyOutputsFromWitnessMap, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, convertSimulatedBaseRollupInputsToWitnessMap, convertSimulatedBaseRollupOutputsFromWitnessMap, convertSimulatedPublicTailInputsToWitnessMap, convertSimulatedPublicTailOutputFromWitnessMap, } from '@aztec/noir-protocol-circuits-types';
|
|
6
6
|
import { WASMSimulator, emitCircuitSimulationStats } from '@aztec/simulator';
|
|
7
|
-
import {
|
|
7
|
+
import { SimulatedPublicKernelArtifactMapping } from '../mappings/mappings.js';
|
|
8
8
|
import { mapPublicKernelToCircuitName } from '../stats.js';
|
|
9
9
|
const VERIFICATION_KEYS = {
|
|
10
10
|
BaseParityArtifact: VerificationKeyAsFields.makeFake(),
|
|
@@ -16,6 +16,8 @@ const VERIFICATION_KEYS = {
|
|
|
16
16
|
BaseRollupArtifact: VerificationKeyAsFields.makeFake(),
|
|
17
17
|
MergeRollupArtifact: VerificationKeyAsFields.makeFake(),
|
|
18
18
|
RootRollupArtifact: VerificationKeyAsFields.makeFake(),
|
|
19
|
+
PrivateKernelEmptyArtifact: VerificationKeyAsFields.makeFake(),
|
|
20
|
+
EmptyNestedArtifact: VerificationKeyAsFields.makeFake(),
|
|
19
21
|
};
|
|
20
22
|
/**
|
|
21
23
|
* A class for use in testing situations (e2e, unit test etc)
|
|
@@ -27,6 +29,14 @@ export class TestCircuitProver {
|
|
|
27
29
|
this.logger = logger;
|
|
28
30
|
this.wasmSimulator = new WASMSimulator();
|
|
29
31
|
}
|
|
32
|
+
async getEmptyPrivateKernelProof(inputs) {
|
|
33
|
+
const emptyNested = new EmptyNestedData(makeRecursiveProof(RECURSIVE_PROOF_LENGTH), VERIFICATION_KEYS['EmptyNestedArtifact']);
|
|
34
|
+
const kernelInputs = new PrivateKernelEmptyInputs(emptyNested, inputs.header, inputs.chainId, inputs.version);
|
|
35
|
+
const witnessMap = convertPrivateKernelEmptyInputsToWitnessMap(kernelInputs);
|
|
36
|
+
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, PrivateKernelEmptyArtifact);
|
|
37
|
+
const result = convertPrivateKernelEmptyOutputsFromWitnessMap(witness);
|
|
38
|
+
return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), VerificationKeyData.makeFake());
|
|
39
|
+
}
|
|
30
40
|
/**
|
|
31
41
|
* Simulates the base parity circuit from its inputs.
|
|
32
42
|
* @param inputs - Inputs to the circuit.
|
|
@@ -69,7 +79,7 @@ export class TestCircuitProver {
|
|
|
69
79
|
const witness = await simulationProvider.simulateCircuit(witnessMap, SimulatedBaseRollupArtifact);
|
|
70
80
|
const result = convertSimulatedBaseRollupOutputsFromWitnessMap(witness);
|
|
71
81
|
emitCircuitSimulationStats('base-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
|
|
72
|
-
return
|
|
82
|
+
return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), VerificationKeyData.makeFake());
|
|
73
83
|
}
|
|
74
84
|
/**
|
|
75
85
|
* Simulates the merge rollup circuit from its inputs.
|
|
@@ -83,7 +93,7 @@ export class TestCircuitProver {
|
|
|
83
93
|
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, MergeRollupArtifact);
|
|
84
94
|
const result = convertMergeRollupOutputsFromWitnessMap(witness);
|
|
85
95
|
emitCircuitSimulationStats('merge-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
|
|
86
|
-
return
|
|
96
|
+
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), VerificationKeyData.makeFake());
|
|
87
97
|
}
|
|
88
98
|
/**
|
|
89
99
|
* Simulates the root rollup circuit from its inputs.
|
|
@@ -97,32 +107,38 @@ export class TestCircuitProver {
|
|
|
97
107
|
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, RootRollupArtifact);
|
|
98
108
|
const result = convertRootRollupOutputsFromWitnessMap(witness);
|
|
99
109
|
emitCircuitSimulationStats('root-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
|
|
100
|
-
return
|
|
110
|
+
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), VerificationKeyData.makeFake());
|
|
101
111
|
}
|
|
102
112
|
async getPublicKernelProof(kernelRequest) {
|
|
103
113
|
const timer = new Timer();
|
|
104
|
-
const kernelOps =
|
|
114
|
+
const kernelOps = SimulatedPublicKernelArtifactMapping[kernelRequest.type];
|
|
105
115
|
if (kernelOps === undefined) {
|
|
106
|
-
throw new Error(`Unable to prove for kernel type ${
|
|
116
|
+
throw new Error(`Unable to prove for kernel type ${kernelRequest.type}`);
|
|
107
117
|
}
|
|
108
118
|
const witnessMap = kernelOps.convertInputs(kernelRequest.inputs);
|
|
109
|
-
const witness = await this.wasmSimulator.simulateCircuit(witnessMap,
|
|
119
|
+
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[kernelOps.artifact]);
|
|
110
120
|
const result = kernelOps.convertOutputs(witness);
|
|
111
121
|
emitCircuitSimulationStats(mapPublicKernelToCircuitName(kernelRequest.type), timer.ms(), kernelRequest.inputs.toBuffer().length, result.toBuffer().length, this.logger);
|
|
112
|
-
return
|
|
122
|
+
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), VerificationKeyData.makeFake());
|
|
113
123
|
}
|
|
114
124
|
async getPublicTailProof(kernelRequest) {
|
|
115
125
|
const timer = new Timer();
|
|
116
|
-
const witnessMap =
|
|
126
|
+
const witnessMap = convertSimulatedPublicTailInputsToWitnessMap(kernelRequest.inputs);
|
|
117
127
|
// use WASM here as it is faster for small circuits
|
|
118
|
-
const witness = await this.wasmSimulator.simulateCircuit(witnessMap,
|
|
119
|
-
const result =
|
|
128
|
+
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts['PublicKernelTailArtifact']);
|
|
129
|
+
const result = convertSimulatedPublicTailOutputFromWitnessMap(witness);
|
|
120
130
|
emitCircuitSimulationStats('public-kernel-tail', timer.ms(), kernelRequest.inputs.toBuffer().length, result.toBuffer().length, this.logger);
|
|
121
|
-
return
|
|
131
|
+
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), VerificationKeyData.makeFake());
|
|
132
|
+
}
|
|
133
|
+
getAvmProof(_inputs) {
|
|
134
|
+
// We can't simulate the AVM because we don't have enough context to do so (e.g., DBs).
|
|
135
|
+
// We just return an empty proof and VK data.
|
|
136
|
+
this.logger.debug('Skipping AVM simulation in TestCircuitProver.');
|
|
137
|
+
return Promise.resolve({ proof: makeEmptyProof(), verificationKey: VerificationKeyData.makeFake() });
|
|
122
138
|
}
|
|
123
139
|
// Not implemented for test circuits
|
|
124
140
|
verifyProof(_1, _2) {
|
|
125
141
|
return Promise.reject(new Error('Method not implemented.'));
|
|
126
142
|
}
|
|
127
143
|
}
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jaXJjdWl0X3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfY2lyY3VpdF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQU1MLGlDQUFpQyxHQUNsQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFLTCxlQUFlLEVBR2YsNkJBQTZCLEVBRTdCLHdCQUF3QixFQUd4QixzQkFBc0IsRUFDdEIsZUFBZSxFQUlmLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixrQkFBa0IsR0FDbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFFbEIsMkJBQTJCLEVBQzNCLCtCQUErQixFQUMvQixtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG9DQUFvQyxFQUNwQyx1Q0FBdUMsRUFDdkMsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsNENBQTRDLEVBQzVDLCtDQUErQyxFQUMvQyw0Q0FBNEMsRUFDNUMsOENBQThDLEdBQy9DLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUEyQixhQUFhLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0QsTUFBTSxpQkFBaUIsR0FBNEQ7SUFD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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ClientProtocolCircuitVerifier, type Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { type VerificationKeys } from '@aztec/circuits.js';
|
|
3
|
+
export declare class TestCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
4
|
+
verifyProof(_tx: Tx): Promise<boolean>;
|
|
5
|
+
getVerificationKeys(): Promise<VerificationKeys>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=test_verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_verifier.d.ts","sourceRoot":"","sources":["../../src/test/test_verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,6BAA6B,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,oBAAoB,CAAC;AAEpF,qBAAa,mBAAoB,YAAW,6BAA6B;IACvE,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAItC,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAGjD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { getMockVerificationKeys } from '@aztec/circuits.js';
|
|
2
|
+
export class TestCircuitVerifier {
|
|
3
|
+
verifyProof(_tx) {
|
|
4
|
+
return Promise.resolve(true);
|
|
5
|
+
}
|
|
6
|
+
getVerificationKeys() {
|
|
7
|
+
return Promise.resolve(getMockVerificationKeys());
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF92ZXJpZmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfdmVyaWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUF5Qix1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBGLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsV0FBVyxDQUFDLEdBQU87UUFDakIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { VerificationKeyData } from '@aztec/circuits.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reads the verification key data stored at the specified location and parses into a VerificationKeyData
|
|
4
|
+
* @param vkDirectoryPath - The directory containing the verification key data files
|
|
5
|
+
* @returns The verification key data
|
|
6
|
+
*/
|
|
7
|
+
export declare function extractVkData(vkDirectoryPath: string): Promise<VerificationKeyData>;
|
|
8
|
+
//# sourceMappingURL=verification_key_data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification_key_data.d.ts","sourceRoot":"","sources":["../../src/verification_key/verification_key_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAQ5B;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgBzF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Fr, VerificationKeyAsFields, VerificationKeyData, } from '@aztec/circuits.js';
|
|
2
|
+
import * as fs from 'fs/promises';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { VK_FIELDS_FILENAME, VK_FILENAME } from '../bb/execute.js';
|
|
5
|
+
/**
|
|
6
|
+
* Reads the verification key data stored at the specified location and parses into a VerificationKeyData
|
|
7
|
+
* @param vkDirectoryPath - The directory containing the verification key data files
|
|
8
|
+
* @returns The verification key data
|
|
9
|
+
*/
|
|
10
|
+
export async function extractVkData(vkDirectoryPath) {
|
|
11
|
+
const [rawFields, rawBinary] = await Promise.all([
|
|
12
|
+
fs.readFile(path.join(vkDirectoryPath, VK_FIELDS_FILENAME), { encoding: 'utf-8' }),
|
|
13
|
+
fs.readFile(path.join(vkDirectoryPath, VK_FILENAME)),
|
|
14
|
+
]);
|
|
15
|
+
const fieldsJson = JSON.parse(rawFields);
|
|
16
|
+
const fields = fieldsJson.map(Fr.fromString);
|
|
17
|
+
// The first item is the hash, this is not part of the actual VK
|
|
18
|
+
const vkHash = fields[0];
|
|
19
|
+
const actualVk = fields.slice(1);
|
|
20
|
+
const vkAsFields = new VerificationKeyAsFields(actualVk, vkHash);
|
|
21
|
+
const vk = new VerificationKeyData(vkAsFields, rawBinary);
|
|
22
|
+
return vk;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZpY2F0aW9uX2tleV9kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZlcmlmaWNhdGlvbl9rZXkvdmVyaWZpY2F0aW9uX2tleV9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxFQUFFLEVBRUYsdUJBQXVCLEVBQ3ZCLG1CQUFtQixHQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBRzVCLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsZUFBdUI7SUFDekQsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDL0MsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2xGLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDckQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxnRUFBZ0U7SUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBdUIsQ0FDNUMsUUFBK0QsRUFDL0QsTUFBTSxDQUNQLENBQUM7SUFDRixNQUFNLEVBQUUsR0FBRyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ClientProtocolCircuitVerifier, Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { type Proof, type VerificationKeyData, type VerificationKeys } from '@aztec/circuits.js';
|
|
3
|
+
import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
|
|
4
|
+
import { type BBConfig } from '../config.js';
|
|
5
|
+
export declare class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
6
|
+
private config;
|
|
7
|
+
private verificationKeys;
|
|
8
|
+
private logger;
|
|
9
|
+
private constructor();
|
|
10
|
+
static new(config: BBConfig, initialCircuits?: ProtocolArtifact[], logger?: import("@aztec/foundation/log").Logger): Promise<BBCircuitVerifier>;
|
|
11
|
+
private static generateVerificationKey;
|
|
12
|
+
getVerificationKeyData(circuit: ProtocolArtifact): Promise<VerificationKeyData>;
|
|
13
|
+
verifyProofForCircuit(circuit: ProtocolArtifact, proof: Proof): Promise<void>;
|
|
14
|
+
generateSolidityContract(circuit: ProtocolArtifact, contractName: string): Promise<string>;
|
|
15
|
+
verifyProof(tx: Tx): Promise<boolean>;
|
|
16
|
+
getVerificationKeys(): Promise<VerificationKeys>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=bb_verifier.d.ts.map
|
|
@@ -0,0 +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;AAC9E,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjG,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,qCAAqC,CAAC;AAa7C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,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;mBAe5B,uBAAuB;IAsB/B,sBAAsB,CAAC,OAAO,EAAE,gBAAgB;IAehD,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK;IA2B7D,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM;IAiB/E,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrC,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAWvD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { runInDirectory } from '@aztec/foundation/fs';
|
|
3
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { ProtocolCircuitArtifacts, } from '@aztec/noir-protocol-circuits-types';
|
|
5
|
+
import * as fs from 'fs/promises';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { BB_RESULT, PROOF_FILENAME, VK_FILENAME, generateContractForCircuit, generateKeyForNoirCircuit, verifyProof, } from '../bb/execute.js';
|
|
8
|
+
import { extractVkData } from '../verification_key/verification_key_data.js';
|
|
9
|
+
export class BBCircuitVerifier {
|
|
10
|
+
constructor(config, verificationKeys = new Map(), logger) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.verificationKeys = verificationKeys;
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
}
|
|
15
|
+
static async new(config, initialCircuits = [], logger = createDebugLogger('aztec:bb-verifier')) {
|
|
16
|
+
const keys = new Map();
|
|
17
|
+
for (const circuit of initialCircuits) {
|
|
18
|
+
const vkData = await this.generateVerificationKey(circuit, config.bbBinaryPath, config.bbWorkingDirectory, logger.debug);
|
|
19
|
+
keys.set(circuit, Promise.resolve(vkData));
|
|
20
|
+
}
|
|
21
|
+
return new BBCircuitVerifier(config, keys, logger);
|
|
22
|
+
}
|
|
23
|
+
static async generateVerificationKey(circuit, bbPath, workingDirectory, logFn) {
|
|
24
|
+
return await generateKeyForNoirCircuit(bbPath, workingDirectory, circuit, ProtocolCircuitArtifacts[circuit], 'vk', logFn).then(result => {
|
|
25
|
+
if (result.status === BB_RESULT.FAILURE) {
|
|
26
|
+
throw new Error(`Failed to created verification key for ${circuit}, ${result.reason}`);
|
|
27
|
+
}
|
|
28
|
+
return extractVkData(result.vkPath);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async getVerificationKeyData(circuit) {
|
|
32
|
+
let promise = this.verificationKeys.get(circuit);
|
|
33
|
+
if (!promise) {
|
|
34
|
+
promise = BBCircuitVerifier.generateVerificationKey(circuit, this.config.bbBinaryPath, this.config.bbWorkingDirectory, this.logger.debug);
|
|
35
|
+
}
|
|
36
|
+
this.verificationKeys.set(circuit, promise);
|
|
37
|
+
const vk = await promise;
|
|
38
|
+
return vk.clone();
|
|
39
|
+
}
|
|
40
|
+
async verifyProofForCircuit(circuit, proof) {
|
|
41
|
+
const operation = async (bbWorkingDirectory) => {
|
|
42
|
+
const proofFileName = path.join(bbWorkingDirectory, PROOF_FILENAME);
|
|
43
|
+
const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
|
|
44
|
+
const verificationKey = await this.getVerificationKeyData(circuit);
|
|
45
|
+
this.logger.debug(`${circuit} Verifying with key: ${verificationKey.keyAsFields.hash.toString()}`);
|
|
46
|
+
await fs.writeFile(proofFileName, proof.buffer);
|
|
47
|
+
await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
|
|
48
|
+
const logFunction = (message) => {
|
|
49
|
+
this.logger.debug(`${circuit} BB out - ${message}`);
|
|
50
|
+
};
|
|
51
|
+
const result = await verifyProof(this.config.bbBinaryPath, proofFileName, verificationKeyPath, logFunction);
|
|
52
|
+
if (result.status === BB_RESULT.FAILURE) {
|
|
53
|
+
const errorMessage = `Failed to verify ${circuit} proof!`;
|
|
54
|
+
throw new Error(errorMessage);
|
|
55
|
+
}
|
|
56
|
+
this.logger.debug(`${circuit} verification successful`);
|
|
57
|
+
};
|
|
58
|
+
await runInDirectory(this.config.bbWorkingDirectory, operation);
|
|
59
|
+
}
|
|
60
|
+
async generateSolidityContract(circuit, contractName) {
|
|
61
|
+
const result = await generateContractForCircuit(this.config.bbBinaryPath, this.config.bbWorkingDirectory, circuit, ProtocolCircuitArtifacts[circuit], contractName, this.logger.debug);
|
|
62
|
+
if (result.status === BB_RESULT.FAILURE) {
|
|
63
|
+
throw new Error(`Failed to create verifier contract for ${circuit}, ${result.reason}`);
|
|
64
|
+
}
|
|
65
|
+
return fs.readFile(result.contractPath, 'utf-8');
|
|
66
|
+
}
|
|
67
|
+
async verifyProof(tx) {
|
|
68
|
+
const { proof, enqueuedPublicFunctionCalls } = tx;
|
|
69
|
+
const expectedCircuit = enqueuedPublicFunctionCalls.length > 0 ? 'PrivateKernelTailToPublicArtifact' : 'PrivateKernelTailArtifact';
|
|
70
|
+
try {
|
|
71
|
+
await this.verifyProofForCircuit(expectedCircuit, proof);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
this.logger.warn(`Failed to verify ${expectedCircuit} proof for tx ${Tx.getHash(tx)}: ${String(err)}`);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async getVerificationKeys() {
|
|
80
|
+
const [privateKernelCircuit, privateKernelToPublicCircuit] = await Promise.all([
|
|
81
|
+
this.getVerificationKeyData('PrivateKernelTailArtifact'),
|
|
82
|
+
this.getVerificationKeyData('PrivateKernelTailToPublicArtifact'),
|
|
83
|
+
]);
|
|
84
|
+
return {
|
|
85
|
+
privateKernelCircuit,
|
|
86
|
+
privateKernelToPublicCircuit,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvYmJfdmVyaWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxFQUFFLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFnQyxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hGLE9BQU8sRUFHTCx3QkFBd0IsR0FDekIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQ0wsU0FBUyxFQUNULGNBQWMsRUFDZCxXQUFXLEVBQ1gsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixXQUFXLEdBQ1osTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFN0UsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUNVLE1BQWdCLEVBQ2hCLG1CQUFtQixJQUFJLEdBQUcsRUFBa0QsRUFDNUUsTUFBbUI7UUFGbkIsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTREO1FBQzVFLFdBQU0sR0FBTixNQUFNLENBQWE7SUFDMUIsQ0FBQztJQUVHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNyQixNQUFnQixFQUNoQixrQkFBc0MsRUFBRSxFQUN4QyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsbUJBQW1CLENBQUM7UUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQWtELENBQUM7UUFDdkUsS0FBSyxNQUFNLE9BQU8sSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFN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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verifier/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/bb-prover",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js"
|
|
@@ -51,11 +51,11 @@
|
|
|
51
51
|
]
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@aztec/circuit-types": "0.
|
|
55
|
-
"@aztec/circuits.js": "0.
|
|
56
|
-
"@aztec/foundation": "0.
|
|
57
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
58
|
-
"@aztec/simulator": "0.
|
|
54
|
+
"@aztec/circuit-types": "0.43.0",
|
|
55
|
+
"@aztec/circuits.js": "0.43.0",
|
|
56
|
+
"@aztec/foundation": "0.43.0",
|
|
57
|
+
"@aztec/noir-protocol-circuits-types": "0.43.0",
|
|
58
|
+
"@aztec/simulator": "0.43.0",
|
|
59
59
|
"@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
|
|
60
60
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
61
61
|
"commander": "^9.0.0",
|
package/src/bb/cli.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { type ProtocolArtifact, ProtocolCircuitArtifacts } from '@aztec/noir-pro
|
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import * as fs from 'fs/promises';
|
|
6
6
|
|
|
7
|
-
import { generateKeyForNoirCircuit } from './execute.js';
|
|
7
|
+
import { generateContractForCircuit, generateKeyForNoirCircuit } from './execute.js';
|
|
8
8
|
|
|
9
9
|
const { BB_WORKING_DIRECTORY, BB_BINARY_PATH } = process.env;
|
|
10
10
|
|
|
@@ -88,5 +88,40 @@ export function getProgram(log: LogFn): Command {
|
|
|
88
88
|
log,
|
|
89
89
|
);
|
|
90
90
|
});
|
|
91
|
+
|
|
92
|
+
program
|
|
93
|
+
.command('write-contract')
|
|
94
|
+
.description('Generates the verification contract for the specified circuit')
|
|
95
|
+
.requiredOption(
|
|
96
|
+
'-w, --working-directory <string>',
|
|
97
|
+
'A directory to use for storing input/output files',
|
|
98
|
+
BB_WORKING_DIRECTORY,
|
|
99
|
+
)
|
|
100
|
+
.requiredOption('-b, --bb-path <string>', 'The path to the BB binary', BB_BINARY_PATH)
|
|
101
|
+
.requiredOption('-c, --circuit <string>', 'The name of a protocol circuit')
|
|
102
|
+
.requiredOption('-n --contract-name <string>', 'The name of the contract to generate', 'contract.sol')
|
|
103
|
+
.action(async options => {
|
|
104
|
+
const compiledCircuit = ProtocolCircuitArtifacts[options.circuit as ProtocolArtifact];
|
|
105
|
+
if (!compiledCircuit) {
|
|
106
|
+
log(`Failed to find circuit ${options.circuit}`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
await fs.access(options.workingDirectory, fs.constants.W_OK);
|
|
111
|
+
} catch (error) {
|
|
112
|
+
log(`Working directory does not exist`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
await generateContractForCircuit(
|
|
117
|
+
options.bbPath,
|
|
118
|
+
options.workingDirectory,
|
|
119
|
+
options.circuit,
|
|
120
|
+
compiledCircuit,
|
|
121
|
+
options.contractName,
|
|
122
|
+
log,
|
|
123
|
+
);
|
|
124
|
+
});
|
|
125
|
+
|
|
91
126
|
return program;
|
|
92
127
|
}
|