import { SelfProof } from 'o1js';
export declare const TREE_HEIGHT = 10;
declare const TreeWitness_base: typeof import("o1js/dist/node/lib/merkle_tree").BaseMerkleWitness;
export declare class TreeWitness extends TreeWitness_base {
}
declare const PrivateInput_base: (new (value: {
    witness: TreeWitness;
    secret: import("o1js/dist/node/lib/field").Field;
}) => {
    witness: TreeWitness;
    secret: import("o1js/dist/node/lib/field").Field;
}) & {
    _isStruct: true;
} & import("o1js/dist/node/snarky").ProvablePure<{
    witness: TreeWitness;
    secret: import("o1js/dist/node/lib/field").Field;
}> & {
    toInput: (x: {
        witness: TreeWitness;
        secret: import("o1js/dist/node/lib/field").Field;
    }) => {
        fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
        packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
    };
    toJSON: (x: {
        witness: TreeWitness;
        secret: import("o1js/dist/node/lib/field").Field;
    }) => {
        witness: any;
        secret: string;
    };
    fromJSON: (x: {
        witness: any;
        secret: string;
    }) => {
        witness: TreeWitness;
        secret: import("o1js/dist/node/lib/field").Field;
    };
    empty: () => {
        witness: TreeWitness;
        secret: import("o1js/dist/node/lib/field").Field;
    };
};
export declare class PrivateInput extends PrivateInput_base {
}
declare const PublicInput_base: (new (value: {
    merkleRoot: import("o1js/dist/node/lib/field").Field;
}) => {
    merkleRoot: import("o1js/dist/node/lib/field").Field;
}) & {
    _isStruct: true;
} & import("o1js/dist/node/snarky").ProvablePure<{
    merkleRoot: import("o1js/dist/node/lib/field").Field;
}> & {
    toInput: (x: {
        merkleRoot: import("o1js/dist/node/lib/field").Field;
    }) => {
        fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
        packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
    };
    toJSON: (x: {
        merkleRoot: import("o1js/dist/node/lib/field").Field;
    }) => {
        merkleRoot: string;
    };
    fromJSON: (x: {
        merkleRoot: string;
    }) => {
        merkleRoot: import("o1js/dist/node/lib/field").Field;
    };
    empty: () => {
        merkleRoot: import("o1js/dist/node/lib/field").Field;
    };
};
export declare class PublicInput extends PublicInput_base {
}
declare const PublicOutput_base: (new (value: {
    recursiveHash: import("o1js/dist/node/lib/field").Field;
}) => {
    recursiveHash: import("o1js/dist/node/lib/field").Field;
}) & {
    _isStruct: true;
} & import("o1js/dist/node/snarky").ProvablePure<{
    recursiveHash: import("o1js/dist/node/lib/field").Field;
}> & {
    toInput: (x: {
        recursiveHash: import("o1js/dist/node/lib/field").Field;
    }) => {
        fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
        packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
    };
    toJSON: (x: {
        recursiveHash: import("o1js/dist/node/lib/field").Field;
    }) => {
        recursiveHash: string;
    };
    fromJSON: (x: {
        recursiveHash: string;
    }) => {
        recursiveHash: import("o1js/dist/node/lib/field").Field;
    };
    empty: () => {
        recursiveHash: import("o1js/dist/node/lib/field").Field;
    };
};
export declare class PublicOutput extends PublicOutput_base {
}
/** Prove knowledge of a preimage of a hash in a merkle tree.
 *  The proof does not reveal the preimage nor the hash.
 *  The output contains a recursive hash of all the roots for which the preimage is known.
 *  output = hash(lastRoot + hash(secondLastRoot, ... hash(xLastRoot, lastRoot) ...)
 *  Therefore the order of the proofs matters.
 */
export declare const Program: {
    name: string;
    compile: (options?: {
        cache?: import("o1js/dist/node/lib/proof-system/cache").Cache | undefined;
        forceRecompile?: boolean | undefined;
    } | undefined) => Promise<{
        verificationKey: {
            data: string;
            hash: import("o1js/dist/node/lib/field").Field;
        };
    }>;
    verify: (proof: import("o1js/dist/node/lib/proof_system").Proof<PublicInput, PublicOutput>) => Promise<boolean>;
    digest: () => string;
    analyzeMethods: () => {
        baseCase: {
            rows: number;
            digest: string;
            result: unknown;
            gates: import("o1js/dist/node/snarky").Gate[];
            publicInputSize: number;
            print(): void;
            summary(): Partial<Record<import("o1js/dist/node/snarky").GateType | "Total rows", number>>;
        };
        inductiveCase: {
            rows: number;
            digest: string;
            result: unknown;
            gates: import("o1js/dist/node/snarky").Gate[];
            publicInputSize: number;
            print(): void;
            summary(): Partial<Record<import("o1js/dist/node/snarky").GateType | "Total rows", number>>;
        };
    };
    publicInputType: typeof PublicInput;
    publicOutputType: typeof PublicOutput;
    privateInputTypes: {
        baseCase: [typeof PrivateInput];
        inductiveCase: [typeof SelfProof, typeof PrivateInput];
    };
    rawMethods: {
        baseCase: (publicInput: PublicInput, ...args: [PrivateInput] & any[]) => PublicOutput;
        inductiveCase: (publicInput: PublicInput, ...args: [SelfProof<unknown, unknown>, PrivateInput] & any[]) => PublicOutput;
    };
} & {
    baseCase: (publicInput: PublicInput, ...args: [PrivateInput] & any[]) => Promise<import("o1js/dist/node/lib/proof_system").Proof<PublicInput, PublicOutput>>;
    inductiveCase: (publicInput: PublicInput, ...args: [SelfProof<unknown, unknown>, PrivateInput] & any[]) => Promise<import("o1js/dist/node/lib/proof_system").Proof<PublicInput, PublicOutput>>;
};
export {};
