UNPKG

mina-attestations

Version:
150 lines (149 loc) 7.17 kB
import { VerificationKey, DynamicProof, type InferProvable, FeatureFlags, Proof, Cache, Provable, PublicKey, type From, type InferValue, Field } from 'o1js'; import { ProvableType } from './o1js-missing.ts'; import { type InferNestedProvable, NestedProvable, type NestedProvableFor } from './nested.ts'; import { type CredentialSpec, type Credential, type StoredCredential, type WitnessSpec } from './credential.ts'; import type { ImportedWitnessSpecJSON } from './validation.ts'; export { Imported, type ImportedWitness, ImportedWitnessSpec }; type ImportedWitness<Input = unknown> = { type: 'imported'; vk: VerificationKey; proof: DynamicProof<Input, Credential>; }; type ImportedWitnessSpec = { type: 'imported'; publicInputType: ProvableType; publicOutputType: ProvableType<Credential<any>>; maxProofsVerified: 0 | 1 | 2; featureFlags: FeatureFlags; }; type Imported<Data, Input> = StoredCredential<Data, ImportedWitness<Input>>; declare const Imported: { create: typeof createImported; fromProgram: typeof importedFromProgram; fromMethod: typeof importedFromMethod; publicInputType: typeof publicInputType; Generic: { witnessType<Input>(witnessSpec: WitnessSpec): NestedProvableFor<ImportedWitness<Input>>; verify({ vk, proof }: ImportedWitness, credHash: Field): void; validate({ vk, proof }: ImportedWitness, credHash: Field): Promise<void>; matchesSpec(witness: ImportedWitness): boolean; }; }; declare function createImported<DataType extends NestedProvable, InputType extends ProvableType, Data extends InferNestedProvable<DataType>, Input extends InferProvable<InputType>>(spec: { data: DataType; witness: ImportedWitnessSpec; }): CredentialSpec<ImportedWitness<Input>, Data>; declare function witnessSpecToJSON(spec: ImportedWitnessSpec): { type: "imported"; publicInputType: import("./serialize-provable.ts").SerializedType; publicOutputType: import("./serialize-provable.ts").SerializedType; maxProofsVerified: 0 | 2 | 1; featureFlags: { rangeCheck0: boolean | null; rangeCheck1: boolean | null; foreignFieldAdd: boolean | null; foreignFieldMul: boolean | null; xor: boolean | null; rot: boolean | null; lookup: boolean | null; runtimeTables: boolean | null; }; }; declare function witnessSpecFromJSON(json: ImportedWitnessSpecJSON): ImportedWitnessSpec; declare const ImportedWitnessSpec: { toJSON: typeof witnessSpecToJSON; fromJSON: typeof witnessSpecFromJSON; }; declare function publicInputType<Spec extends CredentialSpec>(credentialSpec: Spec): ProvableType; declare function importedFromProgram<DataType extends ProvableType, InputType extends ProvableType, Data extends InferProvable<DataType>, Input extends InferProvable<InputType>, AllInputs extends any[]>(program: { publicInputType: InputType; publicOutputType: ProvableType<Credential<Data>>; analyzeMethods(): Promise<Record<string, any>>; maxProofsVerified(): Promise<0 | 1 | 2>; compile: (options?: { cache?: Cache; forceRecompile?: boolean; proofsEnabled?: boolean; }) => Promise<{ verificationKey: VerificationKey; }>; run(...inputs: AllInputs): Promise<{ proof: Proof<Input, Credential<Data>>; auxiliaryOutput: undefined; }>; }): Promise<{ spec: CredentialSpec<ImportedWitness<Input>, Data>; program: { publicInputType: InputType; publicOutputType: ProvableType<Credential<Data>>; analyzeMethods(): Promise<Record<string, any>>; maxProofsVerified(): Promise<0 | 1 | 2>; compile: (options?: { cache?: Cache; forceRecompile?: boolean; proofsEnabled?: boolean; }) => Promise<{ verificationKey: VerificationKey; }>; run(...inputs: AllInputs): Promise<{ proof: Proof<Input, Credential<Data>>; auxiliaryOutput: undefined; }>; }; create(...inputs: AllInputs): Promise<Imported<Data, Input>>; fromProof(proof: Proof<Input, Credential<Data>>, vk: VerificationKey): Promise<Imported<Data, Input>>; compile(options?: { cache?: Cache; forceRecompile?: boolean; proofsEnabled?: boolean; }): Promise<VerificationKey>; dummy({ owner, data, }: Credential<From<DataType>>): Promise<Imported<Data, Input>>; }>; type PublicInput<Config> = InferProvableOrUndefined<Get<Config, 'publicInput'>>; type PrivateInput<Config> = InferProvable<Get<Config, 'privateInput'>>; type Data<Config> = InferProvable<Get<Config, 'data'>>; declare function importedFromMethod<Config extends { name: string; publicInput?: NestedProvable; privateInput?: NestedProvable; data: NestedProvable; }>(spec: Config, method: (inputs: { publicInput: PublicInput<Config>; privateInput: PrivateInput<Config>; owner: PublicKey; }) => Promise<Data<Config>>): Promise<{ create(inputs: { publicInput: From<Get<Config, "publicInput">>; privateInput: From<Get<Config, "privateInput">>; owner: PublicKey; }): Promise<Imported<InferProvable<Get<Config, "data">>, InferProvableOrUndefined<Get<Config, "publicInput">>>>; spec: CredentialSpec<ImportedWitness<InferProvableOrUndefined<Get<Config, "publicInput">>>, InferProvable<Get<Config, "data">>>; program: { publicInputType: Provable<InferProvableOrUndefined<Get<Config, "publicInput">>, InferValue<Get<Config, "publicInput">>>; publicOutputType: ProvableType<Credential<InferProvable<Get<Config, "data">>>>; analyzeMethods(): Promise<Record<string, any>>; maxProofsVerified(): Promise<0 | 1 | 2>; compile: (options?: { cache?: Cache; forceRecompile?: boolean; proofsEnabled?: boolean; }) => Promise<{ verificationKey: VerificationKey; }>; run(...inputs: any): Promise<{ proof: Proof<InferProvableOrUndefined<Get<Config, "publicInput">>, Credential<InferProvable<Get<Config, "data">>>>; auxiliaryOutput: undefined; }>; }; fromProof: (proof: Proof<InferProvableOrUndefined<Get<Config, "publicInput">>, Credential<InferProvable<Get<Config, "data">>>>, vk: VerificationKey) => Promise<Imported<InferProvable<Get<Config, "data">>, InferProvableOrUndefined<Get<Config, "publicInput">>>>; compile: (options?: { cache?: Cache; forceRecompile?: boolean; proofsEnabled?: boolean; } | undefined) => Promise<VerificationKey>; dummy: ({ owner, data, }: Credential<import("node_modules/o1js/dist/node/bindings/lib/provable-generic.js").InferProvable<Get<Config, "data">, import("node_modules/o1js/dist/node/lib/provable/field.js").Field> | InferValue<Get<Config, "data">>>) => Promise<Imported<InferProvable<Get<Config, "data">>, InferProvableOrUndefined<Get<Config, "publicInput">>>>; }>; type Get<T, Key extends string> = T extends { [K in Key]: infer Value; } ? Value : undefined; type InferProvableOrUndefined<A> = A extends undefined ? undefined : InferProvable<A>;