import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
import type { FunctionFragment, Result, EventFragment } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from "./common";
export declare type BaseVotingWeightInfoStruct = {
    ownWeight: PromiseOrValue<BigNumberish>;
    votingAgent: PromiseOrValue<string>;
    delegationStatus: PromiseOrValue<BigNumberish>;
    lockedUntil: PromiseOrValue<BigNumberish>;
};
export declare type BaseVotingWeightInfoStructOutput = [
    BigNumber,
    string,
    number,
    BigNumber
] & {
    ownWeight: BigNumber;
    votingAgent: string;
    delegationStatus: number;
    lockedUntil: BigNumber;
};
export declare namespace IVoting {
    type VotingParamsStruct = {
        votingStartTime: PromiseOrValue<BigNumberish>;
        votingEndTime: PromiseOrValue<BigNumberish>;
        vetoEndTime: PromiseOrValue<BigNumberish>;
        proposalExecutionP: PromiseOrValue<BigNumberish>;
        requiredQuorum: PromiseOrValue<BigNumberish>;
        requiredMajority: PromiseOrValue<BigNumberish>;
        requiredSMajority: PromiseOrValue<BigNumberish>;
        requiredSQuorum: PromiseOrValue<BigNumberish>;
    };
    type VotingParamsStructOutput = [
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        votingStartTime: BigNumber;
        votingEndTime: BigNumber;
        vetoEndTime: BigNumber;
        proposalExecutionP: BigNumber;
        requiredQuorum: BigNumber;
        requiredMajority: BigNumber;
        requiredSMajority: BigNumber;
        requiredSQuorum: BigNumber;
    };
    type VotingCountersStruct = {
        weightFor: PromiseOrValue<BigNumberish>;
        weightAgainst: PromiseOrValue<BigNumberish>;
        vetosCount: PromiseOrValue<BigNumberish>;
    };
    type VotingCountersStructOutput = [BigNumber, BigNumber, BigNumber] & {
        weightFor: BigNumber;
        weightAgainst: BigNumber;
        vetosCount: BigNumber;
    };
    type BaseProposalStruct = {
        remark: PromiseOrValue<string>;
        params: IVoting.VotingParamsStruct;
        counters: IVoting.VotingCountersStruct;
        executed: PromiseOrValue<boolean>;
    };
    type BaseProposalStructOutput = [
        string,
        IVoting.VotingParamsStructOutput,
        IVoting.VotingCountersStructOutput,
        boolean
    ] & {
        remark: string;
        params: IVoting.VotingParamsStructOutput;
        counters: IVoting.VotingCountersStructOutput;
        executed: boolean;
    };
    type VotingStatsStruct = {
        requiredQuorum: PromiseOrValue<BigNumberish>;
        currentQuorum: PromiseOrValue<BigNumberish>;
        requiredMajority: PromiseOrValue<BigNumberish>;
        currentMajority: PromiseOrValue<BigNumberish>;
        currentVetoPercentage: PromiseOrValue<BigNumberish>;
    };
    type VotingStatsStructOutput = [
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        requiredQuorum: BigNumber;
        currentQuorum: BigNumber;
        requiredMajority: BigNumber;
        currentMajority: BigNumber;
        currentVetoPercentage: BigNumber;
    };
}
export declare namespace IQthVoting {
    type VotingWeightInfoStruct = {
        hasAlreadyVoted: PromiseOrValue<boolean>;
        canVote: PromiseOrValue<boolean>;
        base: BaseVotingWeightInfoStruct;
    };
    type VotingWeightInfoStructOutput = [
        boolean,
        boolean,
        BaseVotingWeightInfoStructOutput
    ] & {
        hasAlreadyVoted: boolean;
        canVote: boolean;
        base: BaseVotingWeightInfoStructOutput;
    };
}
export interface IConstitutionVotingInterface extends utils.Interface {
    functions: {
        "execute(uint256)": FunctionFragment;
        "getProposal(uint256)": FunctionFragment;
        "getProposalStats(uint256)": FunctionFragment;
        "getVetosNumber(uint256)": FunctionFragment;
        "getVetosPercentage(uint256)": FunctionFragment;
        "getVotingWeightInfo(uint256)": FunctionFragment;
        "veto(uint256)": FunctionFragment;
        "voteAgainst(uint256)": FunctionFragment;
        "voteFor(uint256)": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "execute" | "getProposal" | "getProposalStats" | "getVetosNumber" | "getVetosPercentage" | "getVotingWeightInfo" | "veto" | "voteAgainst" | "voteFor"): FunctionFragment;
    encodeFunctionData(functionFragment: "execute", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getProposal", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getProposalStats", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getVetosNumber", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getVetosPercentage", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getVotingWeightInfo", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "veto", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "voteAgainst", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "voteFor", values: [PromiseOrValue<BigNumberish>]): string;
    decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getProposal", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getProposalStats", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVetosNumber", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVetosPercentage", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVotingWeightInfo", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "veto", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "voteAgainst", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "voteFor", data: BytesLike): Result;
    events: {
        "ProposalCreated(uint256,tuple)": EventFragment;
        "QuorumReached(uint256)": EventFragment;
        "VetoOccurred(uint256,address)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "QuorumReached"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "VetoOccurred"): EventFragment;
}
export interface ProposalCreatedEventObject {
    _id: BigNumber;
    _proposal: IVoting.BaseProposalStructOutput;
}
export declare type ProposalCreatedEvent = TypedEvent<[
    BigNumber,
    IVoting.BaseProposalStructOutput
], ProposalCreatedEventObject>;
export declare type ProposalCreatedEventFilter = TypedEventFilter<ProposalCreatedEvent>;
export interface QuorumReachedEventObject {
    id: BigNumber;
}
export declare type QuorumReachedEvent = TypedEvent<[
    BigNumber
], QuorumReachedEventObject>;
export declare type QuorumReachedEventFilter = TypedEventFilter<QuorumReachedEvent>;
export interface VetoOccurredEventObject {
    id: BigNumber;
    sender: string;
}
export declare type VetoOccurredEvent = TypedEvent<[
    BigNumber,
    string
], VetoOccurredEventObject>;
export declare type VetoOccurredEventFilter = TypedEventFilter<VetoOccurredEvent>;
export interface IConstitutionVoting extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: IConstitutionVotingInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[IVoting.BaseProposalStructOutput]>;
        getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[IVoting.VotingStatsStructOutput]>;
        getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[IQthVoting.VotingWeightInfoStructOutput]>;
        veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IVoting.BaseProposalStructOutput>;
    getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IVoting.VotingStatsStructOutput>;
    getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IQthVoting.VotingWeightInfoStructOutput>;
    veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IVoting.BaseProposalStructOutput>;
        getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IVoting.VotingStatsStructOutput>;
        getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IQthVoting.VotingWeightInfoStructOutput>;
        veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        "ProposalCreated(uint256,tuple)"(_id?: null, _proposal?: null): ProposalCreatedEventFilter;
        ProposalCreated(_id?: null, _proposal?: null): ProposalCreatedEventFilter;
        "QuorumReached(uint256)"(id?: null): QuorumReachedEventFilter;
        QuorumReached(id?: null): QuorumReachedEventFilter;
        "VetoOccurred(uint256,address)"(id?: PromiseOrValue<BigNumberish> | null, sender?: PromiseOrValue<string> | null): VetoOccurredEventFilter;
        VetoOccurred(id?: PromiseOrValue<BigNumberish> | null, sender?: PromiseOrValue<string> | null): VetoOccurredEventFilter;
    };
    estimateGas: {
        execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
