import { Address, Hash, SchemePermissions } from "../commonTypes";
import { ContractWrapperFactory } from "../contractWrapperFactory";
import { ArcTransactionDataResult, ArcTransactionProposalResult, IContractWrapperFactory, StandardSchemeParams } from "../iContractWrapperBase";
import { ProposalGeneratorBase } from "../proposalGeneratorBase";
import { TxGeneratingFunctionOptions } from "../transactionService";
import { EntityFetcherFactory, EventFetcherFactory } from "../web3EventService";
import { ProposalDeletedEventResult, SchemeProposalExecuted, SchemeProposalExecutedEventResult } from "./commonEventInterfaces";
export declare class GlobalConstraintRegistrarWrapper extends ProposalGeneratorBase {
    name: string;
    friendlyName: string;
    factory: IContractWrapperFactory<GlobalConstraintRegistrarWrapper>;
    /**
     * Events
     */
    NewGlobalConstraintsProposal: EventFetcherFactory<NewGlobalConstraintsProposalEventResult>;
    RemoveGlobalConstraintsProposal: EventFetcherFactory<RemoveGlobalConstraintsProposalEventResult>;
    ProposalExecuted: EventFetcherFactory<SchemeProposalExecutedEventResult>;
    ProposalDeleted: EventFetcherFactory<ProposalDeletedEventResult>;
    /**
     * Submit a proposal to add or modify a given global constraint.
     * @param options
     */
    proposeToAddModifyGlobalConstraint(options?: ProposeToAddModifyGlobalConstraintParams): Promise<ArcTransactionProposalResult>;
    /**
     * Submit a proposal to remove a global constraint.
     * @param options
     */
    proposeToRemoveGlobalConstraint(options?: ProposeToRemoveGlobalConstraintParams): Promise<ArcTransactionProposalResult>;
    /**
     * EntityFetcherFactory for votable GlobalConstraintProposal.
     * @param avatarAddress
     */
    getVotableAddGcProposals(avatarAddress: Address): Promise<EntityFetcherFactory<VotableGlobalConstraintProposal, NewGlobalConstraintsProposalEventResult>>;
    /**
     * EntityFetcherFactory for votable GlobalConstraintProposal.
     * @param avatarAddress
     */
    getVotableRemoveGcProposals(avatarAddress: Address): Promise<EntityFetcherFactory<VotableGlobalConstraintProposal, RemoveGlobalConstraintsProposalEventResult>>;
    /**
     * EntityFetcherFactory for executed proposals.
     * @param avatarAddress
     */
    getExecutedProposals(avatarAddress: Address): EntityFetcherFactory<SchemeProposalExecuted, SchemeProposalExecutedEventResult>;
    getVotableProposal(avatarAddress: Address, proposalId: Hash): Promise<VotableGlobalConstraintProposal>;
    getParametersHash(params: StandardSchemeParams): Promise<Hash>;
    setParameters(params: StandardSchemeParams & TxGeneratingFunctionOptions): Promise<ArcTransactionDataResult<Hash>>;
    getDefaultPermissions(): SchemePermissions;
    getSchemePermissions(avatarAddress: Address): Promise<SchemePermissions>;
    getSchemeParameters(avatarAddress: Address): Promise<StandardSchemeParams>;
    getParameters(paramsHash: Hash): Promise<StandardSchemeParams>;
    protected hydrated(): void;
    private convertProposalPropsArrayToObject;
}
export declare const GlobalConstraintRegistrarFactory: ContractWrapperFactory<GlobalConstraintRegistrarWrapper>;
export interface NewGlobalConstraintsProposalEventResult {
    /**
     * indexed
     */
    _avatar: Address;
    /**
     * indexed
     */
    _intVoteInterface: Address;
    _gc: Address;
    _params: Hash;
    /**
     * indexed
     */
    _proposalId: Hash;
    _voteToRemoveParams: Hash;
}
export interface RemoveGlobalConstraintsProposalEventResult {
    /**
     * indexed
     */
    _avatar: Address;
    _gc: Address;
    /**
     * indexed
     */
    _intVoteInterface: Address;
    /**
     * indexed
     */
    _proposalId: Hash;
}
export interface ProposeToAddModifyGlobalConstraintParams {
    /**
     * avatar address
     */
    avatar: Address;
    /**
     *  the address of the global constraint to add
     */
    globalConstraint: string;
    /**
     * hash of the parameters of the global contraint
     */
    globalConstraintParametersHash: string;
    /**
     * voting machine to use when voting to remove the global constraint
     */
    votingMachineHash: string;
}
export interface ProposeToRemoveGlobalConstraintParams {
    /**
     * avatar address
     */
    avatar: Address;
    /**
     *  the address of the global constraint to remove
     */
    globalConstraintAddress: Address;
}
export declare enum GlobalConstraintProposalType {
    Add = 1,
    Remove = 2
}
export interface VotableGlobalConstraintProposal {
    /**
     * Address of the global constraint
     */
    constraintAddress: Address;
    /**
     * The global constraint's parameters
     */
    paramsHash: Hash;
    /**
     * Hash of the proposalId
     */
    proposalId: Hash;
    /**
     * Add or Remove
     */
    proposalType: GlobalConstraintProposalType;
    /**
     * Hash of voting machine parameters to use when removing a global constraint
     */
    voteToRemoveParamsHash: Hash;
}
