diff --git a/.github/workflows/ci-build-and-test.yml b/.github/workflows/ci-build-and-test.yml index e48fbd8..93a1210 100644 --- a/.github/workflows/ci-build-and-test.yml +++ b/.github/workflows/ci-build-and-test.yml @@ -39,7 +39,10 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: '18.x' + node-version: '20.x' + + - name: Use npm 11.6.2 + run: npm i -g npm@11.6.2 - name: Install dependencies run: npm ci diff --git a/DOCS.md b/DOCS.md index 33240f7..f952f39 100644 --- a/DOCS.md +++ b/DOCS.md @@ -72,10 +72,22 @@ session.verify().ultraplonk({ session.verify().sp1().execute({...}) ``` +### EZKL + +```typescript +session.verify().ezkl().execute({...}) +``` + ### UltraHonk +Supports variants: `Plain`, `ZK` + +**Note for v1.3.0+**: The `variant` option is required for runtime version 1.3.0 or later. + ```typescript -session.verify().ultrahonk().execute({...}) +session.verify().ultrahonk({ + variant: UltrahonkVariant.Plain +}).execute({...}) ``` ### Runtime Versions and Network Compatibility diff --git a/README.md b/README.md index bb6592a..fc4447b 100755 --- a/README.md +++ b/README.md @@ -63,9 +63,20 @@ session.verify().ultraplonk({ session.verify().sp1().execute({...}) ``` +### EZKL +```typescript +session.verify().ezkl().execute({...}) +``` + ### UltraHonk +Supports variants: `Plain`, `ZK` + +**Note for v1.3.0+**: The `variant` option is required for runtime version 1.3.0 or later. + ```typescript -session.verify().ultrahonk().execute({...}) +session.verify().ultrahonk({ + variant: UltrahonkVariant.Plain +}).execute({...}) ``` ## Runtime Versions and Network Compatibility diff --git a/package-lock.json b/package-lock.json index 661a285..62ccbf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zkverifyjs", - "version": "1.3.0", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zkverifyjs", - "version": "1.3.0", + "version": "2.0.0", "license": "GPL-3.0", "dependencies": { "@polkadot/api": "16.2.2", @@ -185,6 +185,7 @@ "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -2549,17 +2550,6 @@ "scale-ts": "^1.6.0" } }, - "node_modules/@polkadot-api/substrate-client": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", - "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", - "license": "MIT", - "optional": true, - "dependencies": { - "@polkadot-api/json-rpc-provider": "0.0.1", - "@polkadot-api/utils": "0.1.0" - } - }, "node_modules/@polkadot-api/utils": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", @@ -2572,6 +2562,7 @@ "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-16.2.2.tgz", "integrity": "sha512-tTXdmXNKwy9EtmoktBuTig2EdsmtDyOrdR1Bk5WREJ/SElg99bl32GSwAbFG7mSYwdDWfRctQa3Hu2kvfb4CLw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@polkadot/api-augment": "16.2.2", "@polkadot/api-base": "16.2.2", @@ -2880,6 +2871,7 @@ "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.5.2.tgz", "integrity": "sha512-GcUzHnyp5q6+LMvoqi+5MA8br4c5XuDPqAUpAaTR/YCSL+e1/QAIswX1rRBp446rUmXeAxHbaL6LYYI/CUV0Bw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@polkadot/x-bigint": "13.5.2", "@polkadot/x-global": "13.5.2", @@ -3065,6 +3057,7 @@ "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.2.tgz", "integrity": "sha512-7D213nRxwUci+7IdIh6X8KVX82hY57SeAXf7De9U/ixOMhl/fXITs6h+aJaue5428pit+O27yZJRgxtcB8Kgmw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@polkadot/x-global": "13.5.2", "tslib": "^2.8.0" @@ -3601,6 +3594,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.32.tgz", "integrity": "sha512-zeMXFn8zQ+UkjK4ws0RiOC9EWByyW1CcVmLe+2rQocXRsGEDxUCwPEIVgpsGcLHS/P8JkT0oa3839BRABS0oPw==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.19.2" } @@ -3704,6 +3698,7 @@ "integrity": "sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.31.1", "@typescript-eslint/types": "8.31.1", @@ -3934,6 +3929,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4619,6 +4615,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", @@ -5377,6 +5374,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz", "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==", "dev": true, + "peer": true, "dependencies": { "meow": "^13.0.0" }, @@ -6060,15 +6058,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -6310,6 +6299,7 @@ "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -6370,6 +6360,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -7556,23 +7547,6 @@ } } }, - "node_modules/git-semver-tags/node_modules/conventional-commits-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz", - "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "meow": "^13.0.0" - }, - "bin": { - "conventional-commits-parser": "dist/cli/index.js" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/git-semver-tags/node_modules/meow": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", @@ -8764,6 +8738,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -12351,6 +12326,7 @@ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -13153,6 +13129,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -13567,16 +13544,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/smoldot": { - "version": "2.0.26", - "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", - "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", - "license": "GPL-3.0-or-later WITH Classpath-exception-2.0", - "optional": true, - "dependencies": { - "ws": "^8.8.1" - } - }, "node_modules/snarkjs": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/snarkjs/-/snarkjs-0.7.5.tgz", @@ -14268,6 +14235,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -14506,6 +14474,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15393,6 +15362,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -15490,6 +15460,7 @@ "version": "3.23.8", "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index ffdaa8c..568b1c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zkverifyjs", - "version": "1.3.0", + "version": "2.0.0", "description": "Submit proofs to zkVerify and query proof state with ease using our npm package.", "author": "zkVerify ", "license": "GPL-3.0", @@ -67,6 +67,7 @@ "blockchain", "crypto", "cryptography", + "ezkl", "fflonk", "groth16", "javascript", diff --git a/src/config/index.ts b/src/config/index.ts index a07e192..be33af9 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -3,8 +3,10 @@ import { Library, Plonky2HashFunction, Risc0Version, + UltrahonkVariant, } from '../enums'; import { + EZKLProcessor, FflonkProcessor, Groth16Processor, Plonky2Processor, @@ -48,6 +50,7 @@ export const SupportedNetworkConfig: Record = { }; export enum ProofType { + ezkl = 'ezkl', fflonk = 'fflonk', groth16 = 'groth16', plonky2 = 'plonky2', @@ -64,6 +67,10 @@ export interface ProofConfig { } export const proofConfigurations: Record = { + [ProofType.ezkl]: { + pallet: 'settlementEzklPallet', + processor: EZKLProcessor, + }, [ProofType.fflonk]: { pallet: 'settlementFFlonkPallet', processor: FflonkProcessor, @@ -97,7 +104,12 @@ export const proofConfigurations: Record = { export interface ProofOptions { proofType: ProofType; - config?: Groth16Config | Plonky2Config | Risc0Config | UltraplonkConfig; // ADD_NEW_PROOF_TYPE + config?: + | Groth16Config + | Plonky2Config + | Risc0Config + | UltraplonkConfig + | UltrahonkConfig; // ADD_NEW_PROOF_TYPE } export interface Groth16Config { @@ -117,11 +129,16 @@ export interface UltraplonkConfig { numberOfPublicInputs: number; } +export interface UltrahonkConfig { + variant: UltrahonkVariant; +} + export type AllProofConfigs = | Groth16Config | Plonky2Config | Risc0Config | UltraplonkConfig + | UltrahonkConfig | undefined; // ADD_NEW_PROOF_TYPE - options if needed. @@ -151,6 +168,9 @@ export const zkvTypes = { config: 'Plonky2Config', bytes: 'Bytes', }, + EzklVk: { + vkBytes: 'Bytes', + }, }; export const zkvRpc = { @@ -249,6 +269,16 @@ export const zkvRpc = { ], type: 'H256', }, + ezkl: { + description: 'Get the hash of an Ezkl verification key artifact', + params: [ + { + name: 'vk', + type: 'EzklVK', + }, + ], + type: 'H256', + }, // ADD_NEW_PROOF_TYPE }, }; diff --git a/src/enums.ts b/src/enums.ts index 1b9b479..3c66054 100644 --- a/src/enums.ts +++ b/src/enums.ts @@ -45,6 +45,11 @@ export enum Risc0Version { V3_0 = 'V3_0', } +export enum UltrahonkVariant { + Plain = 'Plain', + ZK = 'ZK', +} + export enum Plonky2HashFunction { Keccak = 'Keccak', Poseidon = 'Poseidon', diff --git a/src/index.ts b/src/index.ts index 1f50b54..5c59d88 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,12 +17,14 @@ export { Plonky2Config, Risc0Config, UltraplonkConfig, + UltrahonkConfig, } from './config'; export { ZkVerifyEvents, TransactionStatus, TransactionType, Risc0Version, + UltrahonkVariant, AggregateSecurityRules, Destination, Library, diff --git a/src/proofTypes/ezkl/formatter/index.ts b/src/proofTypes/ezkl/formatter/index.ts new file mode 100644 index 0000000..9bc2bfe --- /dev/null +++ b/src/proofTypes/ezkl/formatter/index.ts @@ -0,0 +1,28 @@ +import { EZKLProof, EZKLVk, EZKLPubs } from '../types'; + +export function formatProof(proof: EZKLProof['proof']): string { + return validateHexString(proof); +} + +export function formatVk(vk: EZKLVk['vk']): { vkBytes: string } { + if (typeof vk !== 'object' || vk === null || !('vkBytes' in vk)) { + throw new Error( + 'Invalid EZKL VK format: expected object with vkBytes property', + ); + } + + const vkBytes = validateHexString(vk.vkBytes); + + return { vkBytes }; +} + +export function formatPubs(pubs: EZKLPubs['pubs']): string[] { + return pubs.map(validateHexString); +} + +function validateHexString(input: string): string { + if (!input.startsWith('0x')) { + throw new Error('Invalid format: string input must be 0x-prefixed.'); + } + return input; +} diff --git a/src/proofTypes/ezkl/processor/index.ts b/src/proofTypes/ezkl/processor/index.ts new file mode 100644 index 0000000..577eabd --- /dev/null +++ b/src/proofTypes/ezkl/processor/index.ts @@ -0,0 +1,19 @@ +import { ProofProcessor } from '../../../types'; +import { EZKLPubs, EZKLVk } from '../types'; +import * as formatter from '../formatter'; + +class EZKLProcessor implements ProofProcessor { + formatProof(proof: string): string { + return formatter.formatProof(proof); + } + + formatVk(vk: EZKLVk['vk']): { vkBytes: string } { + return formatter.formatVk(vk); + } + + formatPubs(pubs: EZKLPubs['pubs']): string[] { + return formatter.formatPubs(pubs); + } +} + +export default new EZKLProcessor(); diff --git a/src/proofTypes/ezkl/types.ts b/src/proofTypes/ezkl/types.ts new file mode 100644 index 0000000..9add70d --- /dev/null +++ b/src/proofTypes/ezkl/types.ts @@ -0,0 +1,11 @@ +export interface EZKLProof { + proof: string; +} + +export interface EZKLVk { + vk: { vkBytes: string }; +} + +export interface EZKLPubs { + pubs: string[]; +} diff --git a/src/proofTypes/index.ts b/src/proofTypes/index.ts index 0b49d45..2c669a1 100644 --- a/src/proofTypes/index.ts +++ b/src/proofTypes/index.ts @@ -1,3 +1,4 @@ +export { default as EZKLProcessor } from './ezkl/processor'; export { default as FflonkProcessor } from './fflonk/processor'; export { default as Groth16Processor } from './groth16/processor'; export { default as Risc0Processor } from './risc0/processor'; diff --git a/src/proofTypes/ultrahonk/processor/index.ts b/src/proofTypes/ultrahonk/processor/index.ts index 9c4900e..7085eee 100644 --- a/src/proofTypes/ultrahonk/processor/index.ts +++ b/src/proofTypes/ultrahonk/processor/index.ts @@ -1,10 +1,21 @@ import { ProofProcessor } from '../../../types'; import { UltraHonkVk, UltraHonkPubs, UltraHonkProof } from '../types'; import * as formatter from '../formatter'; +import { ProofOptions } from '../../../config'; +import { isUltrahonkConfig } from '../../../utils/helpers'; class UltraHonkProcessor implements ProofProcessor { - formatProof(proof: UltraHonkProof['proof']): string { - return formatter.formatProof(proof); + formatProof( + proof: UltraHonkProof['proof'], + options: ProofOptions, + ): Record | string { + const formattedProof = formatter.formatProof(proof); + + if (isUltrahonkConfig(options)) { + return { [options.config.variant]: formattedProof }; + } + + return formattedProof; } formatVk(vk: UltraHonkVk['vk']): string { diff --git a/src/session/managers/register/index.ts b/src/session/managers/register/index.ts index 88f1b27..1c8cc9a 100644 --- a/src/session/managers/register/index.ts +++ b/src/session/managers/register/index.ts @@ -35,7 +35,10 @@ export class VerificationKeyRegistrationManager { config: proofConfig || {}, } as ProofOptions; - validateProofTypeOptions(proofOptions); + validateProofTypeOptions( + proofOptions, + this.connectionManager.connectionDetails.runtimeSpec, + ); return this.createRegisterKeyBuilder(proofOptions, accountAddress); }, diff --git a/src/session/managers/verification/index.ts b/src/session/managers/verification/index.ts index 198d6dc..8b6c9fd 100644 --- a/src/session/managers/verification/index.ts +++ b/src/session/managers/verification/index.ts @@ -56,7 +56,10 @@ export class VerificationManager { config: proofConfig ?? undefined, }; - validateProofTypeOptions(proofOptions); + validateProofTypeOptions( + proofOptions, + this.connectionManager.connectionDetails.runtimeSpec, + ); return this.createVerifyBuilder(proofOptions, accountAddress); }, @@ -89,7 +92,10 @@ export class VerificationManager { config: proofConfig ?? undefined, }; - validateProofTypeOptions(proofOptions); + validateProofTypeOptions( + proofOptions, + this.connectionManager.connectionDetails.runtimeSpec, + ); return this.createOptimisticVerifyBuilder( proofOptions, @@ -126,7 +132,10 @@ export class VerificationManager { config: proofConfig ?? undefined, }; - validateProofTypeOptions(proofOptions); + validateProofTypeOptions( + proofOptions, + this.connectionManager.connectionDetails.runtimeSpec, + ); return this.createBatchVerifyBuilder(proofOptions, accountAddress); }, @@ -161,7 +170,10 @@ export class VerificationManager { config: proofConfig ?? undefined, }; - validateProofTypeOptions(proofOptions); + validateProofTypeOptions( + proofOptions, + this.connectionManager.connectionDetails.runtimeSpec, + ); return this.createBatchOptimisticVerifyBuilder( proofOptions, diff --git a/src/session/types.ts b/src/session/types.ts index 319bb0f..f662f50 100644 --- a/src/session/types.ts +++ b/src/session/types.ts @@ -4,6 +4,7 @@ import { ProofOptions, Risc0Config, UltraplonkConfig, + UltrahonkConfig, } from '../config'; import { BatchOptimisticVerificationBuilder } from './builders/batchOptimisticVerify'; @@ -37,12 +38,13 @@ export interface OptimisticVerifyOptions extends VerifyOptions { } type GenericProofMethodMap = { + ezkl: () => TBuilder; fflonk: () => TBuilder; groth16: (options: Groth16Config) => TBuilder; plonky2: (options: Plonky2Config) => TBuilder; risc0: (options: Risc0Config) => TBuilder; sp1: () => TBuilder; - ultrahonk: () => TBuilder; + ultrahonk: (options?: UltrahonkConfig | null) => TBuilder; ultraplonk: (options: UltraplonkConfig) => TBuilder; // ADD_NEW_PROOF_TYPE }; diff --git a/src/session/validator/index.ts b/src/session/validator/index.ts index 643643b..3416c46 100644 --- a/src/session/validator/index.ts +++ b/src/session/validator/index.ts @@ -4,13 +4,23 @@ import { isPlonky2Config, isRisc0Config, isUltraplonkConfig, + isUltrahonkConfig, + isVersionAtLeast, + requireVersionAtLeast, } from '../../utils/helpers'; +import { RuntimeSpec } from '../../types'; +import { RuntimeVersion } from '../../enums'; /** * Validates the options provided for a given proof type. + * @param options - The proof options to validate. + * @param runtimeSpec - Runtime spec for version-dependent validation. * @throws {Error} - If the validation fails. */ -export function validateProofTypeOptions(options: ProofOptions): void { +export function validateProofTypeOptions( + options: ProofOptions, + runtimeSpec: RuntimeSpec, +): void { const { proofType } = options; if (!proofType) { @@ -49,12 +59,28 @@ export function validateProofTypeOptions(options: ProofOptions): void { ); } break; + case ProofType.ultrahonk: + if (isVersionAtLeast(runtimeSpec, RuntimeVersion.V1_3_0)) { + if (!isUltrahonkConfig(options)) { + throw new Error( + `Proof type '${proofType}' requires a 'variant' option for runtime version 1.3.0 or later.`, + ); + } + } + break; + case ProofType.ezkl: + requireVersionAtLeast( + runtimeSpec, + RuntimeVersion.V1_3_0, + 'EZKL proof type', + ); + break; case ProofType.fflonk: case ProofType.sp1: - case ProofType.ultrahonk: // No specific options required for these proof types break; - //ADD_NEW_PROOF_TYPE config validation per proof type + // ADD_NEW_PROOF_TYPE config validation per proof type + // ADD RUNTIME SPECIFIC RULE IF NEEDED USING requireVersionAtLeast default: void (options as never); diff --git a/src/utils/helpers/index.ts b/src/utils/helpers/index.ts index 974d7a0..013f59c 100644 --- a/src/utils/helpers/index.ts +++ b/src/utils/helpers/index.ts @@ -17,6 +17,7 @@ import { ProofType, Risc0Config, UltraplonkConfig, + UltrahonkConfig, } from '../../config'; import { decodeDispatchError } from '../transactions/errors'; import { DispatchError, Extrinsic } from '@polkadot/types/interfaces'; @@ -413,6 +414,19 @@ export function isUltraplonkConfig( ); } +/** + * Type guard for Ultrahonk Config + */ +export function isUltrahonkConfig( + options: ProofOptions, +): options is ProofOptions & { config: UltrahonkConfig } { + return ( + options.proofType === ProofType.ultrahonk && + options.config !== undefined && + (options.config as UltrahonkConfig).variant !== undefined + ); +} + // ADD_NEW_PROOF_TYPE if it has a config options object /** diff --git a/tests/common/data/ezkl.json b/tests/common/data/ezkl.json new file mode 100644 index 0000000..461094a --- /dev/null +++ b/tests/common/data/ezkl.json @@ -0,0 +1,18 @@ +{ + "vk": { + "vkBytes": "0x1abcc45e56c2df669a0596bbb1d0ee6531ebc7fa9d8cb41846ce8cc54d93c1b60000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3058355f447953c1ade231a513e0f80710e9db4e679b02351f90fd168b0400012ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e315f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb26000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa2f8e652280f8c500fc23c968184f5e3987f05667cda546dc6845943d31448531051066118c2330646f0d65cbcd0b0a62d1aaf7becc02d6c86cd3b161fe319c821e61d3972a3de93e9ad158dbfba9609f4490b4cafd7a4e57464b09721a61ca1c1d5f6b6c3b72fa36b47eb010d84563eca6d6a36801eb6fb3e3c6ef2a0e3489460000000000000000000000000000000000000000000000000000000000000284000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000007e00000000000000000000000000000000000000000000000000000000000000a2000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000100c00100c00300c00115dd0e03f41c62ccbad833df473cba6b5af870a952c3a13e5be32809fddce8b126394bb51bef9d2a6e459ea389af8ec423fb337c6631d59570e84229dd28ac4e100a0698adbf7ee8b14c1dcdd47529e325530897cf1c45783f5fac2f0ae7f1bd212ff0db9d188c4e172f0a4aaa2bd9bad257c60e35faa5ded99c65d93bd3567f0ca0ad078b98bd5ca247a48ab0d2a80580b944cd5899a02c031c1816a7d1318f1a5cdc7107d5085307af6feecedcb36b6a37e1191397ba5d741d7d380df9a63f0e7548efb5ce693c1684636202f62a51069c482d2582f3bc7662497799bf96e1217874e4cd0b72ff87cdb674e315b3e6cc4cea4bf85315ef4ffddf0ae57264972a926e5e8da4201d98062bd8137a61c2d882da98c30d01c5b7f0104b7b7369e02642c2f9873e56a7be324b85773aeacbfc8fdab206490d9cff0ea70cccda8b670e6c11454c29b3b157b2bbf98f010bb3f07dd2c14448662def79f8e80d1a5c0b2aac4afb55e8d6fd09226e61844185f48fe121e3cf2b1ec6bc1c10dbe1c891632ea430b5f88571e750709d232b07a772a2d17e326e85d1c261cdb45f60f445a308d5a1756e19075b303af6b7677a7c3889d4c925fe8238c78b207cbcc5b765e91ca9cb3024b67461f830803cb64ac8f680dab99bc292fe356e382b6963389ee600715257ac34528e02fc31ef8a674e45d697ad62226bf0917318642901223c890000000000000000000000000000000000000000000000000000000000000020000364000b600b00020b400b200302e4000344000ae00ac00302c40003240003000c600c00020b400c40030ae00c20030384000be00b80020bc00ba0030304000000000000000000000000000000000000000011600cc0020ca00c800203a400000000000000000000000000000000000000000000000000000000002000200100000000000000000000000000000000040402e40003e402c400048404640444000000000000000000000000000000000000000000042403040004e404c404a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c00100000000000000000000000000000000000280000000000000000000000602a000000000000000000000000000000000000000000000000300010280034002e0000000000000000000000000000000000000000000000000000000000003034000000000000000000000000000000000000000000000000000000000032002e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000002030101000000000000000000000000000000000000000000000000000000000020030000000000000000000000000000000080006000400320030002e002c002a00280000000000000000000000000000000000000000000c000a00320030002c002a000000000000000000000000000000000000000000000000000000060036000e000000000000000000000000000000000000000000000000040602003c00380010000000000000000000000000000000000000002a403a40003c404240003c401000000000000000000000000000000000000000000000000000464044404840100000000000000000000000000000000000000000000000000000004c404a4010000000000000000000000000000000000000000000004604004406004202001000000000000000000000000000000000000000000000000000004000420006000000000000000000000000000000000202020054405240340050404e4038001000000000000000000000000000000440104000104a006a00000010201e401c400000000000000000000000000000000000000000000000000000000016401440000000000000000000000000000000000000000000000000000000001a401840000000000000000000000000000000000000000000000000000000140001201" + }, + "publicSignals": [ + "0x2392f61a98ccc32d5834eae775287790be8309eebf5eb3a09623ef4eddae9680", + "0x163561325428d7bfb5e0e47c704d45d7ad4964d0ea9e955eed11ec83cd103881", + "0x11e7aefc629851910e7339ed2d45b1c9028a96c40035fc1d689414ca2f25cff9", + "0x0e03928a08f8ed333583918dc352627e3f35b77f788990af511252e0578b475d", + "0x16bf348daad696d174ef972259d4f14f636a81c423a3aa08e157074bd399e082", + "0x0c59b8a817bd63d2fea80c4e3f81db2240fd5dcef90d970f60a948eee97d0bfd", + "0x0bf59c0cbe4a5ba0402cb31f10f3167187c45c126482829431f34e93add392a3", + "0x1cd4163b9019995ab0e48a9fddcd1b0d3abccd3c5079e20fa383ace1e60ee3cd", + "0x21172c52fdd27c8e301ccee69b2ec6145ab5a2fb06dc69e2985eddd1be3f59a5", + "0x06978cb225e58fd5d5ec05b2cd3a73f002c78ecd86f8dbb9bfe439f061cfdf46" + ], + "proof": "0x0b0f20eb27034fc95c7e9427f039bbd328085dd82cc7552d92c809de724e04431b66829e3052dbad68b8d1d40863b5b323fed6cdc0e5d64f0a5d76cac3fdebbb0e7b127da4b18175ab179a25ae933b939f9be49db2d61b576299cd18ed17120d2cda8a509405337637847cb16441dd133efc3698f9ccad48c85f31476031fc8608ab4573024aa5ff41289f97fd3b48f70d06089cefb3e7b014b0b036f97dff832afcdc2938ecab85c8c4982c88d78775a2629cfc111c242f9658ebd56ae7a7b1111d45e10092f36f69af2096c48c6b9432cb53d883596f7645617639f5b6ac850801f129d7b6be95a42625a2ceb103d1ae2e01588c396081c1cc64483d9017aa1a0c176be98f7aa576d8abe52e0b7ab1c1885918ea4d234124f55ed44046762c2ad133ff2fab27bc0647b72cbad04647156c4b0820162b831ab051752cfa57131ba51f509f59d1880812bb32432e519b4fdf38e3b0988e68091c9aa0c75a61d805d24f384604c23f52df0c149a0788d5651d81333a51ecd1ddc196c69c6eca672dc3a079c0ea86b9b1f4b73680bdf8809f3cf4603d784ac8c7e1d86457da069003abd1ee2110d5b40b88dddbb1c32dc0fad33c4cd568719edb57ffab0778c2200998d258f5fafbf40a5369295b99918aa26e6b915408d07608f23a9ac33e79312f2cbd222c52b5ccde26780bfe60b644c9669773291a3607e9fdedc4f7ea1095301cc96b928b15fc686d9d12de6f595e94ffe598a747c5c8b5fa3705d48f1062045fd767013455eb2bcddd87f69012d3c381170dc7689198acc3101195144bc71d66b06fc1eeb35375ea8aaaf54ffdfb1270de917247643e954518a5b065d365079b895aa13442aad14292b7156fc09bf9ec47f7f90c6e511887bb210b059218229a6868ce893e5383106313e291316f5ca040920efbc6a92f556801ceaa0a4e01f744bd95bb164f506e33334a818fd4b8f535c170c37aca502815921c10cca0164f5d6d6db077020a7a933bc7bc6016d01d7ce6aae4c6b1333af995d8e3c6430944e4eab3efe26e338fb9fe6ad9e3f3a4124735c37a71c12ae77b96cd55a9642c9ebadadb60ee0414f526778f78c02da03af9cd55c98d626675f32bb1c78c861f94425821a059703e0a4d3a3296440a742fc41c6e5f38725e22752ca6396fa726ae9f461c4d7741f40ceb8057d01a61d881dd3f0c7427716592920f1f1431132b8e73d8e6f3ab4e3ff07b736d69b4d7af3b46c07010a3ef6fd539cab4eeb7142a334f06e7dc3231b61b5c255c8eae2c18ef10e083e5f5977e7d0fd3f8a3718d030a6633e73a1896775efbe8c40653d94a764fd858cefd378d23719e727e096e1413d1d0fb4493cf47d25eebec0c17b693c56c161e8720a8ebcf1d403d1324f317ec786572a01a7e8448e36a84c1eb1233c49201ab897f1770b96926b7e8487c2f279d9f735f4b29f0dc82ee910131dcbf39251868214267bd044933cdf7bbe721849587806f40fd1c993b74bc6ca30fe181e895840749b229dcf13bcb9a193317321ffebb1dba153ed9717abd314b0034aef4052ee485df1dba0d21e9c866d819d717a3c3adc5b1b889eca2bf98f83bbc62e38d78c181c037f6da324f54cf4e1906f5b438878130786ea68293cd81ef1f5915e5d50db35bbfb6658df2fafb6622c20d2367ba056d3680ea9aa18f1d99f38bb758ebf6198f0bde5bbd97ff24b92edd17ee4926e86855ae91e0affac925f080e5eb8780039b5e0d28706d54a06d" +} diff --git a/tests/common/data/ultrahonk_plain.json b/tests/common/data/ultrahonk_plain.json new file mode 100644 index 0000000..e1b54bf --- /dev/null +++ b/tests/common/data/ultrahonk_plain.json @@ -0,0 +1,8 @@ +{ + "vk": "0x00000000000000200000000000000005000000000000000200000000000000011d4e2b662cf75598ae75c80cb6190d6d86bc92fd69f1420fc9e6d5be8ba09e2c30210ded34398f54e3048f65c3f1dac749cc5022828668a6b345712af7369cbb1c3736f27bc34afe8eb1021704555717e76024100c144933330df5d9a6fb7e7f215612b168ecf42291b6df40da24069d5a0d5f2599d8be1ec34c5095e0922151059aecd0bba76edd4de929d587575b50c50f4be99a4615bfbd4ece89cb1442f1121b12b8bfa67425811621a1be826bcc5add41edb51fdce6c134c8e3ff5b15782ad6f88dd8a25590c065ad43adb6f3d4ccba5a7312f27dd564b12325a2594ae5038c0c60a3dfed43a24eefcc0331f08074bea7bb5c7f65191ec2c3fe59a239cc17bebc96661564acc3f5c59647e9270570e0c238916df6390c8590445f256d1d0bf23741444a9bf150d33f19d70a31863256e71d2bb1adf96b04d61f2c95a2c41b8058db3a5b9890b24d2545b7dd4aca37844bb0964691811a3dfe7b9fd24f8f28362861904e4b69161d7f43201c9213ede6e74eb63800123b82c73ad0156c403058b7f62cbcbdc8763b05935e9965bea86cd205281d331fb426ef4232ffe5c52b312f13fea65176bc0fe06aef8724f256898d215c78835f40bfe56fbf3f0de30ac6c48b063b744bbeecb29c8962cf27853ae788601a92a0420ba047a7f7a643265a8af9070f8bd5e18bc97a13c985d35a59c188d3d5ee626bbc4589bba9ff9f024236bda126650fb5228cf424a0878775499e69e8bd2c39af33bd5fa0b4079a233cda9292be02cfa2da9d0fc7b0eab0eb1a867b06854066589b967455259b320ca0bc4b1cd9eadbbf49eae56a99a4502ef13d965226a634d0981555e4a4da561a8a818e6c61f68cefa329f2fabc95c80ad56a538d852f75eda858ed1a616c7409dfd2992ac1708f0dd1d28c2ad910d9cf21a1510948580f406bc9416113d620205f76eebda12f565c98c775c4e4f3534b5dcc29e57eed899b1a1a880534dcb91b8afad764d2cbe67c94249535bba7fcbd3f412f868487222aa54f3268ab64a201b70a90a334c9bd5096aad8a0cc5d4c1d1cdb0fe415445bd0c84309caaf213e13240f97a584b45184c8ec31319b5f6c04ee19ec1dfec87ed47d6d04aa158de22dad22022121d689f57fb38ca21349cefb5d240b07ceb4be26ea429b6dc9d9e02dbea5caeded6749d2ef2e2074dbea56c8d54fa043a54c6e6a40238fb0a52c8e1f299b74e3867e8c8bc149ef3a308007a3bd6f9935088ec247cce992c33a533606652c2a72cb81284b190e235ee029a9463f36b2e29a1775c984b9d9b2714bab268e8d1e619fde85a71e430b77974326d790cb64c87558085332df639b8ce4102849ce9f77669190ed63388b3cc4a6d4e0d895c683ae0057f36a00e62416de5e2f8d58d08d4b4bb3a63e23e091e7a1f13c581c8a98c75014d5ec8a20890c62a50fff3b4e49a2e6e05bc63d8438368182639ef435c89f30e3a3a9053d97bea5f21820cafe7ffbef14880565ed976d53ed31c844187447d21f09100e8e569d3aec2e89eeb660cac820de50be4c53b608dd67c6977f5f1746fcf0fb6475d81ccd9318ca593957d2677420236138b3659a6b95b580bcc09a3dfbdadfa58a38222c150c756ba6a0c66b05655349f04c61dff94dddf3a4d0117fafda741f9518c42f000f87a1201ebad9bd23fed33824ae4ba2a1a307a45fb15594f8d553d2ebf9c285248460656ec9bc0ad940051e3b0751d25bb97885d8bc362eb06b96ea78d82f840a5eebc538dc40185864706e22d850e3c02ce38e325761a59132bdb9e9d795be161edd8773a3b74c0553b690b4b80b2a5cbd4a1a25fda097bef23e349531b43e287139da895215c216aebe8cce7d3b944f4a3b051bd407126007921cb1fbc5fc20d671263cad88c119d0a5d172679309087e385f8e76d4cfa834fab61ebd66030f9e6dfd3e6f4584b28e2cb00483dc2ffd9bf5f7ae2cc3f1ea0869c5ae71d9a1101e267b586089a8bb447e83ab3b7029ed788cc214e0be44485e2f39afbb7ae613410d68bce429dc36e23023cfe21c5f2ced7e136529a4bcd4317232f2fc16b61054a26ae3aeeeedc653cf5c5e3c09e2258141e67f4a5a48b50cbf48958b40bd2d14190edcf9b2aa697b677c779083aaf0151cc4f673dcf4bdba392d6280e3762e9e762a66fed77eb0e72645e5ba54f32c1d1bfbc4bd862361dafd7ebd6c68dd0b4a012fbc876f57da669215383f3595383f787bca153e972e6cfb9dfebeaa1b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020af3884ecad3331429af995779c2602e93ca1ea976e9e1bc64bbcdbb9fe792121f18803add8ad686e13dc2a989dcfb010cb69b0b38200df51787b7104bc74fb6", + "publicSignals": [ + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000003" + ], + "proof": "0x000000000000000000000000000000a16555b44bbe764b90975aa0d52b0ba43c0000000000000000000000000000000000041100eba196005627bb28e3b6ec8200000000000000000000000000000056bdbce2630a7f22e71e673b906b6e683b00000000000000000000000000000000000fb00382b00c68e7151406a5653c37000000000000000000000000000000fd298ac95bf5e22a727677f4e3feded87a00000000000000000000000000000000002f86305761ab79bb62c1c21695157400000000000000000000000000000038b6ae11f70a50117068c1567014454de0000000000000000000000000000000000017b872e686f2138d8bd7f2466998e100000000000000000000000000000033bd1c80b1b2e93d946c5bdbe955824abe00000000000000000000000000000000000c0ae686efc0389c91338aa6b0cae600000000000000000000000000000060a26a8b7dafe53885a7672bd835c3a04300000000000000000000000000000000002a8b6ee1de1fdc138326fc77d3c1d50000000000000000000000000000000ea3197280d9c1f581c6aee5fd13e5ab99000000000000000000000000000000000017e9156eb419522304bf90815b70e8000000000000000000000000000000c17c84cea29046525b7ed886d4a7cb20560000000000000000000000000000000000029bae5a451212815e1f97f3a49f4a0000000000000000000000000000000ea3197280d9c1f581c6aee5fd13e5ab99000000000000000000000000000000000017e9156eb419522304bf90815b70e8000000000000000000000000000000c17c84cea29046525b7ed886d4a7cb20560000000000000000000000000000000000029bae5a451212815e1f97f3a49f4a000000000000000000000000000000745cf398bbdc7e828c7bf39d2c1c03c8a400000000000000000000000000000000001056c697ca5fc1006ca0cde02c1a480000000000000000000000000000009d0b7421bd78783b1e4104f00b0f9bb210000000000000000000000000000000000015318df78da61666a7513b6dabb99100000000000000000000000000000093393690eea2b23aa371668390fda485a600000000000000000000000000000000000daa1a135cb4bcd86e71084644e44e000000000000000000000000000000e8bd00f425041f28a0c460aa5fae2657e9000000000000000000000000000000000023aed290896d5a47c398c592b3f7b80000000000000000000000000000008feee4545229b0adadb897b84c1247b41c00000000000000000000000000000000001346d9943283056206214e7105893d0000000000000000000000000000002bbde89b71569a202f06a0ac56cfde5b7a000000000000000000000000000000000023f932fd8d02cedb42bdebb6f5b8c71e041e5a85a368277a00dc35bc1cb841d1025eaaa178505127a4c77737b261f2126030185b8e38023e4f6980c564a01b5731899dd84120401c3d2e1cb84d9e0f03c3565b0a5b778bc0a4c3fc91cd88558c3b73acff261f85879274e2d0cd521204c8553efdb3b5fdf009ff5a283ace2903cfdebce89ea5e8846ead83e882ff850e0964751d5437b8b3429db523ba36b5b40cd573fe71dec250925f6ccc05227119006aa46d7175faf4e03991b0b3e6009d6fba1c9866c4b39dd7ae31742ee8da12bdd5c298692a2fabdee485c88a4ef1f5097200864cc8d5009c10b6db0ec8a7073ead4924272522516ac5faaeaccd0e215d7dcec0d0068503348439bec3f3f82e1cfd70fa00dad62da51e505e27964089d5ed7fc81ef624de5a0ce040df96671261290be5fb4070d35e02861d2339b910ebf9dca40c2a0c787472700581a4512171b1a07bca795284c673ba98a5414151613ab9c3d7042111fa116fe6717ea11ac8d8a5d9a74ac5aa23d913a88fae3bdbb29ac86d1c334baf48810eede673ce082e03969c53652746c4b136828ef68a634450c3d00d686fbceeef5036e05e051a7dfdba6bccae708bef1f44149741d4d5a4b1fc3de96a6f01a7c7b9e02cfbc70d1784a92d05299b18090d50dc1490bf2c0f3517177587cb0b3e473212dea394243b7e7785c15caacd6ce32fca5c9a0eb16aa020ae703c2201158a656c3452ae2948ddd12304ff12cd806628009b6b0bbf212ab9080b55d23467e5dcc9e729ec196783fb77f764d19eb684f65f6f97eae4aeb07a4e96ecd514b9364805f5dae82ae69bed1a66588c1053569cc6c775f7b676ce83ebb44478db305f081ce809bd0022f6336f94f68584d626c558dc7e88d9f198790904ef1cc62c50aaff47b43c287b95cc303633631fd9bbb8da7e1a02a43a3572f3d938af2cc47719743f06e20422d8f36ad0aeb42dd6ecba72da3631ef5aab5cf51c99a2361fa4d3febb16aa048d58ba1dbc0fb264d2a1cf00d5bbd621ed48b82091fe46eed16f8cea9a7fa328a5521995620538087b8748453b0bb4a85ba89aa939fa285549be4631e7e81f0f9cdbfbfdd0838b2a17c33ddfc5ec9b70bad90e84a9e26b16020727d005dcd01a33f0d001d84951d6ead10db7df8a0527467d97e6595789d98bee6f1965e36e24f50e4c7edbe733e387f4ca6d9f202d14a3924730e53def27274a11b914cf2f1228e10c4a7b8a4ac8a586d47f097b2675cc716e7b36889ec93c411b4b56dde100565842ed17ff937eb4845d66dd50386abb9237cd475322c163d6bd3b0673cf0f51e8c50aea051f0914f2149d5c40283870e06cb9ef3865eb91c70f8ce461ac07564cfc2db0fed225732c683b4d996339cb907913f7e5a7a470f4ed2321dca1048098773622cfae712fc7a04842ec37706fe15b98d28cf00a3e2a631924288409b23de33a475ef4f6816152c40d90537b29b10d69f35e3c8e8925250a97458e0ee41e887cd177de5bd9e21193b530e4f674cf6e245c884dc27fec5a05880b4f1db1748d8ea74f644a7385eea2cb1c5f0c19450f11041f0880e49a9f210bc2ec185fc47a82baffcaf1a50ebc633d50ba90e0bfc85fca9680f0f72b4fec3609a11c682795711d7f20f773790815c222f1b552a1b76eb1c65d5799a6f7d3e9c85425f6d2a161d000549b77a357c425b88f2a89145a51af79b613c32e4540a17d0217198f48fd0b31de90836375688a8146c1d33884df05a465e1d112e373fa6d7e1d81f2c929b9ac8abf541f65a8f9ffd1c74c5420cdb50b4a0e4f339c0c788c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dd74e9c3b18cfc18ccb380d59fc8f874b0c07784aacf2848e229aeeab497e010f74a76765424ff8ae1956a70591e888626a897d45835a9fb176ee73cca75b32165ef7630b0141b8a8bdd0b95617ae85c404cf4798e1cf5b8eba4b05698be6cc0346082b7c70e259f63f8e56c8327e8cf949aa7e29151ec82d6ffe90f2c6a6c20f0f9996e4b6adc6fcba4d5d91fc41bb147e88cc8b3b3c556e6d87e3e053e16e1cffd96b3957f272cb13e32a401bf2b4ea58cfb87d3be02cea1a24b3fe69d7091c234e7fa782ae6b2e8294ae234f968882cfbed6b29ce260519410a70cd96f3927073d8eb4ae69769fdb046c2a5dae0a1f0a3b1e7f027a5d5612d77b53a98b6208c63bc78bd908ec27d059b36af70737f20e7515c1dc84b3f44480f663a502132a619f056bac32933605c59d254d7781cc1312edbfe1ac7654758c73923ec7ec0983b371cf95e427039516c05222d8c55a097eea8424e967f44e54612e52824f30208d4512fec7bd2b5f4815381bc27e9d1587ebc35269442b62cf034195601a0693a16a5bd229a70eba247cbfbe5eafa57bfca239ed09673651215050b15e9b1772a36efef784515e4b2ab77dc9b2698f851473e60f47d4d78e1caffcecbc70300af51b5c5cf71b1db38c9ec6f059e23295697556fc04fbea0de11196db17f3192ff368be30efaab3cf42670a723a7a773e85e8af9ab8db4aa945955970dda20c260135391ed4315e05dd3bca1ce5355258c7963b5ba5b6335a17c813b2789f10571c4ff66d5895c23a451ca3cb5c74d86253e36b2b90e879971085f691854c2bfe481626aeeb62a5b02efcda279e12a071938cb8f4fd6220870bc2a785a645044a02330e1814f7c4a50c591025daa5e1a91e4566cc13878ccab6f044e7fffc231c9aa1bebe8607817f91e09abb800f1d8f50dc5f0d0f377d00536c54db75520dd3e8eca4f34e0446c3fe02c795ebf49b20cd6a94fa4577dfb07bddf5dbf2830126cdd027596d6a2ddcec93b69645535a4e39f4e7b4637d481fe0b7afa94cff0301330e970c1dc3700da49aeae86852726c1687ba4af1121ceaa156bb94b0e11600244c8f9900ea048b012138ecf1d94957fcb18905aa11b30ee6ca9b9691b22a8cc14c80086ae434b6364ee9ea79c3932412648584f8432bc9e3b75793b8181550631a331582f64c4ed04788fb3f6073d575a2dce31ab4219d4090c8c5f2f82ae43fa19d7925920a79b53cf6d7d20fb6a23a7f016ad83f87fdddc7498191491ab41923aebb48aa89a5531d2f571f0bdff5d4a045af677f0233ff9262ada17c0db9424312077f02f326feb24de51c6b8a417821f28858fa8d9ba5b34e52cbb129ead3d61fd17cb7676debd58e92c9b595ae5db681c2ac1a6407e67a1556a6a9129b73e87c5a506db31c71ba89f0d730721152140165d27ca9591072049f226b06304f9891656eb11732045f998ef6bf3f1fd2474b7bb88820840f28607c038d1b565c84c9fcf0f02ccbbd7c346d99ab7a6b9eccb0e3f81d3047cd86e2a8bc901b565c84c9fcf0f02ccbbd7c346d99ab7a6b9eccb0e3f81d3047cd86e2a8bc900ddbd646eba704a636b58e54a47786008e7e772723734fb53d28f2a50d4413cb250c125db90a460cae31dfeb5b72241ddd6a63b7e7e9bda1f6ea83dc69de75e814d80bdda54b779df12b5778ff426c32e016d6e48bc28e19506385fced2c51422842a65b9259854906ecb3f6aa73aa192985fe1cb344e38693dc7cadec52a7c516f33e1e064528c9b0629ad215d9ba1509be040ac4aa09b7c36a1cbde8708954000000000000000000000000000000c1761cfb8b9ac3570c2ce6aa948688cc100000000000000000000000000000000000085aef4812aa721052928bc9e9fc7e0000000000000000000000000000005dbd1a3c63084e8fea657ca9fc5da0e07e00000000000000000000000000000000000d2fbe887487b8604fb954eeb6c53f000000000000000000000000000000098b36445842374bc357a2ef25f9837fd80000000000000000000000000000000000053eedf101608ac39f1c8177c2e21d000000000000000000000000000000532b9e2ab2c38e881335b6b294839ed5c50000000000000000000000000000000000039b5b79392e8680c5b633f91c0904000000000000000000000000000000ae181323ba3a75acab78032a49eee40d9f000000000000000000000000000000000014f99366f81a4f83a82a58706b7cd40000000000000000000000000000007eb54aeb04b76035e1a071d9bf365a6472000000000000000000000000000000000009e712e51b3b1390dbc35bc4fc0ab3000000000000000000000000000000e6dc278e3472c9b418cddf30d321f4d593000000000000000000000000000000000000ca73945d0a870d824fb963b68261000000000000000000000000000000bff8e49a8a86d0568bc644c7a8d38f3e06000000000000000000000000000000000005f45b020b6dc7dc4952069a44e06a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002cf7602c6bf57d91d30cc34307d0a495d1808e29c174303eaf9d32468afcdc652f9b4ccfe7bd41d0f2d63fac835f5de1b668508e8b309e65087569597254dc41157e648fbc4cbaebe6557e9b2915994c635dd56f4d63ea09ff2597704299e8f1272453e7fd57a097979dbc2b85612e87b1d6a374fd7649d2341d93bd7b34ce631fe20f57973d0dab6eb5361ea51a44b4400932aa82f1dd0758967a6defb54023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bc851c133eef46d39a30aaf8a74fd1b670000000000000000000000000000000000235596e90d67a820b0d30890a068830000000000000000000000000000007fda86ff636a77d4116ba2eeefa5d51a2a00000000000000000000000000000000000dc8d17b3c45893c12d51c555024a9000000000000000000000000000000bb490f8cd67dd3a69c0718e44977362fed00000000000000000000000000000000002ce486afb6ce83ecaa858e0e2e30190000000000000000000000000000009d7ba6247640ec5c04a432c17f7ec7c8b500000000000000000000000000000000001d8bc1d23c284072fa2ccd760d8e7f" +} \ No newline at end of file diff --git a/tests/common/data/ultrahonk.json b/tests/common/data/ultrahonk_zk.json similarity index 100% rename from tests/common/data/ultrahonk.json rename to tests/common/data/ultrahonk_zk.json diff --git a/tests/common/options.ts b/tests/common/options.ts index 7946b68..a3794b4 100644 --- a/tests/common/options.ts +++ b/tests/common/options.ts @@ -1,4 +1,4 @@ -import { CurveType, Library, Plonky2HashFunction, ProofType, Risc0Version } from "../../src"; +import { CurveType, Library, Plonky2HashFunction, ProofType, Risc0Version, UltrahonkVariant } from "../../src"; // ADD_NEW_PROOF_TYPE: Exclusion for Risc0 if needed (no data etc) export const proofTypeVersionExclusions: Partial> = { @@ -22,5 +22,8 @@ export const testOptions = { (key) => Plonky2HashFunction[key as keyof typeof Plonky2HashFunction] ), ultraplonkPublicInputCounts: [1], + ultrahonkVariants: Object.keys(UltrahonkVariant).map( + (key) => UltrahonkVariant[key as keyof typeof UltrahonkVariant] + ), // ADD_NEW_PROOF_TYPE Testing: add config options here is required for new proof type }; \ No newline at end of file diff --git a/tests/common/runners.ts b/tests/common/runners.ts index 45054e4..6ecee80 100644 --- a/tests/common/runners.ts +++ b/tests/common/runners.ts @@ -139,6 +139,21 @@ export const generateTestPromises = ( }); break; + case ProofType.ultrahonk: + testOptions.ultrahonkVariants + .filter((v) => !excludedVersions.includes(v)) + .forEach((variant) => { + promises.push(runTest({ + proofType, + config: { variant }, + })); + }); + break; + + case ProofType.ezkl: + promises.push(runTest({ proofType })); + break; + case ProofType.fflonk: promises.push(runTest({ proofType })); break; diff --git a/tests/common/utils.ts b/tests/common/utils.ts index 1ccb7ee..52f0a25 100644 --- a/tests/common/utils.ts +++ b/tests/common/utils.ts @@ -15,7 +15,7 @@ import { zkVerifySession } from '../../src'; import { EventResults, handleCommonEvents } from './eventHandlers'; -import { Groth16Config, Plonky2Config, Risc0Config } from "../../src"; +import { Groth16Config, Plonky2Config, Risc0Config, UltrahonkConfig } from "../../src"; import fs from "fs"; import { isRisc0Config } from "../../src/utils/helpers"; @@ -58,6 +58,11 @@ export function getProofFilenameComponents(proofOptions: ProofOptions): string[] break; } case ProofType.ultrahonk: { + const { variant } = config as UltrahonkConfig; + components.push(variant.toLowerCase()); + break; + } + case ProofType.ezkl: { // No Config break; } @@ -554,6 +559,10 @@ export function dispatchBuilder( return methodMap.risc0(proofOptions.config as Risc0Config); case ProofType.ultraplonk: return methodMap.ultraplonk(proofOptions.config as UltraplonkConfig); + case ProofType.ultrahonk: + return methodMap.ultrahonk(proofOptions.config as UltrahonkConfig); + case ProofType.ezkl: + return methodMap.ezkl(); case ProofType.fflonk: return methodMap.fflonk(); case ProofType.sp1: diff --git a/tests/single.test.ts b/tests/single.test.ts index 013a322..86de1d3 100644 --- a/tests/single.test.ts +++ b/tests/single.test.ts @@ -1,4 +1,4 @@ -import {ProofType, Risc0Version, TransactionType, VerifyTransactionInfo, zkVerifySession,} from '../src'; +import {ProofType, Risc0Version, TransactionType, VerifyTransactionInfo, zkVerifySession, UltrahonkVariant} from '../src'; import {walletPool} from './common/walletPool'; import {loadProofAndVK, validateVerifyTransactionInfo} from './common/utils'; import {handleCommonEvents} from './common/eventHandlers'; @@ -26,26 +26,21 @@ describe('zkVerifySession class', () => { } }); - it.skip('should send a proof to a registered domain and get aggregation', async () => { + it('should send a proof to a registered domain and get aggregation', async () => { try { const expectAggregation = true; [envVar, wallet] = await walletPool.acquireWallet(); const proofData = loadProofAndVK({ - proofType: ProofType.risc0, - config: { - version: Risc0Version.V3_0 - } + proofType: ProofType.ezkl, }); session = await zkVerifySession.start().Volta().withAccount(wallet); const { events, transactionResult } = await session .verify() - .risc0({ - version: Risc0Version.V3_0 - }) + .ezkl() .execute({ proofData: { proof: proofData.proof.proof, @@ -57,14 +52,14 @@ describe('zkVerifySession class', () => { const results = handleCommonEvents( events, - 'risc0', + 'ezkl', TransactionType.Verify, expectAggregation ); const transactionInfo: VerifyTransactionInfo = await transactionResult; - validateVerifyTransactionInfo(transactionInfo, 'risc0', expectAggregation); + validateVerifyTransactionInfo(transactionInfo, 'ezkl', expectAggregation); } catch (error: unknown) { if (error instanceof Error) { throw new Error(`Test failed with error: ${error.message}\nStack: ${error.stack}`);