From 8cc13f568c3f3668e4ce25627562385710c74f77 Mon Sep 17 00:00:00 2001 From: Jonathan Bursztyn Date: Thu, 28 Sep 2023 19:02:10 -0400 Subject: [PATCH] chore: set up noir_js in integration tests (#2871) Co-authored-by: Tom French --- .github/workflows/test-integration.yml | 1 - .../integration/browser/recursion.test.ts | 43 +++++++------------ tooling/noir_js/src/witness_generation.ts | 5 ++- 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index ebc2136f514..00eb7d4b5bc 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -242,7 +242,6 @@ jobs: forge create --rpc-url http://127.0.0.1:8545 --mnemonic "test test test test test test test test test test test junk" src/1_mul.sol:UltraVerifier --json > mul_output.json forge create --rpc-url http://127.0.0.1:8545 --mnemonic "test test test test test test test test test test test junk" src/main.sol:UltraVerifier --json > main_output.json - - name: Setup `integration-tests` run: | yarn workspace @noir-lang/source-resolver build diff --git a/compiler/integration-tests/test/integration/browser/recursion.test.ts b/compiler/integration-tests/test/integration/browser/recursion.test.ts index ae3028e0e00..41c807f1ca0 100644 --- a/compiler/integration-tests/test/integration/browser/recursion.test.ts +++ b/compiler/integration-tests/test/integration/browser/recursion.test.ts @@ -8,7 +8,7 @@ import newCompiler, { init_log_level as compilerLogLevel, } from "@noir-lang/noir_wasm"; import { decompressSync as gunzip } from "fflate"; -import { acvm, abi } from "@noir-lang/noir_js"; +import { acvm, abi, generateWitness } from "@noir-lang/noir_js"; // @ts-ignore import { Barretenberg, RawBuffer, Crs } from "@aztec/bb.js"; @@ -17,8 +17,8 @@ import * as TOML from "smol-toml"; const logger = new Logger({ name: "test", minLevel: TEST_LOG_LEVEL }); -const { default: initACVM, executeCircuit, compressWitness } = acvm; -const { default: newABICoder, abiEncode } = abi; +const { default: initACVM } = acvm; +const { default: newABICoder } = abi; await newCompiler(); await newABICoder(); @@ -54,7 +54,7 @@ await api.srsInitSrs( const acirComposer = await api.acirNewAcirComposer(CIRCUIT_SIZE); -async function getCircuit(noirSource) { +async function getCircuit(noirSource: string) { // eslint-disable-next-line @typescript-eslint/no-unused-vars initializeResolver((id: string) => { logger.debug("source-resolver: resolving:", id); @@ -64,18 +64,6 @@ async function getCircuit(noirSource) { return compile({}); } -async function generateWitness(acir, abi, inputs) { - const witnessMap: WitnessMap = abiEncode(abi, inputs, null); - - const compressedByteCode = Uint8Array.from(atob(acir), (c) => - c.charCodeAt(0), - ); - - return executeCircuit(compressedByteCode, witnessMap, () => { - throw Error("unexpected oracle"); - }); -} - async function generateProof( acirUint8Array: Uint8Array, witnessUint8Array: Uint8Array, @@ -127,22 +115,21 @@ describe("It compiles noir program code, receiving circuit bytes and abi object. }); it("Should generate valid inner proof for correct input, then verify proof within a proof", async () => { - //@ts-ignore const { circuit: main_circuit, abi: main_abi } = await getCircuit(circuit_main_source); const main_inputs = TOML.parse(circuit_main_toml); - const main_witness = await generateWitness( - main_circuit, - main_abi, + const main_witnessUint8Array = await generateWitness( + { + bytecode: main_circuit, + abi: main_abi, + }, main_inputs, ); const main_compressedByteCode = Uint8Array.from(atob(main_circuit), (c) => c.charCodeAt(0), ); - const main_compressedWitness = compressWitness(main_witness); const main_acirUint8Array = gunzip(main_compressedByteCode); - const main_witnessUint8Array = gunzip(main_compressedWitness); const optimizeMainProofForRecursion = true; @@ -181,7 +168,7 @@ describe("It compiles noir program code, receiving circuit bytes and abi object. public_inputs: [main_inputs.y], key_hash: vkHash, // eslint-disable-next-line prettier/prettier - input_aggregation_object: ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"] + input_aggregation_object: ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"], }; logger.debug("recursion_inputs", recursion_inputs); @@ -190,9 +177,11 @@ describe("It compiles noir program code, receiving circuit bytes and abi object. circuit_recursion_source, ); - const recursion_witness = await generateWitness( - recursion_circuit, - recursion_abi, + const recursion_witnessUint8Array = await generateWitness( + { + bytecode: recursion_circuit, + abi: recursion_abi, + }, recursion_inputs, ); @@ -201,9 +190,7 @@ describe("It compiles noir program code, receiving circuit bytes and abi object. (c) => c.charCodeAt(0), ); - const recursion_compressedWitness = compressWitness(recursion_witness); const recursion_acirUint8Array = gunzip(recursion_compressedByteCode); - const recursion_witnessUint8Array = gunzip(recursion_compressedWitness); const optimizeRecursionProofForRecursion = false; diff --git a/tooling/noir_js/src/witness_generation.ts b/tooling/noir_js/src/witness_generation.ts index b8f594a5fc5..c4f129dd2a6 100644 --- a/tooling/noir_js/src/witness_generation.ts +++ b/tooling/noir_js/src/witness_generation.ts @@ -4,7 +4,10 @@ import { executeCircuit } from '@noir-lang/acvm_js'; import { witnessMapToUint8Array } from './serialize.js'; // Generates the witnesses needed to feed into the chosen proving system -export async function generateWitness(compiledProgram, inputs): Promise { +export async function generateWitness( + compiledProgram: { bytecode: string; abi: unknown }, + inputs: unknown, +): Promise { // Throws on ABI encoding error const witnessMap = abiEncode(compiledProgram.abi, inputs, null);