import { Field, JsonProof } from 'o1js';
import { Ticket } from '../Structs/Ticket.js';
import { DistributionProof } from '../Proofs/DistributionProof.js';
import { MerkleMap20, MerkleMap20Witness } from '../Structs/CustomMerkleMap.js';
import { PLottery } from '../PLottery.js';
export declare function mockProof<I, O, P>(publicOutput: O, ProofType: new ({ proof, publicInput, publicOutput, maxProofsVerified, }: {
    proof: unknown;
    publicInput: I;
    publicOutput: any;
    maxProofsVerified: 0 | 2 | 1;
}) => P, publicInput: I): Promise<P>;
export declare class BaseStateManager {
    contract: PLottery;
    ticketMap: MerkleMap20;
    roundTickets: (Ticket | undefined)[];
    lastTicketInRound: number;
    ticketNullifierMap: MerkleMap20;
    startSlot: Field;
    isMock: boolean;
    shouldUpdateState: boolean;
    dpProof: DistributionProof | undefined;
    constructor(contract: PLottery, isMock?: boolean, shouldUpdateState?: boolean);
    addTicket(ticket: Ticket): void;
    getReward(round: number, ticket: Ticket, roundDP?: JsonProof | undefined, ticketIndex?: number): Promise<{
        ticketWitness: MerkleMap20Witness;
        nullifierWitness: MerkleMap20Witness;
    }>;
    getRewardByTicketId(ticketId: number): Promise<{
        ticketWitness: MerkleMap20Witness;
        nullifierWitness: MerkleMap20Witness;
    }>;
    getRefund(round: number, ticket: Ticket): Promise<{
        ticketWitness: MerkleMap20Witness;
    }>;
}
