import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, EventFragment, AddressLike, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedLogDescription, TypedListener, TypedContractMethod } from "../common";
export declare namespace MACI {
    type InitParamsStruct = {
        pollFactory: AddressLike;
        messageProcessorFactory: AddressLike;
        tallyFactory: AddressLike;
        signUpPolicy: AddressLike;
        verifier: AddressLike;
        verifyingKeysRegistry: AddressLike;
        stateTreeDepth: BigNumberish;
        emptyBallotRoots: [
            BigNumberish,
            BigNumberish,
            BigNumberish,
            BigNumberish,
            BigNumberish
        ];
    };
    type InitParamsStructOutput = [
        pollFactory: string,
        messageProcessorFactory: string,
        tallyFactory: string,
        signUpPolicy: string,
        verifier: string,
        verifyingKeysRegistry: string,
        stateTreeDepth: bigint,
        emptyBallotRoots: [bigint, bigint, bigint, bigint, bigint]
    ] & {
        pollFactory: string;
        messageProcessorFactory: string;
        tallyFactory: string;
        signUpPolicy: string;
        verifier: string;
        verifyingKeysRegistry: string;
        stateTreeDepth: bigint;
        emptyBallotRoots: [bigint, bigint, bigint, bigint, bigint];
    };
}
export declare namespace Params {
    type TreeDepthsStruct = {
        tallyProcessingStateTreeDepth: BigNumberish;
        voteOptionTreeDepth: BigNumberish;
        stateTreeDepth: BigNumberish;
    };
    type TreeDepthsStructOutput = [
        tallyProcessingStateTreeDepth: bigint,
        voteOptionTreeDepth: bigint,
        stateTreeDepth: bigint
    ] & {
        tallyProcessingStateTreeDepth: bigint;
        voteOptionTreeDepth: bigint;
        stateTreeDepth: bigint;
    };
}
export declare namespace DomainObjs {
    type PublicKeyStruct = {
        x: BigNumberish;
        y: BigNumberish;
    };
    type PublicKeyStructOutput = [x: bigint, y: bigint] & {
        x: bigint;
        y: bigint;
    };
}
export declare namespace IMACI {
    type DeployPollArgsStruct = {
        startDate: BigNumberish;
        endDate: BigNumberish;
        treeDepths: Params.TreeDepthsStruct;
        messageBatchSize: BigNumberish;
        coordinatorPublicKey: DomainObjs.PublicKeyStruct;
        mode: BigNumberish;
        policy: AddressLike;
        initialVoiceCreditProxy: AddressLike;
        relayers: AddressLike[];
        voteOptions: BigNumberish;
    };
    type DeployPollArgsStructOutput = [
        startDate: bigint,
        endDate: bigint,
        treeDepths: Params.TreeDepthsStructOutput,
        messageBatchSize: bigint,
        coordinatorPublicKey: DomainObjs.PublicKeyStructOutput,
        mode: bigint,
        policy: string,
        initialVoiceCreditProxy: string,
        relayers: string[],
        voteOptions: bigint
    ] & {
        startDate: bigint;
        endDate: bigint;
        treeDepths: Params.TreeDepthsStructOutput;
        messageBatchSize: bigint;
        coordinatorPublicKey: DomainObjs.PublicKeyStructOutput;
        mode: bigint;
        policy: string;
        initialVoiceCreditProxy: string;
        relayers: string[];
        voteOptions: bigint;
    };
    type PollContractsStruct = {
        poll: AddressLike;
        messageProcessor: AddressLike;
        tally: AddressLike;
    };
    type PollContractsStructOutput = [
        poll: string,
        messageProcessor: string,
        tally: string
    ] & {
        poll: string;
        messageProcessor: string;
        tally: string;
    };
}
export interface MACIInterface extends Interface {
    getFunction(nameOrSignature: "MESSAGE_DATA_LENGTH" | "deployPoll" | "emptyBallotRoots" | "getPoll" | "getStateIndex" | "getStateRootOnIndexedSignUp" | "getStateTreeRoot" | "hash2" | "hash3" | "hash4" | "hash5" | "hashLeftRight" | "leanIMTData" | "maxSignups" | "messageProcessorFactory" | "nextPollId" | "pollFactory" | "polls" | "sha256Hash" | "signUp" | "signUpPolicy" | "stateRootsOnSignUp" | "stateTreeDepth" | "tallyFactory" | "totalSignups" | "verifier" | "verifyingKeysRegistry"): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: "DeployPoll" | "SignUp"): EventFragment;
    encodeFunctionData(functionFragment: "MESSAGE_DATA_LENGTH", values?: undefined): string;
    encodeFunctionData(functionFragment: "deployPoll", values: [IMACI.DeployPollArgsStruct]): string;
    encodeFunctionData(functionFragment: "emptyBallotRoots", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "getPoll", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "getStateIndex", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "getStateRootOnIndexedSignUp", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "getStateTreeRoot", values?: undefined): string;
    encodeFunctionData(functionFragment: "hash2", values: [[BigNumberish, BigNumberish]]): string;
    encodeFunctionData(functionFragment: "hash3", values: [[BigNumberish, BigNumberish, BigNumberish]]): string;
    encodeFunctionData(functionFragment: "hash4", values: [[BigNumberish, BigNumberish, BigNumberish, BigNumberish]]): string;
    encodeFunctionData(functionFragment: "hash5", values: [
        [
            BigNumberish,
            BigNumberish,
            BigNumberish,
            BigNumberish,
            BigNumberish
        ]
    ]): string;
    encodeFunctionData(functionFragment: "hashLeftRight", values: [BigNumberish, BigNumberish]): string;
    encodeFunctionData(functionFragment: "leanIMTData", values?: undefined): string;
    encodeFunctionData(functionFragment: "maxSignups", values?: undefined): string;
    encodeFunctionData(functionFragment: "messageProcessorFactory", values?: undefined): string;
    encodeFunctionData(functionFragment: "nextPollId", values?: undefined): string;
    encodeFunctionData(functionFragment: "pollFactory", values?: undefined): string;
    encodeFunctionData(functionFragment: "polls", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "sha256Hash", values: [BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "signUp", values: [DomainObjs.PublicKeyStruct, BytesLike]): string;
    encodeFunctionData(functionFragment: "signUpPolicy", values?: undefined): string;
    encodeFunctionData(functionFragment: "stateRootsOnSignUp", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "stateTreeDepth", values?: undefined): string;
    encodeFunctionData(functionFragment: "tallyFactory", values?: undefined): string;
    encodeFunctionData(functionFragment: "totalSignups", values?: undefined): string;
    encodeFunctionData(functionFragment: "verifier", values?: undefined): string;
    encodeFunctionData(functionFragment: "verifyingKeysRegistry", values?: undefined): string;
    decodeFunctionResult(functionFragment: "MESSAGE_DATA_LENGTH", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "deployPoll", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "emptyBallotRoots", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getPoll", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getStateIndex", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getStateRootOnIndexedSignUp", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getStateTreeRoot", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hash2", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hash3", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hash4", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hash5", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hashLeftRight", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "leanIMTData", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "maxSignups", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "messageProcessorFactory", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "nextPollId", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "pollFactory", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "polls", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "sha256Hash", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "signUp", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "signUpPolicy", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "stateRootsOnSignUp", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "stateTreeDepth", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "tallyFactory", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "totalSignups", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "verifier", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "verifyingKeysRegistry", data: BytesLike): Result;
}
export declare namespace DeployPollEvent {
    type InputTuple = [
        _pollId: BigNumberish,
        _coordinatorPublicKeyX: BigNumberish,
        _coordinatorPublicKeyY: BigNumberish,
        _mode: BigNumberish
    ];
    type OutputTuple = [
        _pollId: bigint,
        _coordinatorPublicKeyX: bigint,
        _coordinatorPublicKeyY: bigint,
        _mode: bigint
    ];
    interface OutputObject {
        _pollId: bigint;
        _coordinatorPublicKeyX: bigint;
        _coordinatorPublicKeyY: bigint;
        _mode: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SignUpEvent {
    type InputTuple = [
        _stateIndex: BigNumberish,
        _timestamp: BigNumberish,
        _userPublicKeyX: BigNumberish,
        _userPublicKeyY: BigNumberish
    ];
    type OutputTuple = [
        _stateIndex: bigint,
        _timestamp: bigint,
        _userPublicKeyX: bigint,
        _userPublicKeyY: bigint
    ];
    interface OutputObject {
        _stateIndex: bigint;
        _timestamp: bigint;
        _userPublicKeyX: bigint;
        _userPublicKeyY: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface MACI extends BaseContract {
    connect(runner?: ContractRunner | null): MACI;
    waitForDeployment(): Promise<this>;
    interface: MACIInterface;
    queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
    listeners(eventName?: string): Promise<Array<Listener>>;
    removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
    MESSAGE_DATA_LENGTH: TypedContractMethod<[], [bigint], "view">;
    deployPoll: TypedContractMethod<[
        args: IMACI.DeployPollArgsStruct
    ], [
        IMACI.PollContractsStructOutput
    ], "nonpayable">;
    emptyBallotRoots: TypedContractMethod<[arg0: BigNumberish], [bigint], "view">;
    getPoll: TypedContractMethod<[
        _pollId: BigNumberish
    ], [
        IMACI.PollContractsStructOutput
    ], "view">;
    getStateIndex: TypedContractMethod<[
        _publicKeyHash: BigNumberish
    ], [
        bigint
    ], "view">;
    getStateRootOnIndexedSignUp: TypedContractMethod<[
        _index: BigNumberish
    ], [
        bigint
    ], "view">;
    getStateTreeRoot: TypedContractMethod<[], [bigint], "view">;
    hash2: TypedContractMethod<[
        array: [BigNumberish, BigNumberish]
    ], [
        bigint
    ], "view">;
    hash3: TypedContractMethod<[
        array: [BigNumberish, BigNumberish, BigNumberish]
    ], [
        bigint
    ], "view">;
    hash4: TypedContractMethod<[
        array: [BigNumberish, BigNumberish, BigNumberish, BigNumberish]
    ], [
        bigint
    ], "view">;
    hash5: TypedContractMethod<[
        array: [
            BigNumberish,
            BigNumberish,
            BigNumberish,
            BigNumberish,
            BigNumberish
        ]
    ], [
        bigint
    ], "view">;
    hashLeftRight: TypedContractMethod<[
        left: BigNumberish,
        right: BigNumberish
    ], [
        bigint
    ], "view">;
    leanIMTData: TypedContractMethod<[
    ], [
        [bigint, bigint] & {
            size: bigint;
            depth: bigint;
        }
    ], "view">;
    maxSignups: TypedContractMethod<[], [bigint], "view">;
    messageProcessorFactory: TypedContractMethod<[], [string], "view">;
    nextPollId: TypedContractMethod<[], [bigint], "view">;
    pollFactory: TypedContractMethod<[], [string], "view">;
    polls: TypedContractMethod<[
        arg0: BigNumberish
    ], [
        [
            string,
            string,
            string
        ] & {
            poll: string;
            messageProcessor: string;
            tally: string;
        }
    ], "view">;
    sha256Hash: TypedContractMethod<[array: BigNumberish[]], [bigint], "view">;
    signUp: TypedContractMethod<[
        _publicKey: DomainObjs.PublicKeyStruct,
        _signUpPolicyData: BytesLike
    ], [
        void
    ], "nonpayable">;
    signUpPolicy: TypedContractMethod<[], [string], "view">;
    stateRootsOnSignUp: TypedContractMethod<[
        arg0: BigNumberish
    ], [
        bigint
    ], "view">;
    stateTreeDepth: TypedContractMethod<[], [bigint], "view">;
    tallyFactory: TypedContractMethod<[], [string], "view">;
    totalSignups: TypedContractMethod<[], [bigint], "view">;
    verifier: TypedContractMethod<[], [string], "view">;
    verifyingKeysRegistry: TypedContractMethod<[], [string], "view">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "MESSAGE_DATA_LENGTH"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "deployPoll"): TypedContractMethod<[
        args: IMACI.DeployPollArgsStruct
    ], [
        IMACI.PollContractsStructOutput
    ], "nonpayable">;
    getFunction(nameOrSignature: "emptyBallotRoots"): TypedContractMethod<[arg0: BigNumberish], [bigint], "view">;
    getFunction(nameOrSignature: "getPoll"): TypedContractMethod<[
        _pollId: BigNumberish
    ], [
        IMACI.PollContractsStructOutput
    ], "view">;
    getFunction(nameOrSignature: "getStateIndex"): TypedContractMethod<[_publicKeyHash: BigNumberish], [bigint], "view">;
    getFunction(nameOrSignature: "getStateRootOnIndexedSignUp"): TypedContractMethod<[_index: BigNumberish], [bigint], "view">;
    getFunction(nameOrSignature: "getStateTreeRoot"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "hash2"): TypedContractMethod<[
        array: [BigNumberish, BigNumberish]
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "hash3"): TypedContractMethod<[
        array: [BigNumberish, BigNumberish, BigNumberish]
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "hash4"): TypedContractMethod<[
        array: [BigNumberish, BigNumberish, BigNumberish, BigNumberish]
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "hash5"): TypedContractMethod<[
        array: [
            BigNumberish,
            BigNumberish,
            BigNumberish,
            BigNumberish,
            BigNumberish
        ]
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "hashLeftRight"): TypedContractMethod<[
        left: BigNumberish,
        right: BigNumberish
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "leanIMTData"): TypedContractMethod<[
    ], [
        [bigint, bigint] & {
            size: bigint;
            depth: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "maxSignups"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "messageProcessorFactory"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "nextPollId"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "pollFactory"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "polls"): TypedContractMethod<[
        arg0: BigNumberish
    ], [
        [
            string,
            string,
            string
        ] & {
            poll: string;
            messageProcessor: string;
            tally: string;
        }
    ], "view">;
    getFunction(nameOrSignature: "sha256Hash"): TypedContractMethod<[array: BigNumberish[]], [bigint], "view">;
    getFunction(nameOrSignature: "signUp"): TypedContractMethod<[
        _publicKey: DomainObjs.PublicKeyStruct,
        _signUpPolicyData: BytesLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "signUpPolicy"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "stateRootsOnSignUp"): TypedContractMethod<[arg0: BigNumberish], [bigint], "view">;
    getFunction(nameOrSignature: "stateTreeDepth"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "tallyFactory"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "totalSignups"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "verifier"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "verifyingKeysRegistry"): TypedContractMethod<[], [string], "view">;
    getEvent(key: "DeployPoll"): TypedContractEvent<DeployPollEvent.InputTuple, DeployPollEvent.OutputTuple, DeployPollEvent.OutputObject>;
    getEvent(key: "SignUp"): TypedContractEvent<SignUpEvent.InputTuple, SignUpEvent.OutputTuple, SignUpEvent.OutputObject>;
    filters: {
        "DeployPoll(uint256,uint256,uint256,uint8)": TypedContractEvent<DeployPollEvent.InputTuple, DeployPollEvent.OutputTuple, DeployPollEvent.OutputObject>;
        DeployPoll: TypedContractEvent<DeployPollEvent.InputTuple, DeployPollEvent.OutputTuple, DeployPollEvent.OutputObject>;
        "SignUp(uint256,uint256,uint256,uint256)": TypedContractEvent<SignUpEvent.InputTuple, SignUpEvent.OutputTuple, SignUpEvent.OutputObject>;
        SignUp: TypedContractEvent<SignUpEvent.InputTuple, SignUpEvent.OutputTuple, SignUpEvent.OutputObject>;
    };
}
//# sourceMappingURL=MACI.d.ts.map