From f0d2a14bbac54daebff24647990b09ebe8662ee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Wed, 11 Oct 2023 16:50:57 +0100 Subject: [PATCH 1/3] adding destroy method and options object --- tooling/noir_js/src/program.ts | 6 +++++- tooling/noir_js_backend_barretenberg/src/index.ts | 12 +++++++----- tooling/noir_js_types/src/types.ts | 12 +++++------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/tooling/noir_js/src/program.ts b/tooling/noir_js/src/program.ts index 7d11166c0a7..126e96b854b 100644 --- a/tooling/noir_js/src/program.ts +++ b/tooling/noir_js/src/program.ts @@ -5,7 +5,7 @@ import initAbi, { abiDecode, InputMap, InputValue } from '@noir-lang/noirc_abi'; import initACVM from '@noir-lang/acvm_js'; import { witnessMapToUint8Array } from './serialize.js'; -export class Noir { +export class Noir implements Noir { constructor( private circuit: CompiledCircuit, private backend?: Backend, @@ -20,6 +20,10 @@ export class Noir { } } + async destroy(): Promise { + await this.backend?.destroy(); + } + private getBackend(): Backend { if (this.backend === undefined) throw new Error('Operation requires a backend but none was provided'); return this.backend; diff --git a/tooling/noir_js_backend_barretenberg/src/index.ts b/tooling/noir_js_backend_barretenberg/src/index.ts index a2f8240f6f7..cc9363995f7 100644 --- a/tooling/noir_js_backend_barretenberg/src/index.ts +++ b/tooling/noir_js_backend_barretenberg/src/index.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { acirToUint8Array } from './serialize.js'; -import { Backend, CompiledCircuit, ProofData } from '@noir-lang/types'; +import { Backend, BackendOptions, CompiledCircuit, ProofData } from '@noir-lang/types'; // This is the number of bytes in a UltraPlonk proof // minus the public inputs. @@ -14,11 +14,13 @@ export class BarretenbergBackend implements Backend { private api: any; private acirComposer: any; private acirUncompressedBytecode: Uint8Array; - private numberOfThreads = 1; - constructor(acirCircuit: CompiledCircuit, numberOfThreads = 1) { + constructor( + acirCircuit: CompiledCircuit, + private options: BackendOptions = { threads: 1 }, + ) { const acirBytecodeBase64 = acirCircuit.bytecode; - this.numberOfThreads = numberOfThreads; + this.options = options; this.acirUncompressedBytecode = acirToUint8Array(acirBytecodeBase64); } @@ -27,7 +29,7 @@ export class BarretenbergBackend implements Backend { // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore const { Barretenberg, RawBuffer, Crs } = await import('@aztec/bb.js'); - const api = await Barretenberg.new(this.numberOfThreads); + const api = await Barretenberg.new(this.options.threads); const [_exact, _total, subgroupSize] = await api.acirGetCircuitSizes(this.acirUncompressedBytecode); const crs = await Crs.new(subgroupSize + 1); diff --git a/tooling/noir_js_types/src/types.ts b/tooling/noir_js_types/src/types.ts index 6285972d1e9..152238a533b 100644 --- a/tooling/noir_js_types/src/types.ts +++ b/tooling/noir_js_types/src/types.ts @@ -1,19 +1,17 @@ import { Abi } from '@noir-lang/noirc_abi'; 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(proofData: ProofData): Promise; - verifyIntermediateProof(proofData: ProofData): Promise; + destroy(): Promise; } +export type BackendOptions = { + threads: number; +}; + export type ProofData = { publicInputs: Uint8Array[]; proof: Uint8Array; From ae90af5c888a491b907c1d4eeee78b0c95905f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Wed, 11 Oct 2023 16:53:17 +0100 Subject: [PATCH 2/3] cleanup --- tooling/noir_js_backend_barretenberg/src/index.ts | 1 - tooling/noir_js_types/src/types.ts | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tooling/noir_js_backend_barretenberg/src/index.ts b/tooling/noir_js_backend_barretenberg/src/index.ts index cc9363995f7..ec3e436368c 100644 --- a/tooling/noir_js_backend_barretenberg/src/index.ts +++ b/tooling/noir_js_backend_barretenberg/src/index.ts @@ -20,7 +20,6 @@ export class BarretenbergBackend implements Backend { private options: BackendOptions = { threads: 1 }, ) { const acirBytecodeBase64 = acirCircuit.bytecode; - this.options = options; this.acirUncompressedBytecode = acirToUint8Array(acirBytecodeBase64); } diff --git a/tooling/noir_js_types/src/types.ts b/tooling/noir_js_types/src/types.ts index 152238a533b..a810edd7dc5 100644 --- a/tooling/noir_js_types/src/types.ts +++ b/tooling/noir_js_types/src/types.ts @@ -1,8 +1,14 @@ import { Abi } from '@noir-lang/noirc_abi'; 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(proofData: ProofData): Promise; verifyIntermediateProof(proofData: ProofData): Promise; destroy(): Promise; From 9813024eb1066851d778547ab3ebda954ba63a34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Wed, 11 Oct 2023 17:07:54 +0100 Subject: [PATCH 3/3] im an idiot --- tooling/noir_js/src/program.ts | 2 +- tooling/noir_js_backend_barretenberg/src/index.ts | 3 ++- tooling/noir_js_backend_barretenberg/src/types.ts | 3 +++ tooling/noir_js_types/src/types.ts | 4 ---- 4 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 tooling/noir_js_backend_barretenberg/src/types.ts diff --git a/tooling/noir_js/src/program.ts b/tooling/noir_js/src/program.ts index 126e96b854b..877fd400688 100644 --- a/tooling/noir_js/src/program.ts +++ b/tooling/noir_js/src/program.ts @@ -5,7 +5,7 @@ import initAbi, { abiDecode, InputMap, InputValue } from '@noir-lang/noirc_abi'; import initACVM from '@noir-lang/acvm_js'; import { witnessMapToUint8Array } from './serialize.js'; -export class Noir implements Noir { +export class Noir { constructor( private circuit: CompiledCircuit, private backend?: Backend, diff --git a/tooling/noir_js_backend_barretenberg/src/index.ts b/tooling/noir_js_backend_barretenberg/src/index.ts index ec3e436368c..e51e35585c0 100644 --- a/tooling/noir_js_backend_barretenberg/src/index.ts +++ b/tooling/noir_js_backend_barretenberg/src/index.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { acirToUint8Array } from './serialize.js'; -import { Backend, BackendOptions, CompiledCircuit, ProofData } from '@noir-lang/types'; +import { Backend, CompiledCircuit, ProofData } from '@noir-lang/types'; +import { BackendOptions } from './types.js'; // This is the number of bytes in a UltraPlonk proof // minus the public inputs. diff --git a/tooling/noir_js_backend_barretenberg/src/types.ts b/tooling/noir_js_backend_barretenberg/src/types.ts new file mode 100644 index 00000000000..b88a942d986 --- /dev/null +++ b/tooling/noir_js_backend_barretenberg/src/types.ts @@ -0,0 +1,3 @@ +export type BackendOptions = { + threads: number; +}; diff --git a/tooling/noir_js_types/src/types.ts b/tooling/noir_js_types/src/types.ts index a810edd7dc5..f534ec9a920 100644 --- a/tooling/noir_js_types/src/types.ts +++ b/tooling/noir_js_types/src/types.ts @@ -14,10 +14,6 @@ export interface Backend { destroy(): Promise; } -export type BackendOptions = { - threads: number; -}; - export type ProofData = { publicInputs: Uint8Array[]; proof: Uint8Array;