mina-attestations
Version:
Private Attestations on Mina
168 lines (167 loc) • 6.32 kB
TypeScript
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;