From 5ca20f701d3095a6de1bcac61b94232b58b78736 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:14:25 +0000 Subject: [PATCH 01/13] Copy from Kobys Branch Co-authored-by: Koby Hall <102518238+kobyhallx@users.noreply.github.com> --- tooling/noir_js_types/.eslintignore | 2 ++ tooling/noir_js_types/.eslintrc.cjs | 3 +++ tooling/noir_js_types/.gitignore | 0 tooling/noir_js_types/.prettierrc | 6 ++++++ tooling/noir_js_types/lib/types.ts | 18 ++++++++++++++++++ tooling/noir_js_types/package.json | 14 ++++++++++++++ 6 files changed, 43 insertions(+) create mode 100644 tooling/noir_js_types/.eslintignore create mode 100644 tooling/noir_js_types/.eslintrc.cjs create mode 100644 tooling/noir_js_types/.gitignore create mode 100644 tooling/noir_js_types/.prettierrc create mode 100644 tooling/noir_js_types/lib/types.ts create mode 100644 tooling/noir_js_types/package.json diff --git a/tooling/noir_js_types/.eslintignore b/tooling/noir_js_types/.eslintignore new file mode 100644 index 00000000000..fcbc654a839 --- /dev/null +++ b/tooling/noir_js_types/.eslintignore @@ -0,0 +1,2 @@ +node_modules +test/backend/barretenberg.ts \ No newline at end of file diff --git a/tooling/noir_js_types/.eslintrc.cjs b/tooling/noir_js_types/.eslintrc.cjs new file mode 100644 index 00000000000..5a2cc7f1ec0 --- /dev/null +++ b/tooling/noir_js_types/.eslintrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + extends: ['../../.eslintrc.js'], +}; diff --git a/tooling/noir_js_types/.gitignore b/tooling/noir_js_types/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tooling/noir_js_types/.prettierrc b/tooling/noir_js_types/.prettierrc new file mode 100644 index 00000000000..ef937f9697a --- /dev/null +++ b/tooling/noir_js_types/.prettierrc @@ -0,0 +1,6 @@ +{ + "parser": "typescript", + "printWidth": 120, + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/tooling/noir_js_types/lib/types.ts b/tooling/noir_js_types/lib/types.ts new file mode 100644 index 00000000000..d9ad2483eca --- /dev/null +++ b/tooling/noir_js_types/lib/types.ts @@ -0,0 +1,18 @@ +export interface Backend { + // Generate an outer proof. This is the proof for the circuit which will verify + // inner proofs and or can be seen as the proof created for regular circuits. + generateProof(decompressedWitness: Uint8Array, optimizeForVerifyInCircuit?: boolean): Promise; + + // Generates a child proof. Child Proof will be verified in another Circuit. + generateChildProof(decompressedWitness: Uint8Array): Promise; + + verifyProof(proof: Uint8Array, optimizeForVerifyInCircuit?: boolean): Promise; + + // Verifies a child proof. + verifyChildProof(proof: Uint8Array): Promise; +} + +export type CompiledCircuit = { + bytecode: string; + abi: object; +}; diff --git a/tooling/noir_js_types/package.json b/tooling/noir_js_types/package.json new file mode 100644 index 00000000000..188b052273a --- /dev/null +++ b/tooling/noir_js_types/package.json @@ -0,0 +1,14 @@ +{ + "name": "@noir-lang/types", + "collaborators": [ + "The Noir Team " + ], + "version": "0.14.1", + "packageManager": "yarn@3.5.1", + "license": "(MIT OR Apache-2.0)", + "files": [ + "lib", + "package.json" + ], + "types": "lib/types.ts" +} From e120e24d21a9979f14192c697ee6a1ef6ccf0392 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:14:41 +0000 Subject: [PATCH 02/13] revert to previous definition --- tooling/noir_js_types/lib/types.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tooling/noir_js_types/lib/types.ts b/tooling/noir_js_types/lib/types.ts index d9ad2483eca..2b6ea8ad4b0 100644 --- a/tooling/noir_js_types/lib/types.ts +++ b/tooling/noir_js_types/lib/types.ts @@ -1,15 +1,15 @@ export interface Backend { // Generate an outer proof. This is the proof for the circuit which will verify // inner proofs and or can be seen as the proof created for regular circuits. - generateProof(decompressedWitness: Uint8Array, optimizeForVerifyInCircuit?: boolean): Promise; + generateFinalProof(decompressedWitness: Uint8Array): Promise; - // Generates a child proof. Child Proof will be verified in another Circuit. - generateChildProof(decompressedWitness: Uint8Array): Promise; + // Generates an inner proof. This is the proof that will be verified + // in another circuit. + generateIntermediateProof(decompressedWitness: Uint8Array): Promise; - verifyProof(proof: Uint8Array, optimizeForVerifyInCircuit?: boolean): Promise; + verifyFinalProof(proof: Uint8Array): Promise; - // Verifies a child proof. - verifyChildProof(proof: Uint8Array): Promise; + verifyIntermediateProof(proof: Uint8Array): Promise; } export type CompiledCircuit = { From 15ebc21c9d3e486ea024136a8371a5583312e2e1 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:21:45 +0000 Subject: [PATCH 03/13] remove unused ignore file --- tooling/noir_js_types/.eslintignore | 1 - 1 file changed, 1 deletion(-) diff --git a/tooling/noir_js_types/.eslintignore b/tooling/noir_js_types/.eslintignore index fcbc654a839..3c3629e647f 100644 --- a/tooling/noir_js_types/.eslintignore +++ b/tooling/noir_js_types/.eslintignore @@ -1,2 +1 @@ node_modules -test/backend/barretenberg.ts \ No newline at end of file From 29d7f943489206e6a51d6db94db4f5a0a880da48 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:23:36 +0000 Subject: [PATCH 04/13] revert: group tooling workspace packages --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 84d44a38383..07ca6b4689a 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,9 @@ "workspaces": [ "compiler/wasm", "compiler/source-resolver", - "tooling/noirc_abi_wasm", "compiler/integration-tests", + "tooling/noir_js_types", + "tooling/noirc_abi_wasm", "tooling/noir_js", "acvm-repo/acvm_js", "release-tests" From 190f011a342ed909db02e4feb58a5eaa88ab0ac1 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:23:43 +0000 Subject: [PATCH 05/13] format --- compiler/source-resolver/types/index.d.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/compiler/source-resolver/types/index.d.ts b/compiler/source-resolver/types/index.d.ts index bf144c3928f..a17f7bc36bb 100644 --- a/compiler/source-resolver/types/index.d.ts +++ b/compiler/source-resolver/types/index.d.ts @@ -1,4 +1,2 @@ export declare const read_file: (source_id: string) => string; -export declare function initializeResolver( - resolver: (source_id: string) => string, -): void; +export declare function initializeResolver(resolver: (source_id: string) => string): void; From c053aacf1210168a16edfa0ec1a3d7523265b0d3 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:30:37 +0000 Subject: [PATCH 06/13] update yarn.lock --- yarn.lock | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/yarn.lock b/yarn.lock index 2ec26866e93..f4970ed51ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -519,6 +519,12 @@ __metadata: languageName: unknown linkType: soft +"@noir-lang/types@workspace:tooling/noir_js_types": + version: 0.0.0-use.local + resolution: "@noir-lang/types@workspace:tooling/noir_js_types" + languageName: unknown + linkType: soft + "@npmcli/fs@npm:^3.1.0": version: 3.1.0 resolution: "@npmcli/fs@npm:3.1.0" From 9dcbbca50b49f2564b0eebbeac68cb4bd95a6f4f Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:47:21 +0000 Subject: [PATCH 07/13] Import types into noir_js Co-authored-by: Koby Hall <102518238+kobyhallx@users.noreply.github.com> --- tooling/noir_js/package.json | 1 + tooling/noir_js/src/backend/backend_interface.ts | 13 ------------- tooling/noir_js/src/program.ts | 4 ++-- tooling/noir_js/test/backend/barretenberg.ts | 2 +- 4 files changed, 4 insertions(+), 16 deletions(-) delete mode 100644 tooling/noir_js/src/backend/backend_interface.ts diff --git a/tooling/noir_js/package.json b/tooling/noir_js/package.json index a79c4437d6a..8899b5a0ece 100644 --- a/tooling/noir_js/package.json +++ b/tooling/noir_js/package.json @@ -9,6 +9,7 @@ "type": "module", "dependencies": { "@noir-lang/acvm_js": "workspace:*", + "@noir-lang/types": "workspace:*", "@noir-lang/noirc_abi": "workspace:*", "fflate": "^0.8.0" }, diff --git a/tooling/noir_js/src/backend/backend_interface.ts b/tooling/noir_js/src/backend/backend_interface.ts deleted file mode 100644 index c3b8e30cdb1..00000000000 --- a/tooling/noir_js/src/backend/backend_interface.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface Backend { - // Generate an outer proof. This is the proof for the circuit which will verify - // inner proofs and or can be seen as the proof created for regular circuits. - generateFinalProof(decompressedWitness: Uint8Array): Promise; - - // Generates an inner proof. This is the proof that will be verified - // in another circuit. - generateIntermediateProof(decompressedWitness: Uint8Array): Promise; - - verifyFinalProof(proof: Uint8Array): Promise; - - verifyIntermediateProof(proof: Uint8Array): Promise; -} diff --git a/tooling/noir_js/src/program.ts b/tooling/noir_js/src/program.ts index 851f79cb35d..0c129aa3a72 100644 --- a/tooling/noir_js/src/program.ts +++ b/tooling/noir_js/src/program.ts @@ -1,10 +1,10 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { Backend } from './backend/backend_interface.js'; +import { Backend, CompiledCircuit } from '@noir-lang/types'; import { generateWitness } from './witness_generation.js'; export class Noir { constructor( - private circuit: { bytecode: string; abi: any }, + private circuit: CompiledCircuit, private backend: Backend, ) {} diff --git a/tooling/noir_js/test/backend/barretenberg.ts b/tooling/noir_js/test/backend/barretenberg.ts index 55b7bbf2b7c..557f2b3a74a 100644 --- a/tooling/noir_js/test/backend/barretenberg.ts +++ b/tooling/noir_js/test/backend/barretenberg.ts @@ -3,7 +3,7 @@ // @ts-ignore import { Barretenberg, Crs, RawBuffer } from '@aztec/bb.js'; import { acirToUint8Array } from '../../src/index.js'; -import { Backend } from '../../src/backend/backend_interface.js'; +import { Backend } from '@noir-lang/types'; export class BarretenbergBackend implements Backend { // These type assertions are used so that we don't From bbcf611adc8ee649cb2f23eb4cfdb5ab99de456a Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:50:21 +0000 Subject: [PATCH 08/13] replace anonymous object with CompiledCircuit type --- tooling/noir_js/src/witness_generation.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tooling/noir_js/src/witness_generation.ts b/tooling/noir_js/src/witness_generation.ts index c4f129dd2a6..3b1dfd90109 100644 --- a/tooling/noir_js/src/witness_generation.ts +++ b/tooling/noir_js/src/witness_generation.ts @@ -2,12 +2,10 @@ import { abiEncode } from '@noir-lang/noirc_abi'; import { base64Decode } from './base64_decode.js'; import { executeCircuit } from '@noir-lang/acvm_js'; import { witnessMapToUint8Array } from './serialize.js'; +import { CompiledCircuit } from '@noir-lang/types'; // Generates the witnesses needed to feed into the chosen proving system -export async function generateWitness( - compiledProgram: { bytecode: string; abi: unknown }, - inputs: unknown, -): Promise { +export async function generateWitness(compiledProgram: CompiledCircuit, inputs: unknown): Promise { // Throws on ABI encoding error const witnessMap = abiEncode(compiledProgram.abi, inputs, null); From 7959844b305d471eb5b534830bd4e55adfa4a191 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:50:58 +0000 Subject: [PATCH 09/13] export Noir --- tooling/noir_js/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tooling/noir_js/src/index.ts b/tooling/noir_js/src/index.ts index 3672db76638..71914d59dbf 100644 --- a/tooling/noir_js/src/index.ts +++ b/tooling/noir_js/src/index.ts @@ -5,3 +5,5 @@ export { acvm, abi }; export { generateWitness } from './witness_generation.js'; export { acirToUint8Array, witnessMapToUint8Array } from './serialize.js'; + +export { Noir } from './program.js'; From ebaa551b459eb8cef953a225ab54b9177b596f52 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:54:43 +0000 Subject: [PATCH 10/13] lint fix --- compiler/source-resolver/types/index.d.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/source-resolver/types/index.d.ts b/compiler/source-resolver/types/index.d.ts index a17f7bc36bb..bf144c3928f 100644 --- a/compiler/source-resolver/types/index.d.ts +++ b/compiler/source-resolver/types/index.d.ts @@ -1,2 +1,4 @@ export declare const read_file: (source_id: string) => string; -export declare function initializeResolver(resolver: (source_id: string) => string): void; +export declare function initializeResolver( + resolver: (source_id: string) => string, +): void; From 894162d81ad1104f5146c4464974ee6909d9e9fd Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 11:55:48 +0000 Subject: [PATCH 11/13] update lockfile --- tooling/noir_js/package.json | 4 ++-- yarn.lock | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tooling/noir_js/package.json b/tooling/noir_js/package.json index 8899b5a0ece..de9e2831f01 100644 --- a/tooling/noir_js/package.json +++ b/tooling/noir_js/package.json @@ -9,8 +9,8 @@ "type": "module", "dependencies": { "@noir-lang/acvm_js": "workspace:*", - "@noir-lang/types": "workspace:*", "@noir-lang/noirc_abi": "workspace:*", + "@noir-lang/types": "workspace:*", "fflate": "^0.8.0" }, "files": [ @@ -52,4 +52,4 @@ "tsc-multi": "^1.1.0", "typescript": "^5.2.2" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index f4970ed51ef..5998147de80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -447,6 +447,7 @@ __metadata: "@aztec/bb.js": 0.7.2 "@noir-lang/acvm_js": "workspace:*" "@noir-lang/noirc_abi": "workspace:*" + "@noir-lang/types": "workspace:*" "@types/chai": ^4 "@types/mocha": ^10.0.1 "@types/node": ^20.6.2 @@ -519,7 +520,7 @@ __metadata: languageName: unknown linkType: soft -"@noir-lang/types@workspace:tooling/noir_js_types": +"@noir-lang/types@workspace:*, @noir-lang/types@workspace:tooling/noir_js_types": version: 0.0.0-use.local resolution: "@noir-lang/types@workspace:tooling/noir_js_types" languageName: unknown From ef6ad1cf51817a0f02ef2f2cf2e6857f5fb3cbb8 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 12:02:32 +0000 Subject: [PATCH 12/13] remove prettier --- tooling/noir_js/.prettierrc | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 tooling/noir_js/.prettierrc diff --git a/tooling/noir_js/.prettierrc b/tooling/noir_js/.prettierrc deleted file mode 100644 index ef937f9697a..00000000000 --- a/tooling/noir_js/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parser": "typescript", - "printWidth": 120, - "singleQuote": true, - "trailingComma": "all" -} \ No newline at end of file From 01aee4719518d2fe1bb16ab6b096bb41ebe0bf19 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Fri, 29 Sep 2023 13:11:16 +0000 Subject: [PATCH 13/13] lint fix --- tooling/noir_js/src/base64_decode.ts | 8 +-- tooling/noir_js/src/index.ts | 10 ++-- tooling/noir_js/src/program.ts | 4 +- tooling/noir_js/src/serialize.ts | 6 +- tooling/noir_js/src/witness_generation.ts | 25 ++++++--- tooling/noir_js/test/node/e2e.test.ts | 54 ++++++++++-------- tooling/noir_js/test/node/smoke.test.ts | 68 ++++++++++++++--------- 7 files changed, 102 insertions(+), 73 deletions(-) diff --git a/tooling/noir_js/src/base64_decode.ts b/tooling/noir_js/src/base64_decode.ts index d53aed187c7..fddbc2640cb 100644 --- a/tooling/noir_js/src/base64_decode.ts +++ b/tooling/noir_js/src/base64_decode.ts @@ -1,13 +1,13 @@ // Since this is a simple function, we can use feature detection to // see if we are in the nodeJs environment or the browser environment. export function base64Decode(input: string): Uint8Array { - if (typeof Buffer !== 'undefined') { + if (typeof Buffer !== "undefined") { // Node.js environment - return Buffer.from(input, 'base64'); - } else if (typeof atob === 'function') { + return Buffer.from(input, "base64"); + } else if (typeof atob === "function") { // Browser environment return Uint8Array.from(atob(input), (c) => c.charCodeAt(0)); } else { - throw new Error('No implementation found for base64 decoding.'); + throw new Error("No implementation found for base64 decoding."); } } diff --git a/tooling/noir_js/src/index.ts b/tooling/noir_js/src/index.ts index 71914d59dbf..2d3801bf2c1 100644 --- a/tooling/noir_js/src/index.ts +++ b/tooling/noir_js/src/index.ts @@ -1,9 +1,9 @@ -import * as acvm from '@noir-lang/acvm_js'; -import * as abi from '@noir-lang/noirc_abi'; +import * as acvm from "@noir-lang/acvm_js"; +import * as abi from "@noir-lang/noirc_abi"; export { acvm, abi }; -export { generateWitness } from './witness_generation.js'; -export { acirToUint8Array, witnessMapToUint8Array } from './serialize.js'; +export { generateWitness } from "./witness_generation.js"; +export { acirToUint8Array, witnessMapToUint8Array } from "./serialize.js"; -export { Noir } from './program.js'; +export { Noir } from "./program.js"; diff --git a/tooling/noir_js/src/program.ts b/tooling/noir_js/src/program.ts index 0c129aa3a72..1aea14644c9 100644 --- a/tooling/noir_js/src/program.ts +++ b/tooling/noir_js/src/program.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { Backend, CompiledCircuit } from '@noir-lang/types'; -import { generateWitness } from './witness_generation.js'; +import { Backend, CompiledCircuit } from "@noir-lang/types"; +import { generateWitness } from "./witness_generation.js"; export class Noir { constructor( diff --git a/tooling/noir_js/src/serialize.ts b/tooling/noir_js/src/serialize.ts index df01769c06e..0193f465091 100644 --- a/tooling/noir_js/src/serialize.ts +++ b/tooling/noir_js/src/serialize.ts @@ -1,6 +1,6 @@ -import { WitnessMap, compressWitness } from '@noir-lang/acvm_js'; -import { decompressSync as gunzip } from 'fflate'; -import { base64Decode } from './base64_decode.js'; +import { WitnessMap, compressWitness } from "@noir-lang/acvm_js"; +import { decompressSync as gunzip } from "fflate"; +import { base64Decode } from "./base64_decode.js"; // After solving the witness, to pass it a backend, we need to serialize it to a Uint8Array export function witnessMapToUint8Array(solvedWitness: WitnessMap): Uint8Array { diff --git a/tooling/noir_js/src/witness_generation.ts b/tooling/noir_js/src/witness_generation.ts index 3b1dfd90109..f3b31e0eb77 100644 --- a/tooling/noir_js/src/witness_generation.ts +++ b/tooling/noir_js/src/witness_generation.ts @@ -1,20 +1,27 @@ -import { abiEncode } from '@noir-lang/noirc_abi'; -import { base64Decode } from './base64_decode.js'; -import { executeCircuit } from '@noir-lang/acvm_js'; -import { witnessMapToUint8Array } from './serialize.js'; -import { CompiledCircuit } from '@noir-lang/types'; +import { abiEncode } from "@noir-lang/noirc_abi"; +import { base64Decode } from "./base64_decode.js"; +import { executeCircuit } from "@noir-lang/acvm_js"; +import { witnessMapToUint8Array } from "./serialize.js"; +import { CompiledCircuit } from "@noir-lang/types"; // Generates the witnesses needed to feed into the chosen proving system -export async function generateWitness(compiledProgram: CompiledCircuit, inputs: unknown): Promise { +export async function generateWitness( + compiledProgram: CompiledCircuit, + inputs: unknown, +): Promise { // Throws on ABI encoding error const witnessMap = abiEncode(compiledProgram.abi, inputs, null); // Execute the circuit to generate the rest of the witnesses and serialize // them into a Uint8Array. try { - const solvedWitness = await executeCircuit(base64Decode(compiledProgram.bytecode), witnessMap, () => { - throw Error('unexpected oracle during execution'); - }); + const solvedWitness = await executeCircuit( + base64Decode(compiledProgram.bytecode), + witnessMap, + () => { + throw Error("unexpected oracle during execution"); + }, + ); return witnessMapToUint8Array(solvedWitness); } catch (err) { throw new Error(`Circuit execution failed: ${err}`); diff --git a/tooling/noir_js/test/node/e2e.test.ts b/tooling/noir_js/test/node/e2e.test.ts index 1120f08c81b..3d13119e422 100644 --- a/tooling/noir_js/test/node/e2e.test.ts +++ b/tooling/noir_js/test/node/e2e.test.ts @@ -1,14 +1,14 @@ -import { expect } from 'chai'; -import assert_lt_json from '../noir_compiled_examples/assert_lt/target/assert_lt.json' assert { type: 'json' }; -import { generateWitness } from '../../src/index.js'; -import { Noir } from '../../src/program.js'; -import { BarretenbergBackend as Backend } from '../backend/barretenberg.js'; +import { expect } from "chai"; +import assert_lt_json from "../noir_compiled_examples/assert_lt/target/assert_lt.json" assert { type: "json" }; +import { generateWitness } from "../../src/index.js"; +import { Noir } from "../../src/program.js"; +import { BarretenbergBackend as Backend } from "../backend/barretenberg.js"; -it('end-to-end proof creation and verification (outer)', async () => { +it("end-to-end proof creation and verification (outer)", async () => { // Noir.Js part const inputs = { - x: '2', - y: '3', + x: "2", + y: "3", }; const serializedWitness = await generateWitness(assert_lt_json, inputs); @@ -23,11 +23,11 @@ it('end-to-end proof creation and verification (outer)', async () => { expect(isValid).to.be.true; }); -it('end-to-end proof creation and verification (outer) -- Program API', async () => { +it("end-to-end proof creation and verification (outer) -- Program API", async () => { // Noir.Js part const inputs = { - x: '2', - y: '3', + x: "2", + y: "3", }; // Initialize backend @@ -42,11 +42,11 @@ it('end-to-end proof creation and verification (outer) -- Program API', async () expect(isValid).to.be.true; }); -it('end-to-end proof creation and verification (inner)', async () => { +it("end-to-end proof creation and verification (inner)", async () => { // Noir.Js part const inputs = { - x: '2', - y: '3', + x: "2", + y: "3", }; const serializedWitness = await generateWitness(assert_lt_json, inputs); @@ -73,11 +73,11 @@ it('end-to-end proof creation and verification (inner)', async () => { // a prover and verifier class to more accurately reflect what happens in production. // // If its not fixable, we can leave it in as documentation of this behavior. -it('[BUG] -- bb.js null function or function signature mismatch (different instance) ', async () => { +it("[BUG] -- bb.js null function or function signature mismatch (different instance) ", async () => { // Noir.Js part const inputs = { - x: '2', - y: '3', + x: "2", + y: "3", }; const serializedWitness = await generateWitness(assert_lt_json, inputs); @@ -90,11 +90,13 @@ it('[BUG] -- bb.js null function or function signature mismatch (different insta const verifier = await Backend.initialize(assert_lt_json); await verifier.verifyFinalProof(proof); expect.fail( - 'bb.js currently returns a bug when we try to verify a proof with a different Barretenberg instance that created it.', + "bb.js currently returns a bug when we try to verify a proof with a different Barretenberg instance that created it.", ); } catch (error) { const knownError = error as Error; - expect(knownError.message).to.contain('null function or function signature mismatch'); + expect(knownError.message).to.contain( + "null function or function signature mismatch", + ); } }); @@ -105,11 +107,11 @@ it('[BUG] -- bb.js null function or function signature mismatch (different insta // If we only create one type of proof, then this works as expected. // // If we do not create an inner proof, then this will work as expected. -it('[BUG] -- bb.js null function or function signature mismatch (outer-inner) ', async () => { +it("[BUG] -- bb.js null function or function signature mismatch (outer-inner) ", async () => { // Noir.Js part const inputs = { - x: '2', - y: '3', + x: "2", + y: "3", }; const serializedWitness = await generateWitness(assert_lt_json, inputs); @@ -131,9 +133,13 @@ it('[BUG] -- bb.js null function or function signature mismatch (outer-inner) ', // We can also try verifying an inner proof and it will fail. // const isValidInner = await prover.verifyInnerProof(_proofInner); // expect(isValidInner).to.be.true; - expect.fail('bb.js currently returns a bug when we try to verify an inner and outer proof with the same backend'); + expect.fail( + "bb.js currently returns a bug when we try to verify an inner and outer proof with the same backend", + ); } catch (error) { const knownError = error as Error; - expect(knownError.message).to.contain('null function or function signature mismatch'); + expect(knownError.message).to.contain( + "null function or function signature mismatch", + ); } }); diff --git a/tooling/noir_js/test/node/smoke.test.ts b/tooling/noir_js/test/node/smoke.test.ts index 4b0291c0f41..c78b297f4b2 100644 --- a/tooling/noir_js/test/node/smoke.test.ts +++ b/tooling/noir_js/test/node/smoke.test.ts @@ -1,73 +1,89 @@ -import { expect } from 'chai'; -import assert_lt_json from '../noir_compiled_examples/assert_lt/target/assert_lt.json' assert { type: 'json' }; -import { generateWitness } from '../../src/index.js'; +import { expect } from "chai"; +import assert_lt_json from "../noir_compiled_examples/assert_lt/target/assert_lt.json" assert { type: "json" }; +import { generateWitness } from "../../src/index.js"; -it('generates witnesses successfully', async () => { +it("generates witnesses successfully", async () => { const inputs = { - x: '2', - y: '3', + x: "2", + y: "3", }; expect(() => generateWitness(assert_lt_json, inputs)).to.not.throw; }); -it('string input and number input are the same', async () => { +it("string input and number input are the same", async () => { const inputsString = { - x: '2', - y: '3', + x: "2", + y: "3", }; const inputsNumber = { x: 2, y: 3, }; - const solvedWitnessString = await generateWitness(assert_lt_json, inputsString); - const solvedWitnessNumber = await generateWitness(assert_lt_json, inputsNumber); + const solvedWitnessString = await generateWitness( + assert_lt_json, + inputsString, + ); + const solvedWitnessNumber = await generateWitness( + assert_lt_json, + inputsNumber, + ); expect(solvedWitnessString).to.deep.equal(solvedWitnessNumber); }); -it('string input and number input are the same', async () => { +it("string input and number input are the same", async () => { const inputsString = { - x: '2', - y: '3', + x: "2", + y: "3", }; const inputsNumber = { x: 2, y: 3, }; - const solvedWitnessString = await generateWitness(assert_lt_json, inputsString); - const solvedWitnessNumber = await generateWitness(assert_lt_json, inputsNumber); + const solvedWitnessString = await generateWitness( + assert_lt_json, + inputsString, + ); + const solvedWitnessNumber = await generateWitness( + assert_lt_json, + inputsNumber, + ); expect(solvedWitnessString).to.deep.equal(solvedWitnessNumber); }); -it('0x prefixed string input for inputs will throw', async () => { +it("0x prefixed string input for inputs will throw", async () => { const inputsHexPrefix = { - x: '0x2', - y: '0x3', + x: "0x2", + y: "0x3", }; try { await generateWitness(assert_lt_json, inputsHexPrefix); - expect.fail('Expected generatedWitness to throw, due to inputs being prefixed with 0x. Currently not supported'); + expect.fail( + "Expected generatedWitness to throw, due to inputs being prefixed with 0x. Currently not supported", + ); } catch (error) { // Successfully errored due to 0x not being supported. Update this test once/if we choose // to support 0x prefixed inputs. } }); -describe('input validation', () => { - it('x should be a uint64 not a string', async () => { +describe("input validation", () => { + it("x should be a uint64 not a string", async () => { const inputs = { - x: 'foo', - y: '3', + x: "foo", + y: "3", }; try { await generateWitness(assert_lt_json, inputs); - expect.fail('Expected generatedWitness to throw, due to x not being convertible to a uint64'); + expect.fail( + "Expected generatedWitness to throw, due to x not being convertible to a uint64", + ); } catch (error) { const knownError = error as Error; expect(knownError.message).to.equal( - 'Expected witness values to be integers, provided value causes `invalid digit found in string` error', + "Expected witness values to be integers, provided value causes `invalid digit found in string` error", ); } });