UNPKG

mina-attestations

Version:
168 lines (167 loc) 6.32 kB
import { Bool, Field, PublicKey } from 'o1js'; import { ProvableType } from './o1js-missing.ts'; import { NestedProvable } from './nested.ts'; import { DynamicArray } from './dynamic/dynamic-array.ts'; import { DynamicRecord } from './dynamic/dynamic-record.ts'; import type { Input, RootValue, RootType } from './program-spec.ts'; import type { CredentialSpec, CredentialType } from './credential.ts'; import type { NativeWitness } from './credential-native.ts'; import { type ImportedWitness } from './credential-imported.ts'; import { Numeric, type NumericMaximum } from './dynamic/gadgets-numeric.ts'; export { Node, Operation }; export { type CredentialNode, type InputToNode, root }; declare const Operation: { owner: Node<PublicKey>; constant<Data>(data: Data): Node<Data>; issuer: typeof issuer; issuerPublicKey: typeof issuerPublicKey; verificationKeyHash: typeof verificationKeyHash; publicInput: typeof publicInput; property: typeof property; record: typeof record; equals: typeof equals; equalsOneOf: typeof equalsOneOf; lessThan: typeof lessThan; lessThanEq: typeof lessThanEq; add: typeof add; sub: typeof sub; mul: typeof mul; div: typeof div; and: typeof and; or: typeof or; not: typeof not; hash: typeof hash; hashWithPrefix: typeof hashWithPrefix; ifThenElse: typeof ifThenElse; compute: typeof compute; }; type CredentialNode<Data = any, Witness = WitnessAny> = { type: 'credential'; credentialKey: string; credentialType: CredentialType; data?: Data; witness?: Witness; }; type Node<Data = any> = { type: 'constant'; data: Data; } | { type: 'root'; input: Record<string, Input>; } | { type: 'owner'; } | CredentialNode<Data> | { type: 'issuer'; credentialKey: string; } | { type: 'issuerPublicKey'; credentialKey: string; } | { type: 'verificationKeyHash'; credentialKey: string; } | { type: 'publicInput'; credentialKey: string; } | { type: 'property'; key: string; inner: Node; } | { type: 'record'; data: Record<string, Node>; } | { type: 'equals'; left: Node; right: Node; } | { type: 'equalsOneOf'; input: Node; options: Node[] | Node<any[]> | Node<DynamicArray>; } | { type: 'lessThan'; left: Node<Numeric>; right: Node<Numeric>; } | { type: 'lessThanEq'; left: Node<Numeric>; right: Node<Numeric>; } | { type: 'add'; left: Node<Numeric>; right: Node<Numeric>; } | { type: 'sub'; left: Node<Numeric>; right: Node<Numeric>; } | { type: 'mul'; left: Node<Numeric>; right: Node<Numeric>; } | { type: 'div'; left: Node<Numeric>; right: Node<Numeric>; } | { type: 'and'; inputs: Node<Bool>[]; } | { type: 'or'; left: Node<Bool>; right: Node<Bool>; } | { type: 'not'; inner: Node<Bool>; } | { type: 'hash'; inputs: Node[]; prefix?: string; } | { type: 'ifThenElse'; condition: Node<Bool>; thenNode: Node; elseNode: Node; } | { type: 'compute'; inputs: readonly Node[]; computation: (...inputs: any[]) => any; outputType: ProvableType; }; type GetData<T extends Input> = T extends Input<infer Data> ? Data : never; type InputToNode<T extends Input> = T extends CredentialSpec<infer Witness, infer Data> ? CredentialNode<Data, Witness> : Node<GetData<T>>; declare const Node: { eval: typeof evalNode; evalType: typeof evalNodeType; }; declare function evalNode<Data>(root: RootValue, node: Node<Data>): Data; declare function evalNodeType(rootType: RootType, node: Node): NestedProvable; declare function root<Inputs extends Record<string, Input>>(inputs: Inputs): Node<{ [K in keyof Inputs]: Node<GetData<Inputs[K]>>; }>; declare function property<K extends string, Data extends { [key in K]: any; }>(node: Node<Data | DynamicRecord<Data>>, key: K): Node<Data[K]>; declare function record<Nodes extends Record<string, Node>>(nodes: Nodes): Node<{ [K in keyof Nodes]: Nodes[K] extends Node<infer Data> ? Data : never; }>; declare function equals<Data>(left: Node<Data>, right: Node<Data>): Node<Bool>; declare function equalsOneOf<Data>(input: Node<Data>, options: Node<Data>[] | Node<Data[]> | Node<DynamicArray<Data>>): Node<Bool>; declare function lessThan<Left extends Numeric, Right extends Numeric>(left: Node<Left>, right: Node<Right>): Node<Bool>; declare function lessThanEq<Left extends Numeric, Right extends Numeric>(left: Node<Left>, right: Node<Right>): Node<Bool>; declare function add<Left extends Numeric, Right extends Numeric>(left: Node<Left>, right: Node<Right>): Node<NumericMaximum<Left | Right>>; declare function sub<Left extends Numeric, Right extends Numeric>(left: Node<Left>, right: Node<Right>): Node<NumericMaximum<Left | Right>>; declare function mul<Left extends Numeric, Right extends Numeric>(left: Node<Left>, right: Node<Right>): Node<NumericMaximum<Left | Right>>; declare function div<Left extends Numeric, Right extends Numeric>(left: Node<Left>, right: Node<Right>): Node<NumericMaximum<Left | Right>>; declare function and(...inputs: Node<Bool>[]): Node<Bool>; declare function or(left: Node<Bool>, right: Node<Bool>): Node<Bool>; declare function not(inner: Node<Bool>): Node<Bool>; declare function hash(...inputs: Node[]): Node<Field>; declare function hashWithPrefix(prefix: string, ...inputs: Node[]): Node<Field>; declare function ifThenElse<Data>(condition: Node<Bool>, thenNode: Node<Data>, elseNode: Node<Data>): Node<Data>; declare function compute<Inputs extends readonly Node[], Output>(inputs: [...Inputs], outputType: ProvableType<Output>, computation: (...args: { [K in keyof Inputs]: Inputs[K] extends Node<infer T> ? T : never; }) => Output): Node<Output>; declare function issuer(credential: CredentialNode): Node<Field>; declare function issuerPublicKey({ credentialType, credentialKey, }: CredentialNode<any, NativeWitness>): Node<PublicKey>; declare function verificationKeyHash({ credentialType, credentialKey, }: CredentialNode<any, ImportedWitness>): Node<Field>; declare function publicInput<Input>({ credentialType, credentialKey, }: CredentialNode<any, ImportedWitness<Input>>): Node<Input>; type WitnessAny = NativeWitness | ImportedWitness | undefined;