import { From } from '../../bindings/lib/provable-generic.js'; import { Bool } from '../provable/bool.js'; import { Provable } from '../provable/provable.js'; import { ProvableType } from '../provable/types/provable-intf.js'; import { InferProvable } from '../provable/types/struct.js'; import { Tuple } from '../util/types.js'; import { Proof } from './proof.js'; export { Recursive }; declare function Recursive, PublicOutputType extends Provable, PrivateInputs extends { [Key in string]: Tuple; }>(zkprogram: { name: string; publicInputType: PublicInputType; publicOutputType: PublicOutputType; privateInputTypes: PrivateInputs; rawMethods: { [Key in keyof PrivateInputs]: (...args: any) => Promise<{ publicOutput: InferProvable; }>; }; maxProofsVerified: () => Promise<0 | 1 | 2>; } & { [Key in keyof PrivateInputs]: (...args: any) => Promise<{ proof: Proof, InferProvable>; }>; }): { [Key in keyof PrivateInputs]: RecursiveProver, PublicInputType, InferProvable, PrivateInputs[Key]> & { if: ConditionalRecursiveProver, PublicInputType, InferProvable, PrivateInputs[Key]>; }; }; type RecursiveProver> = PublicInput extends undefined ? (...args: TupleFrom) => Promise : (publicInput: From, ...args: TupleFrom) => Promise; type ConditionalRecursiveProver> = PublicInput extends undefined ? (condition: Bool | { condition: Bool; domainLog2?: number; }, ...args: TupleFrom) => Promise : (condition: Bool | { condition: Bool; domainLog2?: number; }, publicInput: From, ...args: TupleFrom) => Promise; type TupleFrom = { [I in keyof T]: From; };