import { Address, Hash, SchemePermissions, SchemeWrapper } from "../commonTypes";
import { ArcTransactionDataResult, ArcTransactionProposalResult, ContractWrapperBase, EventFetcherFactory, StandardSchemeParams } from "../contractWrapperBase";
import { ContractWrapperFactory } from "../contractWrapperFactory";
import { ProposalDeletedEventResult, ProposalExecutedEventResult } from "./commonEventInterfaces";
export declare class SchemeRegistrarWrapper extends ContractWrapperBase implements SchemeWrapper {
    name: string;
    friendlyName: string;
    factory: ContractWrapperFactory<SchemeRegistrarWrapper>;
    /**
     * Events
     */
    NewSchemeProposal: EventFetcherFactory<NewSchemeProposalEventResult>;
    RemoveSchemeProposal: EventFetcherFactory<RemoveSchemeProposalEventResult>;
    ProposalExecuted: EventFetcherFactory<ProposalExecutedEventResult>;
    ProposalDeleted: EventFetcherFactory<ProposalDeletedEventResult>;
    /**
     * Note relating to permissions: According rules defined in the Controller,
     * this SchemeRegistrar is only capable of registering schemes that have
     * either no permissions or have the permission to register other schemes.
     * Therefore Arc's SchemeRegistrar is not capable of registering schemes
     * that have permissions greater than its own, thus excluding schemes having
     * the permission to add/remove global constraints or upgrade the controller.
     * The Controller will throw an exception when an attempt is made
     * to add or remove schemes having greater permissions than the scheme attempting the change.
     */
    proposeToAddModifyScheme(options?: ProposeToAddModifySchemeParams): Promise<ArcTransactionProposalResult>;
    proposeToRemoveScheme(options?: ProposeToRemoveSchemeParams): Promise<ArcTransactionProposalResult>;
    setParameters(params: SchemeRegistrarParams): Promise<ArcTransactionDataResult<Hash>>;
    getDefaultPermissions(): SchemePermissions;
    getSchemePermissions(avatarAddress: Address): Promise<SchemePermissions>;
    getSchemeParameters(avatarAddress: Address): Promise<SchemeRegistrarParams>;
    getParameters(paramsHash: Hash): Promise<SchemeRegistrarParams>;
}
export declare const SchemeRegistrarFactory: ContractWrapperFactory<SchemeRegistrarWrapper>;
export interface NewSchemeProposalEventResult {
    /**
     * indexed
     */
    _avatar: Address;
    /**
     * indexed
     */
    _intVoteInterface: Address;
    _permissions: string;
    _parametersHash: Hash;
    /**
     * indexed
     */
    _proposalId: Hash;
    _scheme: Address;
}
export interface RemoveSchemeProposalEventResult {
    /**
     * indexed
     */
    _avatar: Address;
    /**
     * indexed
     */
    _intVoteInterface: Address;
    /**
     * indexed
     */
    _proposalId: Hash;
    _scheme: Address;
}
export interface ProposeToAddModifySchemeParams {
    /**
     * avatar address
     */
    avatar: Address;
    /**
     * Optional scheme address.  Supply this if you are submitting a non-Arc scheme
     * or wish to use a different Arc scheme than the default.  In the latter case, you must
     * also supply the schemeName.
     */
    schemeAddress?: Address;
    /**
     * Scheme name, like "SchemeRegistrar" or "ContributionReward".
     * Not required if you are registering a non-arc scheme.
     */
    schemeName?: string | null;
    /**
     * Fash of scheme parameters. These must be already registered with the new scheme.
     */
    schemeParametersHash: string;
    /**
     * Optionally supply values from SchemePermissions or DefaultSchemePermissions.
     *
     * This value is manditory for non-Arc schemes.
     *
     * For Arc schemes the default is taken from DefaultSchemePermissions
     * for the scheme given by schemeName.
     */
    permissions?: SchemePermissions | null;
}
export interface ProposeToRemoveSchemeParams {
    /**
     * avatar address
     */
    avatar: Address;
    /**
     *  the address of the global constraint to remove
     */
    schemeAddress: string;
}
export interface SchemeRegistrarParams extends StandardSchemeParams {
    /**
     * Optional hash of voting machine parameters to use when voting on a
     * proposal to unregister a scheme that is being registered.
     *
     * Default is the value of voteParametersHash.
     */
    voteRemoveParametersHash?: Hash;
}
