import { Field, PublicKey, SelfProof, Signature, UInt8 } from 'o1js';
import { Combination } from './utils.js';
export { StepProgram, PublicInputs, PublicOutputs, StepProgramProof };
declare const PublicInputs_base: (new (value: {
    authPubKey: PublicKey;
    authSignature: Signature;
}) => {
    authPubKey: PublicKey;
    authSignature: Signature;
}) & {
    _isStruct: true;
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{
    authPubKey: PublicKey;
    authSignature: Signature;
}, {
    authPubKey: {
        x: bigint;
        isOdd: boolean;
    };
    authSignature: any;
}>, "fromFields"> & {
    fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => {
        authPubKey: PublicKey;
        authSignature: Signature;
    };
} & {
    fromValue: (value: {
        authPubKey: PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        authSignature: Signature | {
            r: Field | bigint;
            s: import("o1js").Scalar | bigint;
        };
    }) => {
        authPubKey: PublicKey;
        authSignature: Signature;
    };
    toInput: (x: {
        authPubKey: PublicKey;
        authSignature: Signature;
    }) => {
        fields?: Field[] | undefined;
        packed?: [Field, number][] | undefined;
    };
    toJSON: (x: {
        authPubKey: PublicKey;
        authSignature: Signature;
    }) => {
        authPubKey: string;
        authSignature: any;
    };
    fromJSON: (x: {
        authPubKey: string;
        authSignature: any;
    }) => {
        authPubKey: PublicKey;
        authSignature: Signature;
    };
    empty: () => {
        authPubKey: PublicKey;
        authSignature: Signature;
    };
};
/**
 * authPubKey and authSignature is used for the authenticity of the data transferred. It enables a p2p authenticated communication.
 */
declare class PublicInputs extends PublicInputs_base {
}
declare const PublicOutputs_base: (new (value: {
    codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
    codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
    solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
    lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
    lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
    turnCount: UInt8;
    packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
}) => {
    codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
    codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
    solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
    lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
    lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
    turnCount: UInt8;
    packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
}) & {
    _isStruct: true;
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{
    codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
    codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
    solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
    lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
    lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
    turnCount: UInt8;
    packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
}, {
    codeMasterId: bigint;
    codeBreakerId: bigint;
    solutionHash: bigint;
    lastCompressedGuess: bigint;
    lastcompressedClue: bigint;
    turnCount: {
        value: bigint;
    };
    packedGuessHistory: bigint;
    packedClueHistory: bigint;
}>, "fromFields"> & {
    fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => {
        codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
        codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
        solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
        lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
        lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
        turnCount: UInt8;
        packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
        packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    };
} & {
    fromValue: (value: {
        codeMasterId: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        codeBreakerId: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        solutionHash: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        lastCompressedGuess: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        lastcompressedClue: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        turnCount: number | UInt8 | {
            value: string | number | bigint | Field;
        };
        packedGuessHistory: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        packedClueHistory: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
        codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
        solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
        lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
        lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
        turnCount: UInt8;
        packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
        packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    };
    toInput: (x: {
        codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
        codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
        solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
        lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
        lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
        turnCount: UInt8;
        packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
        packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        fields?: Field[] | undefined;
        packed?: [Field, number][] | undefined;
    };
    toJSON: (x: {
        codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
        codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
        solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
        lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
        lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
        turnCount: UInt8;
        packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
        packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        codeMasterId: string;
        codeBreakerId: string;
        solutionHash: string;
        lastCompressedGuess: string;
        lastcompressedClue: string;
        turnCount: {
            value: string;
        };
        packedGuessHistory: string;
        packedClueHistory: string;
    };
    fromJSON: (x: {
        codeMasterId: string;
        codeBreakerId: string;
        solutionHash: string;
        lastCompressedGuess: string;
        lastcompressedClue: string;
        turnCount: {
            value: string;
        };
        packedGuessHistory: string;
        packedClueHistory: string;
    }) => {
        codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
        codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
        solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
        lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
        lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
        turnCount: UInt8;
        packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
        packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    };
    empty: () => {
        codeMasterId: import("o1js/dist/node/lib/provable/field.js").Field;
        codeBreakerId: import("o1js/dist/node/lib/provable/field.js").Field;
        solutionHash: import("o1js/dist/node/lib/provable/field.js").Field;
        lastCompressedGuess: import("o1js/dist/node/lib/provable/field.js").Field;
        lastcompressedClue: import("o1js/dist/node/lib/provable/field.js").Field;
        turnCount: UInt8;
        packedGuessHistory: import("o1js/dist/node/lib/provable/field.js").Field;
        packedClueHistory: import("o1js/dist/node/lib/provable/field.js").Field;
    };
};
/**
 * @param `codeMasterId` and `codeBreakerId` should be same with the on-chain values of players.
 * @param `solutionHash` should also be same with the one on-chain value.
 * @param `lastCompressedGuess` and `lastcompressedClue` are the values obtained from the `makeGuess` and `giveClue` methods, respectively.
 * @param `turnCount` is the turn count of the game. Even turn counts represent the turns of code master and odd turn counts represent the turn of the code breaker.
 * @param `packedGuessHistory` is a compressed data that keeps all guesses done so far.
 * @param `packedClueHistory` is a compressed data that keeps all clues given so far.
 */
declare class PublicOutputs extends PublicOutputs_base {
}
declare const StepProgram: {
    name: string;
    maxProofsVerified(): Promise<0 | 1 | 2>;
    compile: (options?: {
        cache?: import("o1js").Cache;
        forceRecompile?: boolean;
        proofsEnabled?: boolean;
        withRuntimeTables?: boolean;
    }) => Promise<{
        verificationKey: {
            data: string;
            hash: Field;
        };
    }>;
    verify: (proof: import("o1js").Proof<PublicInputs, PublicOutputs>) => Promise<boolean>;
    digest: () => Promise<string>;
    analyzeMethods: () => Promise<{
        createGame: import("o1js/dist/node/lib/provable/core/provable-context.js").ConstraintSystemSummary & {
            proofs: import("o1js/dist/node/lib/proof-system/proof.js").ProofClass[];
        };
        makeGuess: import("o1js/dist/node/lib/provable/core/provable-context.js").ConstraintSystemSummary & {
            proofs: import("o1js/dist/node/lib/proof-system/proof.js").ProofClass[];
        };
        giveClue: import("o1js/dist/node/lib/provable/core/provable-context.js").ConstraintSystemSummary & {
            proofs: import("o1js/dist/node/lib/proof-system/proof.js").ProofClass[];
        };
    }>;
    publicInputType: typeof PublicInputs;
    publicOutputType: typeof PublicOutputs;
    privateInputTypes: {
        createGame: [typeof Combination, typeof import("o1js/dist/node/lib/provable/field.js").Field & ((x: string | number | bigint | import("o1js/dist/node/lib/provable/core/fieldvar.js").FieldConst | import("o1js/dist/node/lib/provable/core/fieldvar.js").FieldVar | import("o1js/dist/node/lib/provable/field.js").Field) => import("o1js/dist/node/lib/provable/field.js").Field), typeof PublicKey];
        makeGuess: [typeof SelfProof, typeof Combination, typeof PublicKey];
        giveClue: [typeof SelfProof, typeof Combination, typeof import("o1js/dist/node/lib/provable/field.js").Field & ((x: string | number | bigint | import("o1js/dist/node/lib/provable/core/fieldvar.js").FieldConst | import("o1js/dist/node/lib/provable/core/fieldvar.js").FieldVar | import("o1js/dist/node/lib/provable/field.js").Field) => import("o1js/dist/node/lib/provable/field.js").Field), typeof PublicKey];
    };
    auxiliaryOutputTypes: {
        createGame: undefined;
        makeGuess: undefined;
        giveClue: undefined;
    };
    rawMethods: {
        createGame: (publicInput: PublicInputs, args_0: Combination, args_1: import("o1js/dist/node/lib/provable/field.js").Field, args_2: PublicKey) => Promise<{
            publicOutput: PublicOutputs;
        }>;
        makeGuess: (publicInput: PublicInputs, args_0: SelfProof<unknown, unknown>, args_1: Combination, args_2: PublicKey) => Promise<{
            publicOutput: PublicOutputs;
        }>;
        giveClue: (publicInput: PublicInputs, args_0: SelfProof<unknown, unknown>, args_1: Combination, args_2: import("o1js/dist/node/lib/provable/field.js").Field, args_3: PublicKey) => Promise<{
            publicOutput: PublicOutputs;
        }>;
    };
    Proof: {
        new ({ proof, publicInput, publicOutput, maxProofsVerified, }: {
            proof: import("o1js/dist/node/snarky.js").Pickles.Proof;
            publicInput: PublicInputs;
            publicOutput: PublicOutputs;
            maxProofsVerified: 0 | 1 | 2;
        }): import("o1js").Proof<PublicInputs, PublicOutputs>;
        fromJSON<S extends import("o1js/dist/node/lib/util/types.js").Subclass<typeof import("o1js").Proof>>(this: S, { maxProofsVerified, proof: proofString, publicInput: publicInputJson, publicOutput: publicOutputJson, }: import("o1js").JsonProof): Promise<import("o1js").Proof<import("o1js").InferProvable<S["publicInputType"]>, import("o1js").InferProvable<S["publicOutputType"]>>>;
        dummy<Input, OutPut>(publicInput: Input, publicOutput: OutPut, maxProofsVerified: 0 | 1 | 2, domainLog2?: number): Promise<import("o1js").Proof<Input, OutPut>>;
        readonly provable: {
            toFields: (value: import("o1js").Proof<any, any>) => import("o1js/dist/node/lib/provable/field.js").Field[];
            toAuxiliary: (value?: import("o1js").Proof<any, any> | undefined) => any[];
            fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[], aux: any[]) => import("o1js").Proof<any, any>;
            sizeInFields(): number;
            check: (value: import("o1js").Proof<any, any>) => void;
            toValue: (x: import("o1js").Proof<any, any>) => import("o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>;
            fromValue: (x: import("o1js").Proof<any, any> | import("o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>) => import("o1js").Proof<any, any>;
            toCanonical?: ((x: import("o1js").Proof<any, any>) => import("o1js").Proof<any, any>) | undefined;
        };
        publicInputType: import("o1js").FlexibleProvable<any>;
        publicOutputType: import("o1js").FlexibleProvable<any>;
        tag: () => {
            name: string;
        };
        publicFields(value: import("o1js").ProofBase): {
            input: import("o1js/dist/node/lib/provable/field.js").Field[];
            output: import("o1js/dist/node/lib/provable/field.js").Field[];
        };
        _proofFromBase64(proofString: import("o1js/dist/node/snarky.js").Base64ProofString, maxProofsVerified: 0 | 1 | 2): unknown;
        _proofToBase64(proof: import("o1js/dist/node/snarky.js").Pickles.Proof, maxProofsVerified: 0 | 1 | 2): string;
    };
    proofsEnabled: boolean;
    setProofsEnabled(proofsEnabled: boolean): void;
} & {
    createGame: (publicInput: PublicInputs | {
        authPubKey: PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        authSignature: Signature | {
            r: Field | bigint;
            s: import("o1js").Scalar | bigint;
        };
    }, args_0: Combination | {
        digits: import("o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
    }, args_1: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field, args_2: PublicKey | {
        x: Field | bigint;
        isOdd: import("o1js").Bool | boolean;
    }) => Promise<{
        proof: import("o1js").Proof<PublicInputs, PublicOutputs>;
        auxiliaryOutput: undefined;
    }>;
    makeGuess: (publicInput: PublicInputs | {
        authPubKey: PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        authSignature: Signature | {
            r: Field | bigint;
            s: import("o1js").Scalar | bigint;
        };
    }, args_0: import("o1js").Proof<any, any> | import("o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>, args_1: Combination | {
        digits: import("o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
    }, args_2: PublicKey | {
        x: Field | bigint;
        isOdd: import("o1js").Bool | boolean;
    }) => Promise<{
        proof: import("o1js").Proof<PublicInputs, PublicOutputs>;
        auxiliaryOutput: undefined;
    }>;
    giveClue: (publicInput: PublicInputs | {
        authPubKey: PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        authSignature: Signature | {
            r: Field | bigint;
            s: import("o1js").Scalar | bigint;
        };
    }, args_0: import("o1js").Proof<any, any> | import("o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>, args_1: Combination | {
        digits: import("o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
    }, args_2: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field, args_3: PublicKey | {
        x: Field | bigint;
        isOdd: import("o1js").Bool | boolean;
    }) => Promise<{
        proof: import("o1js").Proof<PublicInputs, PublicOutputs>;
        auxiliaryOutput: undefined;
    }>;
};
declare const StepProgramProof_base: {
    new ({ proof, publicInput, publicOutput, maxProofsVerified, }: {
        proof: unknown;
        publicInput: PublicInputs;
        publicOutput: PublicOutputs;
        maxProofsVerified: 0 | 2 | 1;
    }): import("o1js").Proof<PublicInputs, PublicOutputs>;
    fromJSON<S extends import("o1js/dist/node/lib/util/types.js").Subclass<typeof import("o1js").Proof>>(this: S, { maxProofsVerified, proof: proofString, publicInput: publicInputJson, publicOutput: publicOutputJson, }: import("o1js").JsonProof): Promise<import("o1js").Proof<import("o1js").InferProvable<S["publicInputType"]>, import("o1js").InferProvable<S["publicOutputType"]>>>;
    dummy<Input, OutPut>(publicInput: Input, publicOutput: OutPut, maxProofsVerified: 0 | 2 | 1, domainLog2?: number): Promise<import("o1js").Proof<Input, OutPut>>;
    readonly provable: {
        toFields: (value: import("o1js").Proof<any, any>) => import("o1js/dist/node/lib/provable/field.js").Field[];
        toAuxiliary: (value?: import("o1js").Proof<any, any> | undefined) => any[];
        fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[], aux: any[]) => import("o1js").Proof<any, any>;
        sizeInFields(): number;
        check: (value: import("o1js").Proof<any, any>) => void;
        toValue: (x: import("o1js").Proof<any, any>) => import("o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>;
        fromValue: (x: import("o1js").Proof<any, any> | import("o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>) => import("o1js").Proof<any, any>;
        toCanonical?: ((x: import("o1js").Proof<any, any>) => import("o1js").Proof<any, any>) | undefined;
    };
    publicInputType: import("o1js").FlexibleProvable<any>;
    publicOutputType: import("o1js").FlexibleProvable<any>;
    tag: () => {
        name: string;
    };
    publicFields(value: import("o1js").ProofBase<any, any>): {
        input: import("o1js/dist/node/lib/provable/field.js").Field[];
        output: import("o1js/dist/node/lib/provable/field.js").Field[];
    };
    _proofFromBase64(proofString: string, maxProofsVerified: 0 | 2 | 1): unknown;
    _proofToBase64(proof: unknown, maxProofsVerified: 0 | 2 | 1): string;
} & {
    provable: import("o1js").Provable<import("o1js").Proof<PublicInputs, PublicOutputs>, import("o1js/dist/node/lib/proof-system/proof.js").ProofValue<{
        authPubKey: {
            x: bigint;
            isOdd: boolean;
        };
        authSignature: any;
    }, {
        codeMasterId: bigint;
        codeBreakerId: bigint;
        solutionHash: bigint;
        lastCompressedGuess: bigint;
        lastcompressedClue: bigint;
        turnCount: {
            value: bigint;
        };
        packedGuessHistory: bigint;
        packedClueHistory: bigint;
    }>>;
};
declare class StepProgramProof extends StepProgramProof_base {
}
