import { Coin, CoinAmino } from "../../../../cosmos/base/v1beta1/coin";
import { Hop, HopAmino } from "./transfer";
import { BinaryReader, BinaryWriter } from "../../../../binary";
import { DeepPartial } from "../../../../helpers";
/**
 * Allocation defines the spend limit for a particular port and channel
 * @name Allocation
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.Allocation
 */
export interface Allocation {
    /**
     * the port on which the packet will be sent
     */
    sourcePort: string;
    /**
     * the channel by which the packet will be sent
     */
    sourceChannel: string;
    /**
     * spend limitation on the channel
     */
    spendLimit: Coin[];
    /**
     * allow list of receivers, an empty allow list permits any receiver address
     */
    allowList: string[];
    /**
     * allow list of memo strings, an empty list prohibits all memo strings;
     * a list only with "*" permits any memo string
     */
    allowedPacketData: string[];
    /**
     * Forwarding options that are allowed.
     */
    allowedForwarding: AllowedForwarding[];
}
export interface AllocationProtoMsg {
    typeUrl: "/ibc.applications.transfer.v1.Allocation";
    value: Uint8Array;
}
/**
 * Allocation defines the spend limit for a particular port and channel
 * @name AllocationAmino
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.Allocation
 */
export interface AllocationAmino {
    /**
     * the port on which the packet will be sent
     */
    source_port: string;
    /**
     * the channel by which the packet will be sent
     */
    source_channel: string;
    /**
     * spend limitation on the channel
     */
    spend_limit: CoinAmino[];
    /**
     * allow list of receivers, an empty allow list permits any receiver address
     */
    allow_list: string[];
    /**
     * allow list of memo strings, an empty list prohibits all memo strings;
     * a list only with "*" permits any memo string
     */
    allowed_packet_data: string[];
    /**
     * Forwarding options that are allowed.
     */
    allowed_forwarding: AllowedForwardingAmino[];
}
export interface AllocationAminoMsg {
    type: "cosmos-sdk/Allocation";
    value: AllocationAmino;
}
/**
 * AllowedForwarding defines which options are allowed for forwarding.
 * @name AllowedForwarding
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.AllowedForwarding
 */
export interface AllowedForwarding {
    /**
     * a list of allowed source port ID/channel ID pairs through which the packet is allowed to be forwarded until final
     * destination
     */
    hops: Hop[];
}
export interface AllowedForwardingProtoMsg {
    typeUrl: "/ibc.applications.transfer.v1.AllowedForwarding";
    value: Uint8Array;
}
/**
 * AllowedForwarding defines which options are allowed for forwarding.
 * @name AllowedForwardingAmino
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.AllowedForwarding
 */
export interface AllowedForwardingAmino {
    /**
     * a list of allowed source port ID/channel ID pairs through which the packet is allowed to be forwarded until final
     * destination
     */
    hops: HopAmino[];
}
export interface AllowedForwardingAminoMsg {
    type: "cosmos-sdk/AllowedForwarding";
    value: AllowedForwardingAmino;
}
/**
 * TransferAuthorization allows the grantee to spend up to spend_limit coins from
 * the granter's account for ibc transfer on a specific channel
 * @name TransferAuthorization
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.TransferAuthorization
 */
export interface TransferAuthorization {
    /**
     * port and channel amounts
     */
    allocations: Allocation[];
}
export interface TransferAuthorizationProtoMsg {
    typeUrl: "/ibc.applications.transfer.v1.TransferAuthorization";
    value: Uint8Array;
}
/**
 * TransferAuthorization allows the grantee to spend up to spend_limit coins from
 * the granter's account for ibc transfer on a specific channel
 * @name TransferAuthorizationAmino
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.TransferAuthorization
 */
export interface TransferAuthorizationAmino {
    /**
     * port and channel amounts
     */
    allocations: AllocationAmino[];
}
export interface TransferAuthorizationAminoMsg {
    type: "cosmos-sdk/TransferAuthorization";
    value: TransferAuthorizationAmino;
}
/**
 * Allocation defines the spend limit for a particular port and channel
 * @name Allocation
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.Allocation
 */
export declare const Allocation: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is Allocation;
    isAmino(o: any): o is AllocationAmino;
    encode(message: Allocation, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): Allocation;
    fromPartial(object: DeepPartial<Allocation>): Allocation;
    fromAmino(object: AllocationAmino): Allocation;
    toAmino(message: Allocation): AllocationAmino;
    fromAminoMsg(object: AllocationAminoMsg): Allocation;
    toAminoMsg(message: Allocation): AllocationAminoMsg;
    fromProtoMsg(message: AllocationProtoMsg): Allocation;
    toProto(message: Allocation): Uint8Array;
    toProtoMsg(message: Allocation): AllocationProtoMsg;
    registerTypeUrl(): void;
};
/**
 * AllowedForwarding defines which options are allowed for forwarding.
 * @name AllowedForwarding
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.AllowedForwarding
 */
export declare const AllowedForwarding: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is AllowedForwarding;
    isAmino(o: any): o is AllowedForwardingAmino;
    encode(message: AllowedForwarding, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): AllowedForwarding;
    fromPartial(object: DeepPartial<AllowedForwarding>): AllowedForwarding;
    fromAmino(object: AllowedForwardingAmino): AllowedForwarding;
    toAmino(message: AllowedForwarding): AllowedForwardingAmino;
    fromAminoMsg(object: AllowedForwardingAminoMsg): AllowedForwarding;
    toAminoMsg(message: AllowedForwarding): AllowedForwardingAminoMsg;
    fromProtoMsg(message: AllowedForwardingProtoMsg): AllowedForwarding;
    toProto(message: AllowedForwarding): Uint8Array;
    toProtoMsg(message: AllowedForwarding): AllowedForwardingProtoMsg;
    registerTypeUrl(): void;
};
/**
 * TransferAuthorization allows the grantee to spend up to spend_limit coins from
 * the granter's account for ibc transfer on a specific channel
 * @name TransferAuthorization
 * @package ibc.applications.transfer.v1
 * @see proto type: ibc.applications.transfer.v1.TransferAuthorization
 */
export declare const TransferAuthorization: {
    typeUrl: string;
    aminoType: string;
    is(o: any): o is TransferAuthorization;
    isAmino(o: any): o is TransferAuthorizationAmino;
    encode(message: TransferAuthorization, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): TransferAuthorization;
    fromPartial(object: DeepPartial<TransferAuthorization>): TransferAuthorization;
    fromAmino(object: TransferAuthorizationAmino): TransferAuthorization;
    toAmino(message: TransferAuthorization): TransferAuthorizationAmino;
    fromAminoMsg(object: TransferAuthorizationAminoMsg): TransferAuthorization;
    toAminoMsg(message: TransferAuthorization): TransferAuthorizationAminoMsg;
    fromProtoMsg(message: TransferAuthorizationProtoMsg): TransferAuthorization;
    toProto(message: TransferAuthorization): Uint8Array;
    toProtoMsg(message: TransferAuthorization): TransferAuthorizationProtoMsg;
    registerTypeUrl(): void;
};
