From 28d54048a219ff746d545b9d9e5a029984d807bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Fri, 11 Oct 2024 09:52:52 +0100 Subject: [PATCH 01/11] wip --- vite-hardhat/bun.lockb | Bin 412967 -> 412967 bytes vite-hardhat/package.json | 8 ++++---- vite-hardhat/test/index.test.ts | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb index 6c0f4ce316f8a3e88e3c943f9eb14d3b70a434e8..f1309db6750cfba65821a4ef21d74e00bfd0a06d 100755 GIT binary patch delta 1330 zcmZ2JOLF-v$q9N2PgZFE(|^TvL8Y-V|78;Am;DpZB&&S(^D#Mo%lwz`#hV-b7CDL* z>-DiQG9Un$znRtP{x(MC$%@t5lLeeOCQJO}LE=UH^nvmMmT*qK`I8$-PU062qcK=t zz%LOb@fkpI3z&J$H-2ru@r%*6vwn8ZXTPUYE1T@6F>nR9e(+wKTI>IQ{mH1Tcs0G; z8N!--ByFbFzIogm_1W>R{fuY1OXn@L-t~R$_VVb|oG+a`>wxZNWcbJb59outObAb~ ztT)Pf#~0bY`P@w1g@s37n4az^IUqi@ztltY+}j($7X-HE=dAo-tSi~GBt_)@(n~`3 z=COV-emciBPi!GajnntT8PnIcFcmnw*Z6YMC5+?f&qZR1ncORXE#9=>+`#W-U#4r` z>7IzV>WVcfGc=Z5{8HSygZaRMTU*@}V^a^bsS7u>aEMwv|buzSGh@qCEW= zkHFrCy`0M@XxWBT6=rQKUEjWTS#965KM8+}&U>>@KDv3{>zU0gl1q#>cx=3P*qkk8 z`Zal{?^W)6NS=I%?8(!1)#e>$ZzFfCyqcMD;KWpO$J&3g3|YtDKWu*fglGLZCf^4S zj=N5f)cmxCwR@&s`MphrSvvf0#J<#36oo85`LA_4ZyV5g1xwD{_!L+i61a8a!?Wun zUA_k8bd*WY)V=rhWU^*!^xKH4*8pU`S&y4m=``~IuRXHV$G{qmHg%Y^3&fwB(5}wGs)P+_L@g>s%lZw zR(=hR3u^-xwM_C~dGqeUokdHhnN@G!+s5=cqh6hvf#JsN)8JHkU|w4`D4NL?V*zOf z0yZE9rFxioc*N?7RY)Us=@1{|aUoSKX4)S3ktv*Mdca2}oAwo-nYOR^%=|vW)Kt%a zfng0WsDv088YZ+Z+M9l0cLfupfu1o~W*<;S1Sq5SB2I9jL9;PLX8IW)7D-0a?azEz zR9hKM!CYyu`obp=lkOVjhP=`^VFprfYB=5D5=cE%+w_u4EJjSGW-xBULKeyC_gh(5 z+aFwF+5X@X>n#5Z;|8V z2aX&p5-bc1lP@@mOb&43*ev06W*ej8WW{Q25O=b~PaY&*#7`e2-VGEviC;X7hH!lm zKpw=D3BN=b^(QNOgUxHc@oW2yUyQb$^_|t}KlU9x9lZE$DVHAa$)zi|T`ysFy1DlM zjLl}nQi3{v-oJfsa=k%QcFo4%##bwqCp~WeH1Cd=$m$&l{R|qj7=VD0;UE7$Mh1qv zOduWvu-NOpZBjh?cGaefXK(w>Iu!ZSJxlsTl--;?lP=wnOa5P%;O4=%ur5F{i?i0Q z&*0INCb-Yk4D_9`$m=VLEj%u=WPQz@7tS%0G=~fT(Ts$ z_xc^^wf(@n?ZW4?1@Rfh6DAvTXGxRv*FAyKCrri~@7Cr0m*N)LD>(nJdn$8@ zWb`U4&$}0bx-_|2!yKBbUiL^$T@tk^_{Y`ld)t^kXViZL8hYdQ6EamY91PfiB(ixRK^$WB#44nbx^#$-@wkvG7Bg)R{Kyo}G(F%WlTG`I&rI7_d}e+h zVQQ>rz`(Eu7*s+G3=I=n7wt_yu)BhZ(Lm1_EVBF0b{ z#DU@s3t1$m-*07MZGUiyW&49mthZFAGpeyFPoMvtm23L*@2ry351s*Xm4C4M1C { let noir: Noir; - let backend: BarretenbergBackend; + let backend: UltraHonkBackend; let correctProof: ProofData; beforeEach(async () => { const circuitFile = readFileSync(resolve('artifacts/circuit.json'), 'utf-8'); const circuit = JSON.parse(circuitFile); - backend = new BarretenbergBackend(circuit); + backend = new UltraHonkBackend(circuit); noir = new Noir(circuit); }); From a1eda2f111c2597844e5bb2bc685bd2a0429962a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Sat, 19 Oct 2024 18:02:01 +0100 Subject: [PATCH 02/11] wip --- vite-hardhat/bun.lockb | Bin 412967 -> 412999 bytes vite-hardhat/hardhat.config.cts | 55 ++++++++++++-------------------- vite-hardhat/package.json | 1 + vite-hardhat/test/index.test.ts | 2 +- 4 files changed, 23 insertions(+), 35 deletions(-) diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb index f1309db6750cfba65821a4ef21d74e00bfd0a06d..d13b0d8e11e91f4b56e161808f46ab612bf4746c 100755 GIT binary patch delta 24094 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 delta 24292 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 OFM~ { return superRes; }); -export async function compileCircuit(path = './circuit') { - const basePath = resolve(join(path)); - const fm = createFileManager(basePath); - const result = await compile(fm); - if (!('program' in result)) { - throw new Error('Compilation failed'); - } - return result.program as CompiledCircuit; -} +// export async function compileCircuit(path = './circuit') { +// const basePath = resolve(join(path)); +// const fm = createFileManager(basePath); +// const result = await compile(fm); +// if (!('program' in result)) { +// throw new Error('Compilation failed'); +// } +// return result as CompiledCircuit; +// } export async function generateArtifacts(path = './circuit', crsPath = './crs') { - const circuit = await compileCircuit(path); - const decompressed = gunzipSync(Buffer.from(circuit.bytecode, 'base64')); - const api = await Barretenberg.new({ threads: 8 }); - const [exact, total, subgroup] = await api.acirGetCircuitSizes(decompressed, false); - const subgroupSize = Math.pow(2, Math.ceil(Math.log2(total))); - - const crs = await Crs.new(subgroupSize + 1, crsPath); - await api.commonInitSlabAllocator(subgroupSize); - await api.srsInitSrs( - new RawBuffer(crs.getG1Data()), - crs.numPoints, - new RawBuffer(crs.getG2Data()), - ); - - const acirComposer = await api.acirNewAcirComposer(subgroupSize); - await api.acirInitProvingKey(acirComposer, decompressed); - await api.acirInitVerificationKey(acirComposer); - - const contract = await api.acirGetSolidityVerifier(acirComposer); - return { circuit, contract }; + // const circuit = await compileCircuit(path); + + const circuitFile = readFileSync(resolve('artifacts/circuit.json'), 'utf-8'); + const circuit = JSON.parse(circuitFile); + const backend = new UltraHonkBackend(circuit); + // const contract = await backend.acirGetSolidityVerifier(acirComposer); + return { circuit }; } task('compile', 'Compile and generate circuits and contracts').setAction( async (_, __, runSuper) => { - const { circuit, contract } = await generateArtifacts(); + const { circuit } = await generateArtifacts(); mkdirSync('artifacts', { recursive: true }); writeFileSync('artifacts/circuit.json', JSON.stringify(circuit), { flag: 'w' }); - writeFileSync('artifacts/contract.sol', contract, { flag: 'w' }); + // writeFileSync('artifacts/contract.sol', contract, { flag: 'w' }); await runSuper(); }, ); diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index fffc8e5..a004844 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -18,6 +18,7 @@ "@tanstack/react-query-persist-client": "5.0.5", "commander": "^12.1.0", "dotenv": "^16.0.3", + "fflate": "^0.8.2", "hardhat": "^2.19.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/vite-hardhat/test/index.test.ts b/vite-hardhat/test/index.test.ts index 5bfc839..14e2191 100644 --- a/vite-hardhat/test/index.test.ts +++ b/vite-hardhat/test/index.test.ts @@ -15,7 +15,7 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. let correctProof: ProofData; beforeEach(async () => { - const circuitFile = readFileSync(resolve('artifacts/circuit.json'), 'utf-8'); + const circuitFile = readFileSync(resolve('circuit/target/noirstarter.json'), 'utf-8'); const circuit = JSON.parse(circuitFile); backend = new UltraHonkBackend(circuit); From cfb4f6290bdcabaa841587b41f951454540b9dc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 14 Nov 2024 19:54:41 +0700 Subject: [PATCH 03/11] v0.1.2 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 65c9302..fb6986c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "noir-starter", - "version": "0.1.1", + "name": "create-noir", + "version": "0.1.2", "type": "module", "description": "This is a reference repo to help you get started with writing zero-knowledge circuits with [Noir](https://noir-lang.org/).", "bin": "npx.js", From 4a0b6a863ece3f9c766a2d6a38f2377fc0279305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 14 Nov 2024 19:55:29 +0700 Subject: [PATCH 04/11] v0.1.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fb6986c..4c49961 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "create-noir", - "version": "0.1.2", + "version": "0.1.3", "type": "module", "description": "This is a reference repo to help you get started with writing zero-knowledge circuits with [Noir](https://noir-lang.org/).", "bin": "npx.js", From 943780d0dc4f78a0a1ad68f20b10addd9001d010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Wed, 18 Dec 2024 12:33:04 +0000 Subject: [PATCH 05/11] finally ultrahonk --- .gitignore | 1 + vite-hardhat/.gitignore | 4 +- vite-hardhat/bun.lockb | Bin 412999 -> 417796 bytes vite-hardhat/hardhat.config.cts | 143 +----- vite-hardhat/package.json | 20 +- .../vite/hooks/useOffChainVerification.tsx | 4 +- .../vite/hooks/useOnChainVerification.tsx | 4 +- .../vite/hooks/useProofGeneration.tsx | 6 +- vite-hardhat/packages/vite/index.tsx | 34 +- vite-hardhat/packages/vite/package.json | 8 - vite-hardhat/packages/vite/vite.config.js | 11 +- vite-hardhat/test/index.test.ts | 50 -- vite-hardhat/tests/index.test.ts | 27 +- yarn.lock | 453 ------------------ 14 files changed, 67 insertions(+), 698 deletions(-) delete mode 100644 vite-hardhat/test/index.test.ts delete mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 972f3b5..c287e05 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ package-lock.json # To use with nektos/act .github/event.json +bun.lockb diff --git a/vite-hardhat/.gitignore b/vite-hardhat/.gitignore index 3816035..9f22713 100644 --- a/vite-hardhat/.gitignore +++ b/vite-hardhat/.gitignore @@ -54,6 +54,8 @@ crs artifacts .yarn/ -circuit/target/ +noir/target/ +contracts dist deployment.json +bun.lockb diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb index d13b0d8e11e91f4b56e161808f46ab612bf4746c..0c9481d8ad7f16c16b4aa17e60bea497fea571ec 100755 GIT binary patch delta 102105 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 delta 113936 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 { - const verifier = await hre.viem.deployContract('UltraVerifier'); - - const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; - const config = { - name: hre.network.name, - address: verifier.address, - networkConfig: { - ...networkConfig, - id: hre.network.config.chainId, - }, - }; - -<<<<<<< HEAD - return superRes; -}); - -// export async function compileCircuit(path = './circuit') { -// const basePath = resolve(join(path)); -// const fm = createFileManager(basePath); -// const result = await compile(fm); -// if (!('program' in result)) { -// throw new Error('Compilation failed'); -// } -// return result as CompiledCircuit; -// } - -export async function generateArtifacts(path = './circuit', crsPath = './crs') { - // const circuit = await compileCircuit(path); - - const circuitFile = readFileSync(resolve('artifacts/circuit.json'), 'utf-8'); - const circuit = JSON.parse(circuitFile); - const backend = new UltraHonkBackend(circuit); - // const contract = await backend.acirGetSolidityVerifier(acirComposer); - return { circuit }; -} - -task('compile', 'Compile and generate circuits and contracts').setAction( - async (_, __, runSuper) => { - const { circuit } = await generateArtifacts(); - mkdirSync('artifacts', { recursive: true }); - writeFileSync('artifacts/circuit.json', JSON.stringify(circuit), { flag: 'w' }); - // writeFileSync('artifacts/contract.sol', contract, { flag: 'w' }); - await runSuper(); - }, -); - -task('deploy', 'Deploys the verifier contract') - .addOptionalParam('attach', 'Attach to an existing address', '', types.string) - .setAction(async ({ attach }, hre) => { - let verifier; - if (attach) { - verifier = await hre.viem.getContractAt('UltraVerifier', attach); - } else { - verifier = await hre.viem.deployContract('UltraVerifier'); - } - - const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; - console.log(networkConfig); - const config = { - name: hre.network.name, - address: verifier.address, - networkConfig: { - ...networkConfig, - id: hre.network.config.chainId || networkConfig.id, - }, - }; - - console.log( - `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${config.networkConfig.id}...`, - ); - writeFileSync('artifacts/deployment.json', JSON.stringify(config), { flag: 'w' }); - }); - -subtask('generateHooks', 'Generates hooks for the verifier contract').setAction(async (_, hre) => { - exec('wagmi generate'); -}); - -subtask('prep', 'Compiles and deploys the verifier contract') - .addParam('attach', 'Attach to an already deployed contract', '', types.string) - .setAction(async ({ attach }, hre) => { - console.log('Preparing...'); - console.log('Compiling circuits and generating contracts...'); - - await hre.run('compile'); - await hre.run('deploy', { attach }); - - console.log('Generating hooks...'); - await hre.run('generateHooks'); - }); - -task('dev', 'Deploys and starts in a development environment') - .addOptionalParam('attach', 'Attach to an existing address', '', types.string) - .setAction(async ({ attach }, hre) => { - await hre.run('prep', { attach }); - exec('vite dev'); - }); - -task('build', 'Builds the frontend project') - .addOptionalParam('attach', 'Attach to an existing address', '', types.string) - .setAction(async ({ attach }, hre) => { - await hre.run('prep', { attach }); - exec('vite build'); - }); - -task('serve', 'Serves the frontend project').setAction(async (_, hre) => { - exec('vite preview'); -======= - console.log( - `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${networkConfig.id}...`, - ); - writeFileSync('deployment.json', JSON.stringify(config), { flag: 'w' }); ->>>>>>> main -}); +import { HardhatUserConfig, task, vars } from 'hardhat/config'; const config: HardhatUserConfig = { solidity: { - version: '0.8.21', + version: '0.8.28', settings: { optimizer: { enabled: true, runs: 5000 }, }, @@ -147,13 +32,29 @@ const config: HardhatUserConfig = { accounts: vars.has('holesky') ? [vars.get('holesky')] : [], }, }, - noir: { - version: '0.36.0', - }, paths: { root: 'packages', tests: 'tests', }, }; +task('deploy', 'Deploys the verifier contract').setAction(async (taskArgs, hre) => { + const verifier = await hre.viem.deployContract('HonkVerifier'); + + const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; + const config = { + name: hre.network.name, + address: verifier.address, + networkConfig: { + ...networkConfig, + id: hre.network.config.chainId, + }, + }; + + console.log( + `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${networkConfig.id}...`, + ); + writeFileSync('deployment.json', JSON.stringify(config), { flag: 'w' }); +}); + export default config; diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index fbbe484..04ad9b5 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -13,27 +13,18 @@ }, "type": "module", "devDependencies": { - "hardhat-plugin-noir": "0.1.3", "@types/bun": "^1.1.12", "hardhat": "^2.19.2" }, "dependencies": { - "@aztec/bb.js": "^0.62.0", - "@noir-lang/noir_js": "0.36.0", - "@noir-lang/noir_wasm": "0.36.0", - "@noir-lang/types": "0.36.0", + "@noir-lang/noir_js": "1.0.0-beta.0", + "@noir-lang/noir_wasm": "1.0.0-beta.0", + "@noir-lang/types": "1.0.0-beta.0", + "@aztec/bb.js": "0.63.1", "@nomicfoundation/hardhat-ignition": "^0.15.5", "@nomicfoundation/hardhat-ignition-viem": "^0.15.5", "commander": "^12.1.0", "dotenv": "^16.0.3", -<<<<<<< HEAD - "fflate": "^0.8.2", - "hardhat": "^2.19.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-toastify": "^9.1.1", -======= ->>>>>>> main "shelljs": "^0.8.5", "@nomicfoundation/hardhat-ethers": "^3.0.6", "@nomicfoundation/hardhat-network-helpers": "^1.0.11", @@ -43,7 +34,8 @@ "@types/mocha": "^10.0.1", "@types/shelljs": "^0.8.7", "hardhat-gas-reporter": "^1.0.9", - "solidity-coverage": "^0.8.5" + "solidity-coverage": "^0.8.5", + "hardhat-noirenberg": "^0.1.4" }, "peerDependencies": { "typescript": "^5.0.0" diff --git a/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx b/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx index 3e0f2a3..a11b8a2 100644 --- a/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx +++ b/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx @@ -3,11 +3,11 @@ import { ProofData } from '@noir-lang/types'; import { useEffect } from 'react'; import { toast } from 'react-toastify'; -import { UltraPlonkBackend } from '@aztec/bb.js'; +import { UltraHonkBackend } from '@aztec/bb.js'; import { Noir } from '@noir-lang/noir_js'; export function useOffChainVerification( - backend: UltraPlonkBackend, + backend: UltraHonkBackend, noir?: Noir, proofData?: ProofData, ) { diff --git a/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx b/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx index 56a28df..7facab4 100644 --- a/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx +++ b/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx @@ -4,7 +4,7 @@ import { useAccount, useConnect, useDisconnect, useSwitchChain } from 'wagmi'; import { bytesToHex } from 'viem'; import { useEffect, useState } from 'react'; import { Id, toast } from 'react-toastify'; -import { useReadUltraVerifierVerify } from '../artifacts/generated.js'; +import { useReadHonkVerifierVerify } from '../artifacts/generated.js'; import deployment from '../../../deployment.json'; export function useOnChainVerification(proofData?: ProofData) { @@ -14,7 +14,7 @@ export function useOnChainVerification(proofData?: ProofData) { const [args, setArgs] = useState<[`0x${string}`, `0x${string}`[]] | undefined>(); const { chains, switchChain } = useSwitchChain(); - const { data, error } = useReadUltraVerifierVerify({ + const { data, error } = useReadHonkVerifierVerify({ args, query: { enabled: !!args, diff --git a/vite-hardhat/packages/vite/hooks/useProofGeneration.tsx b/vite-hardhat/packages/vite/hooks/useProofGeneration.tsx index d2d97a9..591a08a 100644 --- a/vite-hardhat/packages/vite/hooks/useProofGeneration.tsx +++ b/vite-hardhat/packages/vite/hooks/useProofGeneration.tsx @@ -24,7 +24,11 @@ export function useProofGeneration(inputs?: { [key: string]: string }) { error: 'Error initializing Noir', }); - const { witness } = await noir.execute(inputs); + const { witness } = await toast.promise(noir.execute(inputs), { + pending: 'Generating witness...', + success: 'Witness generated!', + error: 'Error generating witness', + }); const data = await toast.promise(backend.generateProof(witness), { pending: 'Generating proof', diff --git a/vite-hardhat/packages/vite/index.tsx b/vite-hardhat/packages/vite/index.tsx index 08c8ab1..117b91e 100644 --- a/vite-hardhat/packages/vite/index.tsx +++ b/vite-hardhat/packages/vite/index.tsx @@ -1,11 +1,18 @@ +// @ts-ignore +import acvm from '@noir-lang/acvm_js/web/acvm_js_bg.wasm?url'; +// @ts-ignore +import noirc from '@noir-lang/noirc_abi/web/noirc_abi_wasm_bg.wasm?url'; +import initNoirC from '@noir-lang/noirc_abi'; +import initACVM from '@noir-lang/acvm_js'; +// @ts-ignore +await Promise.all([initACVM(fetch(acvm)), initNoirC(fetch(noirc))]); + import React, { ReactNode, useEffect } from 'react'; import ReactDOM from 'react-dom/client'; import './App.css'; import 'react-toastify/dist/ReactToastify.css'; import { ToastContainer } from 'react-toastify'; import Component from './components/index.jsx'; -import initNoirC from '@noir-lang/noirc_abi'; -import initACVM from '@noir-lang/acvm_js'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { WagmiProvider, createConfig, http } from 'wagmi'; import { defineChain, createClient } from 'viem'; @@ -30,23 +37,6 @@ const config = createConfig({ }, }); -const InitWasm = ({ children }: any) => { - const [init, setInit] = React.useState(false); - useEffect(() => { - (async () => { - await Promise.all([ - initACVM(new URL('@noir-lang/acvm_js/web/acvm_js_bg.wasm', import.meta.url).toString()), - initNoirC( - new URL('@noir-lang/noirc_abi/web/noirc_abi_wasm_bg.wasm', import.meta.url).toString(), - ), - ]); - setInit(true); - })(); - }); - - return
{init && children}
; -}; - export function Providers({ children }: { children: React.ReactNode }) { const [mounted, setMounted] = React.useState(false); React.useEffect(() => setMounted(true), []); @@ -59,9 +49,7 @@ export function Providers({ children }: { children: React.ReactNode }) { ReactDOM.createRoot(document.getElementById('root')!).render( - - - - + + , ); diff --git a/vite-hardhat/packages/vite/package.json b/vite-hardhat/packages/vite/package.json index ff018b0..8d28961 100644 --- a/vite-hardhat/packages/vite/package.json +++ b/vite-hardhat/packages/vite/package.json @@ -7,11 +7,6 @@ "wagmi": "wagmi generate" }, "dependencies": { - "@noir-lang/backend_barretenberg": "0.36.0", - "@noir-lang/noir_js": "0.36.0", - "@noir-lang/noir_wasm": "0.36.0", - "@noir-lang/types": "0.36.0", - "@aztec/bb.js": "^0.62.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-toastify": "^9.1.1", @@ -34,8 +29,5 @@ "typechain": "^8.1.0", "typescript": "^4.9.3", "vite": "^5.0.6" - }, - "engines": { - "node": ">=18.19.0" } } diff --git a/vite-hardhat/packages/vite/vite.config.js b/vite-hardhat/packages/vite/vite.config.js index 7f94dbf..1553b62 100644 --- a/vite-hardhat/packages/vite/vite.config.js +++ b/vite-hardhat/packages/vite/vite.config.js @@ -1,17 +1,10 @@ -import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react-swc'; -export default defineConfig({ +export default { optimizeDeps: { esbuildOptions: { target: 'esnext', }, }, - build: { - target: 'esnext', - }, plugins: [react()], - server: { - port: 1337, - }, -}); +}; diff --git a/vite-hardhat/test/index.test.ts b/vite-hardhat/test/index.test.ts deleted file mode 100644 index 14e2191..0000000 --- a/vite-hardhat/test/index.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { expect } from 'chai'; -import { BarretenbergBackend, UltraHonkBackend } from '@noir-lang/backend_barretenberg'; -import { Noir } from '@noir-lang/noir_js'; - -import { ProofData } from '@noir-lang/types'; -import { readFileSync } from 'fs'; -import { resolve } from 'path'; -import shelljs from 'shelljs'; - -shelljs.exec('npx hardhat compile'); - -describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { - let noir: Noir; - let backend: UltraHonkBackend; - let correctProof: ProofData; - - beforeEach(async () => { - const circuitFile = readFileSync(resolve('circuit/target/noirstarter.json'), 'utf-8'); - const circuit = JSON.parse(circuitFile); - - backend = new UltraHonkBackend(circuit); - noir = new Noir(circuit); - }); - - it('Should generate valid proof for correct input', async () => { - const input = { x: 1, y: 2 }; - // Generate proof - const { witness } = await noir.execute(input); - correctProof = await backend.generateProof(witness); - expect(correctProof.proof instanceof Uint8Array).to.be.true; - }); - - it('Should verify valid proof for correct input', async () => { - const verification = await backend.verifyProof(correctProof); - expect(verification).to.be.true; - }); - - it('Should fail to generate valid proof for incorrect input', async () => { - try { - const input = { x: 1, y: 1 }; - const { witness } = await noir.execute(input); - const incorrectProof = await backend.generateProof(witness); - } catch (err) { - // TODO(Ze): Not sure how detailed we want this it to be - expect(err instanceof Error).to.be.true; - const error = err as Error; - expect(error.message).to.contain('Cannot satisfy constraint'); - } - }); -}); diff --git a/vite-hardhat/tests/index.test.ts b/vite-hardhat/tests/index.test.ts index 6c2cd44..a318162 100644 --- a/vite-hardhat/tests/index.test.ts +++ b/vite-hardhat/tests/index.test.ts @@ -1,25 +1,24 @@ import { expect, beforeAll, describe, test } from 'bun:test'; import { Noir } from '@noir-lang/noir_js'; import { ProofData } from '@noir-lang/types'; -import hre from 'hardhat'; -import { BarretenbergBackend } from '@noir-lang/backend_barretenberg'; -import { bytesToHex } from 'viem'; +import { UltraHonkBackend } from '@aztec/bb.js'; import { execSync } from 'child_process'; +const hre = require('hardhat'); describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { let correctProof: ProofData; let noir: Noir; - let backend: BarretenbergBackend; + let backend: UltraHonkBackend; hre.run('node'); beforeAll(async () => { - ({ noir, backend } = await hre.noir.getCircuit('noirstarter')); + ({ noir, backend } = await hre.noirenberg.compile()); + await hre.noirenberg.getSolidityVerifier(); execSync('npx hardhat compile'); }); test('Should generate valid proof for correct input', async () => { const input = { x: 1, y: 2 }; - // Generate proof const { witness } = await noir.execute(input); correctProof = await backend.generateProof(witness); expect(correctProof.proof instanceof Uint8Array).toBeTrue; @@ -30,14 +29,14 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. expect(verification).toBeTrue; }); - test('Should verify valid proof for correct input on a smart contract', async () => { - const verifier = await hre.viem.deployContract('UltraVerifier'); - const res = await verifier.read.verify([ - bytesToHex(correctProof.proof), - correctProof.publicInputs as `0x${string}`[], - ]); - expect(res).toBeTrue; - }); + // test('Should verify valid proof for correct input on a smart contract', async () => { + // const verifier = await hre.viem.deployContract('HonkVerifier'); + // const res = await verifier.read.verify([ + // bytesToHex(correctProof.proof), + // correctProof.publicInputs as `0x${string}`[], + // ]); + // expect(res).toBeTrue; + // }); test('Should fail to generate valid proof for incorrect input', async () => { try { diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index e92c75c..0000000 --- a/yarn.lock +++ /dev/null @@ -1,453 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@inquirer/core@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-6.0.0.tgz#d44ccd8ae09a4879a78f09cca35bf1ab894b95f4" - integrity sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw== - dependencies: - "@inquirer/type" "^1.1.6" - "@types/mute-stream" "^0.0.4" - "@types/node" "^20.10.7" - "@types/wrap-ansi" "^3.0.0" - ansi-escapes "^4.3.2" - chalk "^4.1.2" - cli-spinners "^2.9.2" - cli-width "^4.1.0" - figures "^3.2.0" - mute-stream "^1.0.0" - run-async "^3.0.0" - signal-exit "^4.1.0" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" - -"@inquirer/input@^1.2.16": - version "1.2.16" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-1.2.16.tgz#94d8765a47689e799fd55ed0361dedc8f554341b" - integrity sha512-Ou0LaSWvj1ni+egnyQ+NBtfM1885UwhRCMtsRt2bBO47DoC1dwtCa+ZUNgrxlnCHHF0IXsbQHYtIIjFGAavI4g== - dependencies: - "@inquirer/core" "^6.0.0" - "@inquirer/type" "^1.1.6" - chalk "^4.1.2" - -"@inquirer/select@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-1.3.3.tgz#7d832ee603c15b706148e47cda29cdf6634cd94b" - integrity sha512-RzlRISXWqIKEf83FDC9ZtJ3JvuK1l7aGpretf41BCWYrvla2wU8W8MTRNMiPrPJ+1SIqrRC1nZdZ60hD9hRXLg== - dependencies: - "@inquirer/core" "^6.0.0" - "@inquirer/type" "^1.1.6" - ansi-escapes "^4.3.2" - chalk "^4.1.2" - figures "^3.2.0" - -"@inquirer/type@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.1.6.tgz#f2656456e58fb93c7b73d5aad583b928c77b9206" - integrity sha512-OCKOpn0CrFDslR8s3who7hlr823zXTb1iShGCaaWgEJFfkIV0T9aLZV2QGnOuU78IrsPYLkr3oKx9dZwwCH3Rw== - -"@types/mute-stream@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" - integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== - dependencies: - "@types/node" "*" - -"@types/node@*", "@types/node@^20.10.7": - version "20.11.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.15.tgz#b853a86cfedbc768360c552b4653302b4e7417bf" - integrity sha512-gscmuADZfvNULx1eyirVbr3kVOVZtpQtzKMCZpeSZcN6MfbkRXAR4s9/gsQ4CzxLHw6EStDtKLNtSDL3vbq05A== - dependencies: - undici-types "~5.26.4" - -"@types/wrap-ansi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" - integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -cli-spinners@^2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - -commander@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" - integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -debug@4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -fs-extra@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fuzzysearch@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fuzzysearch/-/fuzzysearch-1.0.3.tgz#dffc80f6d6b04223f2226aa79dd194231096d008" - integrity sha512-s+kNWQuI3mo9OALw0HJ6YGmMbLqEufCh2nX/zzV5CrICQ/y4AwPxM+6TIiF9ItFCHXFCyM/BfCCmN57NTIJuPg== - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -https-proxy-agent@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mri@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" - integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -rimraf@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-async@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" - integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== - -signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -tar@^6.1.11: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tiged@^2.12.6: - version "2.12.6" - resolved "https://registry.yarnpkg.com/tiged/-/tiged-2.12.6.tgz#fe309738e8e2c10f58a739dc5618af0c496212bd" - integrity sha512-1p71OICYSdP7qE2RNSBQcf83Cp8oRAdoK8VQxDjZA7V11NlWW4dkSzHGrudeji7jc0F1Z9gNqZELxRVIFSLbwQ== - dependencies: - colorette "1.2.1" - enquirer "2.3.6" - fs-extra "10.1.0" - fuzzysearch "1.0.3" - https-proxy-agent "5.0.0" - mri "1.1.6" - rimraf "3.0.2" - tar "^6.1.11" - tiny-glob "0.2.8" - -tiny-glob@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.8.tgz#b2792c396cc62db891ffa161fe8b33e76123e531" - integrity sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 91001e3afaac5bdcf98d2e38cbdf252d862332f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Wed, 18 Dec 2024 12:39:28 +0000 Subject: [PATCH 06/11] removing drift test from PR workflow --- .github/workflows/vite_hardhat_nightly.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/vite_hardhat_nightly.yaml b/.github/workflows/vite_hardhat_nightly.yaml index 3c177ae..44de066 100644 --- a/.github/workflows/vite_hardhat_nightly.yaml +++ b/.github/workflows/vite_hardhat_nightly.yaml @@ -6,9 +6,6 @@ on: schedule: # Run a nightly release at 2 AM UTC - cron: '0 2 * * *' - pull_request: - paths: - - 'vite-hardhat/**' jobs: vite-hardhat-setup: From 635600d6e6bfdaba642a47ba8f24006848cb4fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Wed, 18 Dec 2024 17:13:40 +0000 Subject: [PATCH 07/11] bump plugin version --- vite-hardhat/README.md | 2 +- vite-hardhat/bun.lockb | Bin 417796 -> 0 bytes vite-hardhat/package.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100755 vite-hardhat/bun.lockb diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index 5ead2c3..0436238 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -23,7 +23,7 @@ Want to get started in a pinch? Start your project in a free Github Codespace! 2. Install dependencies: ```bash - bun i # "npm i" or "yarn" + bun i ``` 3. Run a node diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb deleted file mode 100755 index 0c9481d8ad7f16c16b4aa17e60bea497fea571ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417796 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�X 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

;==tOVqUVzfh@MX_AbLKz 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 diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index 04ad9b5..90278ca 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -35,7 +35,7 @@ "@types/shelljs": "^0.8.7", "hardhat-gas-reporter": "^1.0.9", "solidity-coverage": "^0.8.5", - "hardhat-noirenberg": "^0.1.4" + "hardhat-noirenberg": "^0.1.5" }, "peerDependencies": { "typescript": "^5.0.0" From b09929e4a5d1ed5ee0abec7cc38ad56a80c04370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 19 Dec 2024 16:06:09 +0000 Subject: [PATCH 08/11] parametrizable ultraplonk/ultrahonk --- vite-hardhat/README.md | 2 +- vite-hardhat/hardhat.config.cts | 50 ++++++++++------ vite-hardhat/package.json | 12 ++-- .../vite/hooks/useOffChainVerification.tsx | 4 +- .../vite/hooks/useOnChainVerification.tsx | 4 +- .../tests/{index.test.ts => uh.test.ts} | 27 ++++----- vite-hardhat/tests/up.test.ts | 60 +++++++++++++++++++ 7 files changed, 116 insertions(+), 43 deletions(-) rename vite-hardhat/tests/{index.test.ts => uh.test.ts} (67%) create mode 100644 vite-hardhat/tests/up.test.ts diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index 0436238..39d34b3 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -32,7 +32,7 @@ Want to get started in a pinch? Start your project in a free Github Codespace! bunx hardhat node ``` -4. Deploy the verifier contract +4. Deploy the verifier contract (UltraPlonk) ```bash bun run deploy diff --git a/vite-hardhat/hardhat.config.cts b/vite-hardhat/hardhat.config.cts index 07076f4..6570d04 100644 --- a/vite-hardhat/hardhat.config.cts +++ b/vite-hardhat/hardhat.config.cts @@ -5,7 +5,10 @@ import 'hardhat-noirenberg'; import { writeFileSync } from 'fs'; import { Chain } from 'viem'; -import { HardhatUserConfig, task, vars } from 'hardhat/config'; +import { task, vars } from 'hardhat/config'; +import { HardhatUserConfig } from 'hardhat/types/config'; +import fs from 'fs'; +import { resolve } from 'path'; const config: HardhatUserConfig = { solidity: { @@ -38,23 +41,36 @@ const config: HardhatUserConfig = { }, }; -task('deploy', 'Deploys the verifier contract').setAction(async (taskArgs, hre) => { - const verifier = await hre.viem.deployContract('HonkVerifier'); +task('deploy', 'Deploys a verifier contract') + .addOptionalPositionalParam('provingSystem') + .setAction(async (taskArgs, hre) => { + const contractsDir = resolve('packages', 'contracts'); + if (fs.existsSync(contractsDir)) fs.rmdirSync(contractsDir, { recursive: true }); - const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; - const config = { - name: hre.network.name, - address: verifier.address, - networkConfig: { - ...networkConfig, - id: hre.network.config.chainId, - }, - }; + hre.config.noirenberg = { provingSystem: taskArgs.provingSystem || 'UltraPlonk' }; + await hre.run('compile'); + + let verifier; + if (taskArgs.provingSystem === 'UltraHonk') { + verifier = await hre.viem.deployContract('HonkVerifier'); + } else { + verifier = await hre.viem.deployContract('UltraVerifier'); + } + + const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; + const config = { + name: hre.network.name, + address: verifier.address, + networkConfig: { + ...networkConfig, + id: hre.network.config.chainId, + }, + }; - console.log( - `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${networkConfig.id}...`, - ); - writeFileSync('deployment.json', JSON.stringify(config), { flag: 'w' }); -}); + console.log( + `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${networkConfig.id}...`, + ); + writeFileSync('deployment.json', JSON.stringify(config), { flag: 'w' }); + }); export default config; diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index 90278ca..8296f5a 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -6,9 +6,11 @@ "packages/*" ], "scripts": { - "deploy": "bunx hardhat compile && bunx hardhat deploy", + "deploy": "bunx hardhat deploy", "dev": "bun --filter vite dev", - "test:hardhat": "bunx hardhat test", + "test:up": "bun test ./tests/up.test.ts", + "test:uh": "bun test ./tests/uh.test.ts", + "test": "bun test:up && bun test:uh", "node": "bunx hardhat node" }, "type": "module", @@ -35,9 +37,7 @@ "@types/shelljs": "^0.8.7", "hardhat-gas-reporter": "^1.0.9", "solidity-coverage": "^0.8.5", - "hardhat-noirenberg": "^0.1.5" - }, - "peerDependencies": { - "typescript": "^5.0.0" + "hardhat-noirenberg": "0.2.0", + "typescript": "^5.6.3" } } diff --git a/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx b/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx index a11b8a2..3e0f2a3 100644 --- a/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx +++ b/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx @@ -3,11 +3,11 @@ import { ProofData } from '@noir-lang/types'; import { useEffect } from 'react'; import { toast } from 'react-toastify'; -import { UltraHonkBackend } from '@aztec/bb.js'; +import { UltraPlonkBackend } from '@aztec/bb.js'; import { Noir } from '@noir-lang/noir_js'; export function useOffChainVerification( - backend: UltraHonkBackend, + backend: UltraPlonkBackend, noir?: Noir, proofData?: ProofData, ) { diff --git a/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx b/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx index 7facab4..56a28df 100644 --- a/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx +++ b/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx @@ -4,7 +4,7 @@ import { useAccount, useConnect, useDisconnect, useSwitchChain } from 'wagmi'; import { bytesToHex } from 'viem'; import { useEffect, useState } from 'react'; import { Id, toast } from 'react-toastify'; -import { useReadHonkVerifierVerify } from '../artifacts/generated.js'; +import { useReadUltraVerifierVerify } from '../artifacts/generated.js'; import deployment from '../../../deployment.json'; export function useOnChainVerification(proofData?: ProofData) { @@ -14,7 +14,7 @@ export function useOnChainVerification(proofData?: ProofData) { const [args, setArgs] = useState<[`0x${string}`, `0x${string}`[]] | undefined>(); const { chains, switchChain } = useSwitchChain(); - const { data, error } = useReadHonkVerifierVerify({ + const { data, error } = useReadUltraVerifierVerify({ args, query: { enabled: !!args, diff --git a/vite-hardhat/tests/index.test.ts b/vite-hardhat/tests/uh.test.ts similarity index 67% rename from vite-hardhat/tests/index.test.ts rename to vite-hardhat/tests/uh.test.ts index a318162..c213fcb 100644 --- a/vite-hardhat/tests/index.test.ts +++ b/vite-hardhat/tests/uh.test.ts @@ -2,19 +2,26 @@ import { expect, beforeAll, describe, test } from 'bun:test'; import { Noir } from '@noir-lang/noir_js'; import { ProofData } from '@noir-lang/types'; import { UltraHonkBackend } from '@aztec/bb.js'; -import { execSync } from 'child_process'; -const hre = require('hardhat'); +import fs from 'fs'; +import { resolve } from 'path'; -describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { +describe('UltraHonk', () => { let correctProof: ProofData; let noir: Noir; let backend: UltraHonkBackend; - hre.run('node'); beforeAll(async () => { + const contractsDir = resolve('packages', 'contracts'); + if (fs.existsSync(contractsDir)) fs.rmdirSync(contractsDir, { recursive: true }); + + const hre = require('hardhat'); + + hre.run('node'); + hre.config.noirenberg = { provingSystem: 'UltraHonk' }; + + console.log(hre); ({ noir, backend } = await hre.noirenberg.compile()); await hre.noirenberg.getSolidityVerifier(); - execSync('npx hardhat compile'); }); test('Should generate valid proof for correct input', async () => { @@ -29,22 +36,12 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. expect(verification).toBeTrue; }); - // test('Should verify valid proof for correct input on a smart contract', async () => { - // const verifier = await hre.viem.deployContract('HonkVerifier'); - // const res = await verifier.read.verify([ - // bytesToHex(correctProof.proof), - // correctProof.publicInputs as `0x${string}`[], - // ]); - // expect(res).toBeTrue; - // }); - test('Should fail to generate valid proof for incorrect input', async () => { try { const input = { x: 1, y: 1 }; const { witness } = await noir.execute(input); const incorrectProof = await backend.generateProof(witness); } catch (err) { - // TODO(Ze): Not sure how detailed we want this it to be expect(err instanceof Error).toBeTrue; const error = err as Error; expect(error.message).toContain('Cannot satisfy constraint'); diff --git a/vite-hardhat/tests/up.test.ts b/vite-hardhat/tests/up.test.ts new file mode 100644 index 0000000..5a95095 --- /dev/null +++ b/vite-hardhat/tests/up.test.ts @@ -0,0 +1,60 @@ +import { expect, beforeAll, describe, test } from 'bun:test'; +import { Noir } from '@noir-lang/noir_js'; +import { ProofData } from '@noir-lang/types'; +import { UltraPlonkBackend } from '@aztec/bb.js'; +import fs from 'fs'; +import { resolve } from 'path'; +import { bytesToHex } from 'viem'; + +describe('UltraPlonk', () => { + let correctProof: ProofData; + let noir: Noir; + let backend: UltraPlonkBackend; + + beforeAll(async () => { + const contractsDir = resolve('packages', 'contracts'); + if (fs.existsSync(contractsDir)) fs.rmdirSync(contractsDir, { recursive: true }); + + const hre = require('hardhat'); + hre.run('node'); + hre.config.noirenberg = { provingSystem: 'UltraPlonk' }; + + ({ noir, backend } = await hre.noirenberg.compile()); + await hre.noirenberg.getSolidityVerifier(); + }); + + test('Should generate valid proof for correct input', async () => { + const input = { x: 1, y: 2 }; + const { witness } = await noir.execute(input); + correctProof = await backend.generateProof(witness); + expect(correctProof.proof instanceof Uint8Array).toBeTrue; + }); + + test('Should verify valid proof for correct input', async () => { + const verification = await backend.verifyProof(correctProof); + expect(verification).toBeTrue; + }); + + test('Should verify valid proof for correct input on a smart contract', async () => { + const hre = require('hardhat'); + + const verifier = await hre.viem.deployContract('UltraVerifier'); + const res = await verifier.read.verify([ + bytesToHex(correctProof.proof), + correctProof.publicInputs as `0x${string}`[], + ]); + expect(res).toBeTrue; + }); + + test('Should fail to generate valid proof for incorrect input', async () => { + try { + const input = { x: 1, y: 1 }; + const { witness } = await noir.execute(input); + const incorrectProof = await backend.generateProof(witness); + } catch (err) { + expect(err instanceof Error).toBeTrue; + const error = err as Error; + expect(error.message).toContain('Cannot satisfy constraint'); + } + }); +}); From 3ef4cc24e1805166492029c7580da14522602e3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 19 Dec 2024 16:07:52 +0000 Subject: [PATCH 09/11] nit --- vite-hardhat/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index 39d34b3..183c6a4 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -49,11 +49,17 @@ Want to get started in a pinch? Start your project in a free Github Codespace! You can run the [example test file](./test/index.test.ts) with ```bash -bun test +bun run test ``` This test shows the basic usage of Noir in a TypeScript Node.js environment. It also starts its own network and deploys the verifier contract. +If you want to test only `UltraHonk`, you can run: + +```bash +bun run test UltraHonk +``` + ### Deploying on other networks The default scripting targets a local environment. For convenience, we added some configurations for From 0cb6ab45320359e6187cd9acadacbf5d505347ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 19 Dec 2024 16:09:46 +0000 Subject: [PATCH 10/11] ci --- .github/workflows/vite_hardhat.yaml | 2 +- .github/workflows/vite_hardhat_nightly.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/vite_hardhat.yaml b/.github/workflows/vite_hardhat.yaml index fe955fa..8d578f8 100644 --- a/.github/workflows/vite_hardhat.yaml +++ b/.github/workflows/vite_hardhat.yaml @@ -33,4 +33,4 @@ jobs: run: bunx hardhat compile - name: Run tests - run: bun test + run: bun run test diff --git a/.github/workflows/vite_hardhat_nightly.yaml b/.github/workflows/vite_hardhat_nightly.yaml index 44de066..d0f088a 100644 --- a/.github/workflows/vite_hardhat_nightly.yaml +++ b/.github/workflows/vite_hardhat_nightly.yaml @@ -83,7 +83,7 @@ jobs: run: bunx hardhat compile - name: Run tests - run: bun test + run: bun run test - name: Send GitHub Action trigger data to Slack workflow - Stable uses: slackapi/slack-github-action@v1.24.0 From 9e36f23349beced1ea20dca39ba14d5a537d3acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 19 Dec 2024 23:05:51 +0000 Subject: [PATCH 11/11] nit --- vite-hardhat/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index 183c6a4..c4a93f8 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -57,7 +57,7 @@ This test shows the basic usage of Noir in a TypeScript Node.js environment. It If you want to test only `UltraHonk`, you can run: ```bash -bun run test UltraHonk +bun run test:uh ``` ### Deploying on other networks