import { Coin, CoinAmino } from "../../base/v1beta1/coin";
import { DeepPartial } from "../../../helpers";
import { BinaryReader, BinaryWriter } from "../../../binary";
/** AuthorizationType defines the type of staking module authorization type */
export declare enum AuthorizationType {
    /** AUTHORIZATION_TYPE_UNSPECIFIED - AUTHORIZATION_TYPE_UNSPECIFIED specifies an unknown authorization type */
    AUTHORIZATION_TYPE_UNSPECIFIED = 0,
    /** AUTHORIZATION_TYPE_DELEGATE - AUTHORIZATION_TYPE_DELEGATE defines an authorization type for Msg/Delegate */
    AUTHORIZATION_TYPE_DELEGATE = 1,
    /** AUTHORIZATION_TYPE_UNDELEGATE - AUTHORIZATION_TYPE_UNDELEGATE defines an authorization type for Msg/Undelegate */
    AUTHORIZATION_TYPE_UNDELEGATE = 2,
    /** AUTHORIZATION_TYPE_REDELEGATE - AUTHORIZATION_TYPE_REDELEGATE defines an authorization type for Msg/BeginRedelegate */
    AUTHORIZATION_TYPE_REDELEGATE = 3,
    /** AUTHORIZATION_TYPE_CANCEL_UNBONDING_DELEGATION - AUTHORIZATION_TYPE_CANCEL_UNBONDING_DELEGATION defines an authorization type for Msg/MsgCancelUnbondingDelegation */
    AUTHORIZATION_TYPE_CANCEL_UNBONDING_DELEGATION = 4,
    UNRECOGNIZED = -1
}
export declare const AuthorizationTypeAmino: typeof AuthorizationType;
export declare function authorizationTypeFromJSON(object: any): AuthorizationType;
export declare function authorizationTypeToJSON(object: AuthorizationType): string;
/**
 * StakeAuthorization defines authorization for delegate/undelegate/redelegate.
 * @name StakeAuthorization
 * @package cosmos.staking.v1beta1
 * @see proto type: cosmos.staking.v1beta1.StakeAuthorization
 */
export interface StakeAuthorization {
    $typeUrl?: "/cosmos.staking.v1beta1.StakeAuthorization";
    /**
     * max_tokens specifies the maximum amount of tokens can be delegate to a validator. If it is
     * empty, there is no spend limit and any amount of coins can be delegated.
     */
    maxTokens?: Coin;
    /**
     * allow_list specifies list of validator addresses to whom grantee can delegate tokens on behalf of granter's
     * account.
     */
    allowList?: StakeAuthorization_Validators;
    /**
     * deny_list specifies list of validator addresses to whom grantee can not delegate tokens.
     */
    denyList?: StakeAuthorization_Validators;
    /**
     * authorization_type defines one of AuthorizationType.
     */
    authorizationType: AuthorizationType;
}
export interface StakeAuthorizationProtoMsg {
    typeUrl: "/cosmos.staking.v1beta1.StakeAuthorization";
    value: Uint8Array;
}
/**
 * StakeAuthorization defines authorization for delegate/undelegate/redelegate.
 * @name StakeAuthorizationAmino
 * @package cosmos.staking.v1beta1
 * @see proto type: cosmos.staking.v1beta1.StakeAuthorization
 */
export interface StakeAuthorizationAmino {
    /**
     * max_tokens specifies the maximum amount of tokens can be delegate to a validator. If it is
     * empty, there is no spend limit and any amount of coins can be delegated.
     */
    max_tokens?: CoinAmino;
    /**
     * allow_list specifies list of validator addresses to whom grantee can delegate tokens on behalf of granter's
     * account.
     */
    allow_list?: StakeAuthorization_ValidatorsAmino;
    /**
     * deny_list specifies list of validator addresses to whom grantee can not delegate tokens.
     */
    deny_list?: StakeAuthorization_ValidatorsAmino;
    /**
     * authorization_type defines one of AuthorizationType.
     */
    authorization_type: AuthorizationType;
}
export interface StakeAuthorizationAminoMsg {
    type: "cosmos-sdk/StakeAuthorization";
    value: StakeAuthorizationAmino;
}
/**
 * Validators defines list of validator addresses.
 * @name StakeAuthorization_Validators
 * @package cosmos.staking.v1beta1
 * @see proto type: cosmos.staking.v1beta1.Validators
 */
export interface StakeAuthorization_Validators {
    address: string[];
}
export interface StakeAuthorization_ValidatorsProtoMsg {
    typeUrl: "/cosmos.staking.v1beta1.Validators";
    value: Uint8Array;
}
/**
 * Validators defines list of validator addresses.
 * @name StakeAuthorization_ValidatorsAmino
 * @package cosmos.staking.v1beta1
 * @see proto type: cosmos.staking.v1beta1.StakeAuthorization_Validators
 */
export interface StakeAuthorization_ValidatorsAmino {
    address: string[];
}
export interface StakeAuthorization_ValidatorsAminoMsg {
    type: "cosmos-sdk/Validators";
    value: StakeAuthorization_ValidatorsAmino;
}
/**
 * StakeAuthorization defines authorization for delegate/undelegate/redelegate.
 * @name StakeAuthorization
 * @package cosmos.staking.v1beta1
 * @see proto type: cosmos.staking.v1beta1.StakeAuthorization
 */
export declare const StakeAuthorization: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is StakeAuthorization;
    isAmino(o: any): o is StakeAuthorizationAmino;
    encode(message: StakeAuthorization, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): StakeAuthorization;
    fromPartial(object: DeepPartial<StakeAuthorization>): StakeAuthorization;
    fromAmino(object: StakeAuthorizationAmino): StakeAuthorization;
    toAmino(message: StakeAuthorization): StakeAuthorizationAmino;
    fromAminoMsg(object: StakeAuthorizationAminoMsg): StakeAuthorization;
    toAminoMsg(message: StakeAuthorization): StakeAuthorizationAminoMsg;
    fromProtoMsg(message: StakeAuthorizationProtoMsg): StakeAuthorization;
    toProto(message: StakeAuthorization): Uint8Array;
    toProtoMsg(message: StakeAuthorization): StakeAuthorizationProtoMsg;
    registerTypeUrl(): void;
};
/**
 * Validators defines list of validator addresses.
 * @name StakeAuthorization_Validators
 * @package cosmos.staking.v1beta1
 * @see proto type: cosmos.staking.v1beta1.Validators
 */
export declare const StakeAuthorization_Validators: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is StakeAuthorization_Validators;
    isAmino(o: any): o is StakeAuthorization_ValidatorsAmino;
    encode(message: StakeAuthorization_Validators, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): StakeAuthorization_Validators;
    fromPartial(object: DeepPartial<StakeAuthorization_Validators>): StakeAuthorization_Validators;
    fromAmino(object: StakeAuthorization_ValidatorsAmino): StakeAuthorization_Validators;
    toAmino(message: StakeAuthorization_Validators): StakeAuthorization_ValidatorsAmino;
    fromAminoMsg(object: StakeAuthorization_ValidatorsAminoMsg): StakeAuthorization_Validators;
    toAminoMsg(message: StakeAuthorization_Validators): StakeAuthorization_ValidatorsAminoMsg;
    fromProtoMsg(message: StakeAuthorization_ValidatorsProtoMsg): StakeAuthorization_Validators;
    toProto(message: StakeAuthorization_Validators): Uint8Array;
    toProtoMsg(message: StakeAuthorization_Validators): StakeAuthorization_ValidatorsProtoMsg;
    registerTypeUrl(): void;
};
