import { MsgTransferEncodeObject } from '@cosmjs/stargate';
import { Address, Numberish } from '@hyperlane-xyz/utils';
import type { MultiProviderAdapter } from '../providers/MultiProviderAdapter.js';
import { ChainName } from '../types.js';
import type { IToken } from './IToken.js';
import { TokenAmount } from './TokenAmount.js';
import { TokenConnection } from './TokenConnection.js';
import { TokenMetadata } from './TokenMetadata.js';
import type { IHypTokenAdapter, ITokenAdapter } from './adapters/ITokenAdapter.js';
export declare class Token extends TokenMetadata implements IToken {
    amount(amount: Numberish): TokenAmount<this>;
    getConnections(): TokenConnection<IToken>[];
    getConnectionForChain(chain: ChainName): TokenConnection<IToken> | undefined;
    addConnection(connection: TokenConnection<IToken>): Token;
    removeConnection(token: IToken): Token;
    /**
     * Returns a TokenAdapter for the token and multiProvider
     * @throws If multiProvider does not contain this token's chain.
     * @throws If token is an NFT (TODO NFT Adapter support)
     */
    getAdapter(multiProvider: MultiProviderAdapter): ITokenAdapter<unknown>;
    /**
     * Returns a HypTokenAdapter for the token and multiProvider
     * @throws If not applicable to this token's standard.
     * @throws If multiProvider does not contain this token's chain.
     * @throws If token is an NFT (TODO NFT Adapter support)
     */
    getHypAdapter(multiProvider: MultiProviderAdapter<{
        mailbox?: Address;
    }>, destination?: ChainName): IHypTokenAdapter<unknown>;
    protected getIbcAdapter(multiProvider: MultiProviderAdapter, connection: TokenConnection): IHypTokenAdapter<MsgTransferEncodeObject>;
    /**
     * Convenience method to create an adapter and return an account balance
     */
    getBalance(multiProvider: MultiProviderAdapter, address: Address): Promise<TokenAmount<IToken>>;
}
interface GetCollateralTokenAdapterOptions {
    multiProvider: MultiProviderAdapter;
    chainName: ChainName;
    tokenAddress: Address;
}
export declare function getCollateralTokenAdapter({ chainName, multiProvider, tokenAddress, }: GetCollateralTokenAdapterOptions): ITokenAdapter<unknown>;
export {};
//# sourceMappingURL=Token.d.ts.map