import { DeepPartial } from "../../../helpers";
import { BinaryReader, BinaryWriter } from "../../../binary";
/** Level is the permission level. */
export declare enum Permissions_Level {
    /**
     * LEVEL_NONE_UNSPECIFIED - LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit
     * breaker permissions.
     */
    LEVEL_NONE_UNSPECIFIED = 0,
    /**
     * LEVEL_SOME_MSGS - LEVEL_SOME_MSGS indicates that the account will have permission to
     * trip or reset the circuit breaker for some Msg type URLs. If this level
     * is chosen, a non-empty list of Msg type URLs must be provided in
     * limit_type_urls.
     */
    LEVEL_SOME_MSGS = 1,
    /**
     * LEVEL_ALL_MSGS - LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit
     * breaker for Msg's of all type URLs.
     */
    LEVEL_ALL_MSGS = 2,
    /**
     * LEVEL_SUPER_ADMIN - LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker
     * actions and can grant permissions to other accounts.
     */
    LEVEL_SUPER_ADMIN = 3,
    UNRECOGNIZED = -1
}
export declare const Permissions_LevelAmino: typeof Permissions_Level;
export declare function permissions_LevelFromJSON(object: any): Permissions_Level;
export declare function permissions_LevelToJSON(object: Permissions_Level): string;
/**
 * Permissions are the permissions that an account has to trip
 * or reset the circuit breaker.
 * @name Permissions
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.Permissions
 */
export interface Permissions {
    /**
     * level is the level of permissions granted to this account.
     */
    level: Permissions_Level;
    /**
     * limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type
     * URLs that the account can trip. It is an error to use limit_type_urls with
     * a level other than LEVEL_SOME_MSGS.
     */
    limitTypeUrls: string[];
}
export interface PermissionsProtoMsg {
    typeUrl: "/cosmos.circuit.v1.Permissions";
    value: Uint8Array;
}
/**
 * Permissions are the permissions that an account has to trip
 * or reset the circuit breaker.
 * @name PermissionsAmino
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.Permissions
 */
export interface PermissionsAmino {
    /**
     * level is the level of permissions granted to this account.
     */
    level: Permissions_Level;
    /**
     * limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type
     * URLs that the account can trip. It is an error to use limit_type_urls with
     * a level other than LEVEL_SOME_MSGS.
     */
    limit_type_urls: string[];
}
export interface PermissionsAminoMsg {
    type: "cosmos-sdk/Permissions";
    value: PermissionsAmino;
}
/**
 * GenesisAccountPermissions is the account permissions for the circuit breaker in genesis
 * @name GenesisAccountPermissions
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.GenesisAccountPermissions
 */
export interface GenesisAccountPermissions {
    address: string;
    permissions?: Permissions;
}
export interface GenesisAccountPermissionsProtoMsg {
    typeUrl: "/cosmos.circuit.v1.GenesisAccountPermissions";
    value: Uint8Array;
}
/**
 * GenesisAccountPermissions is the account permissions for the circuit breaker in genesis
 * @name GenesisAccountPermissionsAmino
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.GenesisAccountPermissions
 */
export interface GenesisAccountPermissionsAmino {
    address: string;
    permissions?: PermissionsAmino;
}
export interface GenesisAccountPermissionsAminoMsg {
    type: "cosmos-sdk/GenesisAccountPermissions";
    value: GenesisAccountPermissionsAmino;
}
/**
 * GenesisState is the state that must be provided at genesis.
 * @name GenesisState
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.GenesisState
 */
export interface GenesisState {
    accountPermissions: GenesisAccountPermissions[];
    disabledTypeUrls: string[];
}
export interface GenesisStateProtoMsg {
    typeUrl: "/cosmos.circuit.v1.GenesisState";
    value: Uint8Array;
}
/**
 * GenesisState is the state that must be provided at genesis.
 * @name GenesisStateAmino
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.GenesisState
 */
export interface GenesisStateAmino {
    account_permissions: GenesisAccountPermissionsAmino[];
    disabled_type_urls: string[];
}
export interface GenesisStateAminoMsg {
    type: "cosmos-sdk/GenesisState";
    value: GenesisStateAmino;
}
/**
 * Permissions are the permissions that an account has to trip
 * or reset the circuit breaker.
 * @name Permissions
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.Permissions
 */
export declare const Permissions: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is Permissions;
    isAmino(o: any): o is PermissionsAmino;
    encode(message: Permissions, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): Permissions;
    fromPartial(object: DeepPartial<Permissions>): Permissions;
    fromAmino(object: PermissionsAmino): Permissions;
    toAmino(message: Permissions): PermissionsAmino;
    fromAminoMsg(object: PermissionsAminoMsg): Permissions;
    toAminoMsg(message: Permissions): PermissionsAminoMsg;
    fromProtoMsg(message: PermissionsProtoMsg): Permissions;
    toProto(message: Permissions): Uint8Array;
    toProtoMsg(message: Permissions): PermissionsProtoMsg;
    registerTypeUrl(): void;
};
/**
 * GenesisAccountPermissions is the account permissions for the circuit breaker in genesis
 * @name GenesisAccountPermissions
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.GenesisAccountPermissions
 */
export declare const GenesisAccountPermissions: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is GenesisAccountPermissions;
    isAmino(o: any): o is GenesisAccountPermissionsAmino;
    encode(message: GenesisAccountPermissions, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): GenesisAccountPermissions;
    fromPartial(object: DeepPartial<GenesisAccountPermissions>): GenesisAccountPermissions;
    fromAmino(object: GenesisAccountPermissionsAmino): GenesisAccountPermissions;
    toAmino(message: GenesisAccountPermissions): GenesisAccountPermissionsAmino;
    fromAminoMsg(object: GenesisAccountPermissionsAminoMsg): GenesisAccountPermissions;
    toAminoMsg(message: GenesisAccountPermissions): GenesisAccountPermissionsAminoMsg;
    fromProtoMsg(message: GenesisAccountPermissionsProtoMsg): GenesisAccountPermissions;
    toProto(message: GenesisAccountPermissions): Uint8Array;
    toProtoMsg(message: GenesisAccountPermissions): GenesisAccountPermissionsProtoMsg;
    registerTypeUrl(): void;
};
/**
 * GenesisState is the state that must be provided at genesis.
 * @name GenesisState
 * @package cosmos.circuit.v1
 * @see proto type: cosmos.circuit.v1.GenesisState
 */
export declare const GenesisState: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is GenesisState;
    isAmino(o: any): o is GenesisStateAmino;
    encode(message: GenesisState, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): GenesisState;
    fromPartial(object: DeepPartial<GenesisState>): GenesisState;
    fromAmino(object: GenesisStateAmino): GenesisState;
    toAmino(message: GenesisState): GenesisStateAmino;
    fromAminoMsg(object: GenesisStateAminoMsg): GenesisState;
    toAminoMsg(message: GenesisState): GenesisStateAminoMsg;
    fromProtoMsg(message: GenesisStateProtoMsg): GenesisState;
    toProto(message: GenesisState): Uint8Array;
    toProtoMsg(message: GenesisState): GenesisStateProtoMsg;
    registerTypeUrl(): void;
};
