import { Field, type ProvableType } from 'o1js';
import { type EthVerifier } from './ethVerifier.js';
import { type Tuple } from 'o1js/dist/node/lib/util/types.js';
import { type PrivateInput, type ZkProgram as ZkProgramFunc } from 'o1js/dist/node/lib/proof-system/zkprogram.js';
import { type ConversionOutput, type SP1ProofWithPublicValuesPlonkNoTee } from '@nori-zk/proof-conversion/build/src/index.min.js';
export type Constructor<T = unknown> = new (...args: any[]) => T;
export type ZkProgram<Config extends {
    publicInput?: ProvableType;
    publicOutput?: ProvableType;
    methods: {
        [I in string]: {
            privateInputs: Tuple<PrivateInput>;
            auxiliaryOutput?: ProvableType;
        };
    };
}> = ReturnType<typeof ZkProgramFunc<Config>>;
export type CompilableZkProgram = {
    compile: (options?: unknown) => Promise<{
        verificationKey: {
            data: string;
            hash: Field;
        };
    }>;
};
export interface CreateProofArgument {
    sp1PlonkProof: SP1ProofWithPublicValuesPlonkNoTee;
    conversionOutputProof: ConversionOutput;
}
export type EthVerifierComputeOutput = Awaited<ReturnType<typeof EthVerifier.compute>>;
export type VerificationKey = {
    data: string;
    hash: Field;
};
declare const Bytes32_base: typeof import("o1js/dist/node/lib/provable/bytes.js").Bytes;
export declare class Bytes32 extends Bytes32_base {
    static get zero(): Bytes32;
}
declare const Bytes20_base: typeof import("o1js/dist/node/lib/provable/bytes.js").Bytes;
export declare class Bytes20 extends Bytes20_base {
    static get zero(): Bytes20;
    static fromHex(hex: string): Bytes20;
    toField(): Field;
}
export declare function bytes32FieldPairToBytes32(highByteField: Field, lowerBytesField: Field): import("o1js/dist/node/lib/provable/bytes.js").Bytes;
declare const Bytes32FieldPair_base: (new (value: {
    highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
    lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
}) => {
    highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
    lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
}) & {
    _isStruct: true;
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{
    highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
    lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
}, {
    highByteField: bigint;
    lowerBytesField: bigint;
}>, "fromFields"> & {
    fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => {
        highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
        lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
    };
} & {
    fromValue: (value: {
        highByteField: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        lowerBytesField: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
        lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
    };
    toInput: (x: {
        highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
        lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        fields?: Field[] | undefined;
        packed?: [Field, number][] | undefined;
    };
    toJSON: (x: {
        highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
        lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        highByteField: string;
        lowerBytesField: string;
    };
    fromJSON: (x: {
        highByteField: string;
        lowerBytesField: string;
    }) => {
        highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
        lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
    };
    empty: () => {
        highByteField: import("o1js/dist/node/lib/provable/field.js").Field;
        lowerBytesField: import("o1js/dist/node/lib/provable/field.js").Field;
    };
};
export declare class Bytes32FieldPair extends Bytes32FieldPair_base {
    static fromBytes32(bytes32: Bytes32): Bytes32FieldPair;
    toBytes32(): Bytes32;
}
export {};
