import { Field, MerkleList, SelfProof, UInt64 } from 'o1js';
import { Ticket } from '../Structs/Ticket.js';
import { MerkleMap20Witness } from '../Structs/CustomMerkleMap.js';
declare const LotteryAction_base: (new (value: {
    ticket: Ticket;
}) => {
    ticket: Ticket;
}) & {
    _isStruct: true;
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{
    ticket: Ticket;
}, {
    ticket: {
        numbers: bigint[];
        owner: {
            x: bigint;
            isOdd: boolean;
        };
        amount: bigint;
    };
}>, "fromFields"> & {
    fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => {
        ticket: Ticket;
    };
} & {
    fromValue: (value: {
        ticket: Ticket | {
            numbers: import("o1js").UInt32[] | bigint[];
            owner: import("o1js").PublicKey | {
                x: Field | bigint;
                isOdd: import("o1js").Bool | boolean;
            };
            amount: bigint | UInt64;
        };
    }) => {
        ticket: Ticket;
    };
    toInput: (x: {
        ticket: Ticket;
    }) => {
        fields?: Field[] | undefined;
        packed?: [Field, number][] | undefined;
    };
    toJSON: (x: {
        ticket: Ticket;
    }) => {
        ticket: {
            numbers: string[];
            owner: string;
            amount: string;
        };
    };
    fromJSON: (x: {
        ticket: {
            numbers: string[];
            owner: string;
            amount: string;
        };
    }) => {
        ticket: Ticket;
    };
    empty: () => {
        ticket: Ticket;
    };
};
export declare class LotteryAction extends LotteryAction_base {
}
export declare const actionListAdd: (hash: Field, action: LotteryAction) => Field;
declare const ActionList_base: {
    new ({ hash, data }: import("o1js/dist/node/lib/provable/merkle-list.js").MerkleListBase<{
        ticket: Ticket;
    }>): MerkleList<{
        ticket: Ticket;
    }>;
    create<T>(type: import("o1js/dist/node/lib/provable/types/provable-intf.js").WithProvable<import("o1js").ProvableHashable<T>>, nextHash?: (hash: Field, value: T) => Field, emptyHash_?: import("o1js/dist/node/lib/provable/field.js").Field): typeof MerkleList<T> & {
        empty: () => MerkleList<T>;
        from: (array: T[]) => MerkleList<T>;
        fromReverse: (array: T[]) => MerkleList<T>;
        provable: import("o1js").ProvableHashable<MerkleList<T>>;
    };
    _nextHash: ((hash: Field, t: any) => Field) | undefined;
    _emptyHash: Field | undefined;
    _provable: import("o1js").ProvableHashable<MerkleList<any>> | undefined;
    _innerProvable: import("o1js").ProvableHashable<any> | undefined;
    readonly emptyHash: import("o1js/dist/node/lib/provable/field.js").Field;
} & {
    empty: () => MerkleList<{
        ticket: Ticket;
    }>;
    from: (array: {
        ticket: Ticket;
    }[]) => MerkleList<{
        ticket: Ticket;
    }>;
    fromReverse: (array: {
        ticket: Ticket;
    }[]) => MerkleList<{
        ticket: Ticket;
    }>;
    provable: import("o1js").ProvableHashable<MerkleList<{
        ticket: Ticket;
    }>>;
};
export declare class ActionList extends ActionList_base {
}
export declare const merkleActionsAdd: (hash: Field, actionsHash: Field) => Field;
declare const MerkleActions_base: {
    new ({ hash, data }: import("o1js/dist/node/lib/provable/merkle-list.js").MerkleListBase<MerkleList<{
        ticket: Ticket;
    }>>): MerkleList<MerkleList<{
        ticket: Ticket;
    }>>;
    create<T>(type: import("o1js/dist/node/lib/provable/types/provable-intf.js").WithProvable<import("o1js").ProvableHashable<T>>, nextHash?: (hash: Field, value: T) => Field, emptyHash_?: import("o1js/dist/node/lib/provable/field.js").Field): typeof MerkleList<T> & {
        empty: () => MerkleList<T>;
        from: (array: T[]) => MerkleList<T>;
        fromReverse: (array: T[]) => MerkleList<T>;
        provable: import("o1js").ProvableHashable<MerkleList<T>>;
    };
    _nextHash: ((hash: Field, t: any) => Field) | undefined;
    _emptyHash: Field | undefined;
    _provable: import("o1js").ProvableHashable<MerkleList<any>> | undefined;
    _innerProvable: import("o1js").ProvableHashable<any> | undefined;
    readonly emptyHash: import("o1js/dist/node/lib/provable/field.js").Field;
} & {
    empty: () => MerkleList<MerkleList<{
        ticket: Ticket;
    }>>;
    from: (array: MerkleList<{
        ticket: Ticket;
    }>[]) => MerkleList<MerkleList<{
        ticket: Ticket;
    }>>;
    fromReverse: (array: MerkleList<{
        ticket: Ticket;
    }>[]) => MerkleList<MerkleList<{
        ticket: Ticket;
    }>>;
    provable: import("o1js").ProvableHashable<MerkleList<MerkleList<{
        ticket: Ticket;
    }>>>;
};
export declare class MerkleActions extends MerkleActions_base {
}
declare const TicketReduceProofPublicInput_base: (new (value: {
    action: LotteryAction;
    ticketWitness: MerkleMap20Witness;
}) => {
    action: LotteryAction;
    ticketWitness: MerkleMap20Witness;
}) & {
    _isStruct: true;
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{
    action: LotteryAction;
    ticketWitness: MerkleMap20Witness;
}, {
    action: {
        ticket: {
            numbers: bigint[];
            owner: {
                x: bigint;
                isOdd: boolean;
            };
            amount: bigint;
        };
    };
    ticketWitness: {
        isLefts: boolean[];
        siblings: bigint[];
    };
}>, "fromFields"> & {
    fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => {
        action: LotteryAction;
        ticketWitness: MerkleMap20Witness;
    };
} & {
    fromValue: (value: {
        action: LotteryAction | {
            ticket: Ticket | {
                numbers: import("o1js").UInt32[] | bigint[];
                owner: import("o1js").PublicKey | {
                    x: Field | bigint;
                    isOdd: import("o1js").Bool | boolean;
                };
                amount: bigint | UInt64;
            };
        };
        ticketWitness: MerkleMap20Witness | {
            isLefts: import("o1js/dist/node/lib/provable/bool.js").Bool[] | boolean[];
            siblings: import("o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
        };
    }) => {
        action: LotteryAction;
        ticketWitness: MerkleMap20Witness;
    };
    toInput: (x: {
        action: LotteryAction;
        ticketWitness: MerkleMap20Witness;
    }) => {
        fields?: Field[] | undefined;
        packed?: [Field, number][] | undefined;
    };
    toJSON: (x: {
        action: LotteryAction;
        ticketWitness: MerkleMap20Witness;
    }) => {
        action: {
            ticket: {
                numbers: string[];
                owner: string;
                amount: string;
            };
        };
        ticketWitness: {
            isLefts: boolean[];
            siblings: string[];
        };
    };
    fromJSON: (x: {
        action: {
            ticket: {
                numbers: string[];
                owner: string;
                amount: string;
            };
        };
        ticketWitness: {
            isLefts: boolean[];
            siblings: string[];
        };
    }) => {
        action: LotteryAction;
        ticketWitness: MerkleMap20Witness;
    };
    empty: () => {
        action: LotteryAction;
        ticketWitness: MerkleMap20Witness;
    };
};
export declare class TicketReduceProofPublicInput extends TicketReduceProofPublicInput_base {
}
declare const TicketReduceProofPublicOutput_base: (new (value: {
    finalState: import("o1js/dist/node/lib/provable/field.js").Field;
    newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
    newBank: import("o1js/dist/node/lib/provable/field.js").Field;
    totalScore: UInt64;
    processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
    lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
    winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
}) => {
    finalState: import("o1js/dist/node/lib/provable/field.js").Field;
    newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
    newBank: import("o1js/dist/node/lib/provable/field.js").Field;
    totalScore: UInt64;
    processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
    lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
    winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
}) & {
    _isStruct: true;
} & Omit<import("o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{
    finalState: import("o1js/dist/node/lib/provable/field.js").Field;
    newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
    newBank: import("o1js/dist/node/lib/provable/field.js").Field;
    totalScore: UInt64;
    processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
    lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
    winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
}, {
    finalState: bigint;
    newTicketRoot: bigint;
    newBank: bigint;
    totalScore: bigint;
    processedActionList: bigint;
    lastProcessedTicketId: bigint;
    winningNumbersPacked: bigint;
}>, "fromFields"> & {
    fromFields: (fields: import("o1js/dist/node/lib/provable/field.js").Field[]) => {
        finalState: import("o1js/dist/node/lib/provable/field.js").Field;
        newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
        newBank: import("o1js/dist/node/lib/provable/field.js").Field;
        totalScore: UInt64;
        processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
        lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
        winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
    };
} & {
    fromValue: (value: {
        finalState: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        newTicketRoot: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        newBank: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        totalScore: bigint | UInt64;
        processedActionList: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        lastProcessedTicketId: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
        winningNumbersPacked: string | number | bigint | import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        finalState: import("o1js/dist/node/lib/provable/field.js").Field;
        newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
        newBank: import("o1js/dist/node/lib/provable/field.js").Field;
        totalScore: UInt64;
        processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
        lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
        winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
    };
    toInput: (x: {
        finalState: import("o1js/dist/node/lib/provable/field.js").Field;
        newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
        newBank: import("o1js/dist/node/lib/provable/field.js").Field;
        totalScore: UInt64;
        processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
        lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
        winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        fields?: Field[] | undefined;
        packed?: [Field, number][] | undefined;
    };
    toJSON: (x: {
        finalState: import("o1js/dist/node/lib/provable/field.js").Field;
        newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
        newBank: import("o1js/dist/node/lib/provable/field.js").Field;
        totalScore: UInt64;
        processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
        lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
        winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
    }) => {
        finalState: string;
        newTicketRoot: string;
        newBank: string;
        totalScore: string;
        processedActionList: string;
        lastProcessedTicketId: string;
        winningNumbersPacked: string;
    };
    fromJSON: (x: {
        finalState: string;
        newTicketRoot: string;
        newBank: string;
        totalScore: string;
        processedActionList: string;
        lastProcessedTicketId: string;
        winningNumbersPacked: string;
    }) => {
        finalState: import("o1js/dist/node/lib/provable/field.js").Field;
        newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
        newBank: import("o1js/dist/node/lib/provable/field.js").Field;
        totalScore: UInt64;
        processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
        lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
        winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
    };
    empty: () => {
        finalState: import("o1js/dist/node/lib/provable/field.js").Field;
        newTicketRoot: import("o1js/dist/node/lib/provable/field.js").Field;
        newBank: import("o1js/dist/node/lib/provable/field.js").Field;
        totalScore: UInt64;
        processedActionList: import("o1js/dist/node/lib/provable/field.js").Field;
        lastProcessedTicketId: import("o1js/dist/node/lib/provable/field.js").Field;
        winningNumbersPacked: import("o1js/dist/node/lib/provable/field.js").Field;
    };
};
export declare class TicketReduceProofPublicOutput extends TicketReduceProofPublicOutput_base {
}
export declare const init: (input: TicketReduceProofPublicInput, winningNumbersPacked: Field) => Promise<TicketReduceProofPublicOutput>;
export declare const addTicket: (input: TicketReduceProofPublicInput, prevProof: SelfProof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>) => Promise<TicketReduceProofPublicOutput>;
export declare const cutActions: (input: TicketReduceProofPublicInput, prevProof: SelfProof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>) => Promise<TicketReduceProofPublicOutput>;
export declare const refund: (input: TicketReduceProofPublicInput, prevProof: SelfProof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>) => Promise<TicketReduceProofPublicOutput>;
export declare const TicketReduceProgram: {
    name: string;
    compile: (options?: {
        cache?: import("o1js").Cache;
        forceRecompile?: boolean;
        proofsEnabled?: boolean;
    }) => Promise<{
        verificationKey: {
            data: string;
            hash: Field;
        };
    }>;
    verify: (proof: import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>) => Promise<boolean>;
    digest: () => Promise<string>;
    analyzeMethods: () => Promise<{
        init: {
            rows: number;
            digest: string;
            gates: import("o1js/dist/node/snarky.js").Gate[];
            publicInputSize: number;
            print(): void;
            summary(): Partial<Record<import("o1js/dist/node/snarky.js").GateType | "Total rows", number>>;
        };
        addTicket: {
            rows: number;
            digest: string;
            gates: import("o1js/dist/node/snarky.js").Gate[];
            publicInputSize: number;
            print(): void;
            summary(): Partial<Record<import("o1js/dist/node/snarky.js").GateType | "Total rows", number>>;
        };
        cutActions: {
            rows: number;
            digest: string;
            gates: import("o1js/dist/node/snarky.js").Gate[];
            publicInputSize: number;
            print(): void;
            summary(): Partial<Record<import("o1js/dist/node/snarky.js").GateType | "Total rows", number>>;
        };
        refund: {
            rows: number;
            digest: string;
            gates: import("o1js/dist/node/snarky.js").Gate[];
            publicInputSize: number;
            print(): void;
            summary(): Partial<Record<import("o1js/dist/node/snarky.js").GateType | "Total rows", number>>;
        };
    }>;
    publicInputType: typeof TicketReduceProofPublicInput;
    publicOutputType: typeof TicketReduceProofPublicOutput;
    privateInputTypes: {
        init: [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)];
        addTicket: [typeof SelfProof];
        cutActions: [typeof SelfProof];
        refund: [typeof SelfProof];
    };
    rawMethods: {
        init: (publicInput: TicketReduceProofPublicInput, ...args: [import("o1js/dist/node/lib/provable/field.js").Field] & any[]) => Promise<TicketReduceProofPublicOutput>;
        addTicket: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<TicketReduceProofPublicOutput>;
        cutActions: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<TicketReduceProofPublicOutput>;
        refund: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<TicketReduceProofPublicOutput>;
    };
    proofsEnabled: boolean;
    setProofsEnabled(proofsEnabled: boolean): void;
} & {
    init: (publicInput: TicketReduceProofPublicInput, ...args: [import("o1js/dist/node/lib/provable/field.js").Field] & any[]) => Promise<import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>>;
    addTicket: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>>;
    cutActions: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>>;
    refund: (publicInput: TicketReduceProofPublicInput, ...args: [SelfProof<unknown, unknown>] & any[]) => Promise<import("o1js").Proof<TicketReduceProofPublicInput, TicketReduceProofPublicOutput>>;
};
declare const TicketReduceProof_base: {
    new ({ proof, publicInput, publicOutput, maxProofsVerified, }: {
        proof: unknown;
        publicInput: TicketReduceProofPublicInput;
        publicOutput: TicketReduceProofPublicOutput;
        maxProofsVerified: 0 | 2 | 1;
    }): {
        verify(): void;
        verifyIf(condition: import("o1js/dist/node/lib/provable/bool.js").Bool): void;
        publicInput: TicketReduceProofPublicInput;
        publicOutput: TicketReduceProofPublicOutput;
        proof: unknown;
        maxProofsVerified: 0 | 2 | 1;
        shouldVerify: import("o1js/dist/node/lib/provable/bool.js").Bool;
        toJSON(): import("o1js").JsonProof;
    };
    publicInputType: typeof TicketReduceProofPublicInput;
    publicOutputType: typeof TicketReduceProofPublicOutput;
    tag: () => {
        name: string;
        publicInputType: typeof TicketReduceProofPublicInput;
        publicOutputType: typeof TicketReduceProofPublicOutput;
    };
    fromJSON<S extends (new (...args: any) => import("o1js").Proof<unknown, unknown>) & {
        prototype: import("o1js").Proof<any, any>;
        fromJSON: typeof import("o1js").Proof.fromJSON;
        dummy: typeof import("o1js").Proof.dummy;
        publicInputType: import("o1js").FlexibleProvablePure<any>;
        publicOutputType: import("o1js").FlexibleProvablePure<any>;
        tag: () => {
            name: string;
        };
    } & {
        prototype: import("o1js").Proof<unknown, unknown>;
    }>(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>>;
};
export declare class TicketReduceProof extends TicketReduceProof_base {
}
export {};
