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; constant(data: Data): Node; 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 = { type: 'credential'; credentialKey: string; credentialType: CredentialType; data?: Data; witness?: Witness; }; type Node = { type: 'constant'; data: Data; } | { type: 'root'; input: Record; } | { type: 'owner'; } | CredentialNode | { 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; } | { type: 'equals'; left: Node; right: Node; } | { type: 'equalsOneOf'; input: Node; options: Node[] | Node | Node; } | { type: 'lessThan'; left: Node; right: Node; } | { type: 'lessThanEq'; left: Node; right: Node; } | { type: 'add'; left: Node; right: Node; } | { type: 'sub'; left: Node; right: Node; } | { type: 'mul'; left: Node; right: Node; } | { type: 'div'; left: Node; right: Node; } | { type: 'and'; inputs: Node[]; } | { type: 'or'; left: Node; right: Node; } | { type: 'not'; inner: Node; } | { type: 'hash'; inputs: Node[]; prefix?: string; } | { type: 'ifThenElse'; condition: Node; thenNode: Node; elseNode: Node; } | { type: 'compute'; inputs: readonly Node[]; computation: (...inputs: any[]) => any; outputType: ProvableType; }; type GetData = T extends Input ? Data : never; type InputToNode = T extends CredentialSpec ? CredentialNode : Node>; declare const Node: { eval: typeof evalNode; evalType: typeof evalNodeType; }; declare function evalNode(root: RootValue, node: Node): Data; declare function evalNodeType(rootType: RootType, node: Node): NestedProvable; declare function root>(inputs: Inputs): Node<{ [K in keyof Inputs]: Node>; }>; declare function property(node: Node>, key: K): Node; declare function record>(nodes: Nodes): Node<{ [K in keyof Nodes]: Nodes[K] extends Node ? Data : never; }>; declare function equals(left: Node, right: Node): Node; declare function equalsOneOf(input: Node, options: Node[] | Node | Node>): Node; declare function lessThan(left: Node, right: Node): Node; declare function lessThanEq(left: Node, right: Node): Node; declare function add(left: Node, right: Node): Node>; declare function sub(left: Node, right: Node): Node>; declare function mul(left: Node, right: Node): Node>; declare function div(left: Node, right: Node): Node>; declare function and(...inputs: Node[]): Node; declare function or(left: Node, right: Node): Node; declare function not(inner: Node): Node; declare function hash(...inputs: Node[]): Node; declare function hashWithPrefix(prefix: string, ...inputs: Node[]): Node; declare function ifThenElse(condition: Node, thenNode: Node, elseNode: Node): Node; declare function compute(inputs: [...Inputs], outputType: ProvableType, computation: (...args: { [K in keyof Inputs]: Inputs[K] extends Node ? T : never; }) => Output): Node; declare function issuer(credential: CredentialNode): Node; declare function issuerPublicKey({ credentialType, credentialKey, }: CredentialNode): Node; declare function verificationKeyHash({ credentialType, credentialKey, }: CredentialNode): Node; declare function publicInput({ credentialType, credentialKey, }: CredentialNode>): Node; type WitnessAny = NativeWitness | ImportedWitness | undefined;