import { z } from 'zod';
import { Address, Numberish, ProtocolType } from '@hyperlane-xyz/utils';
import type { ChainName } from '../types.js';
import type { TokenAmount } from './TokenAmount.js';
import { type TokenConnection } from './TokenConnection.js';
import { TokenStandard } from './TokenStandard.js';
export declare const TokenConfigSchema: z.ZodObject<{
    chainName: z.ZodString;
    standard: z.ZodNativeEnum<typeof TokenStandard>;
    decimals: z.ZodNumber;
    symbol: z.ZodString;
    name: z.ZodString;
    addressOrDenom: z.ZodEffects<z.ZodNullable<z.ZodString>, string, string | null>;
    collateralAddressOrDenom: z.ZodOptional<z.ZodString>;
    igpTokenAddressOrDenom: z.ZodOptional<z.ZodString>;
    logoURI: z.ZodOptional<z.ZodString>;
    connections: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodUnion<[z.ZodObject<{
        type: z.ZodOptional<z.ZodLiteral<import("./TokenConnection.js").TokenConnectionType.Hyperlane>>;
        token: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        token: string;
        type?: import("./TokenConnection.js").TokenConnectionType.Hyperlane | undefined;
    }, {
        token: string;
        type?: import("./TokenConnection.js").TokenConnectionType.Hyperlane | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<import("./TokenConnection.js").TokenConnectionType.Ibc>;
        token: z.ZodString;
        sourcePort: z.ZodString;
        sourceChannel: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: import("./TokenConnection.js").TokenConnectionType.Ibc;
        token: string;
        sourcePort: string;
        sourceChannel: string;
    }, {
        type: import("./TokenConnection.js").TokenConnectionType.Ibc;
        token: string;
        sourcePort: string;
        sourceChannel: string;
    }>]>, z.ZodObject<{
        type: z.ZodLiteral<import("./TokenConnection.js").TokenConnectionType.IbcHyperlane>;
        token: z.ZodString;
        sourcePort: z.ZodString;
        sourceChannel: z.ZodString;
        intermediateChainName: z.ZodString;
        intermediateIbcDenom: z.ZodString;
        intermediateRouterAddress: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: import("./TokenConnection.js").TokenConnectionType.IbcHyperlane;
        token: string;
        sourcePort: string;
        sourceChannel: string;
        intermediateChainName: string;
        intermediateIbcDenom: string;
        intermediateRouterAddress: string;
    }, {
        type: import("./TokenConnection.js").TokenConnectionType.IbcHyperlane;
        token: string;
        sourcePort: string;
        sourceChannel: string;
        intermediateChainName: string;
        intermediateIbcDenom: string;
        intermediateRouterAddress: string;
    }>]>, "many">>;
    coinGeckoId: z.ZodOptional<z.ZodString>;
    scale: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodObject<{
        numerator: z.ZodNumber;
        denominator: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        numerator: number;
        denominator: number;
    }, {
        numerator: number;
        denominator: number;
    }>, z.ZodObject<{
        numerator: z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>, bigint, string | number | bigint>;
        denominator: z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>, bigint, string | number | bigint>;
    }, "strip", z.ZodTypeAny, {
        numerator: bigint;
        denominator: bigint;
    }, {
        numerator: string | number | bigint;
        denominator: string | number | bigint;
    }>]>>;
    warpRouteId: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    symbol: string;
    name: string;
    decimals: number;
    chainName: string;
    standard: TokenStandard;
    addressOrDenom: string;
    logoURI?: string | undefined;
    scale?: number | {
        numerator: number;
        denominator: number;
    } | {
        numerator: bigint;
        denominator: bigint;
    } | undefined;
    collateralAddressOrDenom?: string | undefined;
    igpTokenAddressOrDenom?: string | undefined;
    connections?: ({
        token: string;
        type?: import("./TokenConnection.js").TokenConnectionType.Hyperlane | undefined;
    } | {
        type: import("./TokenConnection.js").TokenConnectionType.Ibc;
        token: string;
        sourcePort: string;
        sourceChannel: string;
    } | {
        type: import("./TokenConnection.js").TokenConnectionType.IbcHyperlane;
        token: string;
        sourcePort: string;
        sourceChannel: string;
        intermediateChainName: string;
        intermediateIbcDenom: string;
        intermediateRouterAddress: string;
    })[] | undefined;
    coinGeckoId?: string | undefined;
    warpRouteId?: string | undefined;
}, {
    symbol: string;
    name: string;
    decimals: number;
    chainName: string;
    standard: TokenStandard;
    addressOrDenom: string | null;
    logoURI?: string | undefined;
    scale?: number | {
        numerator: number;
        denominator: number;
    } | {
        numerator: string | number | bigint;
        denominator: string | number | bigint;
    } | undefined;
    collateralAddressOrDenom?: string | undefined;
    igpTokenAddressOrDenom?: string | undefined;
    connections?: ({
        token: string;
        type?: import("./TokenConnection.js").TokenConnectionType.Hyperlane | undefined;
    } | {
        type: import("./TokenConnection.js").TokenConnectionType.Ibc;
        token: string;
        sourcePort: string;
        sourceChannel: string;
    } | {
        type: import("./TokenConnection.js").TokenConnectionType.IbcHyperlane;
        token: string;
        sourcePort: string;
        sourceChannel: string;
        intermediateChainName: string;
        intermediateIbcDenom: string;
        intermediateRouterAddress: string;
    })[] | undefined;
    coinGeckoId?: string | undefined;
    warpRouteId?: string | undefined;
}>;
export type TokenArgs = Omit<z.infer<typeof TokenConfigSchema>, 'addressOrDenom' | 'connections'> & {
    addressOrDenom: Address | string;
    connections?: Array<TokenConnection>;
};
export interface ITokenMetadata extends TokenArgs {
    protocol: ProtocolType;
    amount(amount: Numberish): TokenAmount<this>;
    isNft(): boolean;
    isNative(): boolean;
    isHypNative(): boolean;
    isCollateralized(): boolean;
    isHypToken(): boolean;
    isIbcToken(): boolean;
    isMultiChainToken(): boolean;
    isCrossCollateralToken(): boolean;
    getConnections(): TokenConnection[];
    getConnectionForChain(chain: ChainName): TokenConnection | undefined;
    addConnection(connection: TokenConnection): ITokenMetadata;
    removeConnection(token: ITokenMetadata): ITokenMetadata;
    equals(token?: ITokenMetadata): boolean;
    isFungibleWith(token?: ITokenMetadata): boolean;
}
//# sourceMappingURL=ITokenMetadata.d.ts.map