/// <reference types="node" resolution-mode="require"/>
import { MsgTransferEncodeObject } from '@cosmjs/stargate';
import { Address, Domain } from '@hyperlane-xyz/utils';
import { BaseCosmosAdapter } from '../../app/MultiProtocolApp.js';
import { MultiProtocolProvider } from '../../providers/MultiProtocolProvider.js';
import { ChainName } from '../../types.js';
import { TokenMetadata } from '../types.js';
import { IHypTokenAdapter, ITokenAdapter, InterchainGasQuote, TransferParams, TransferRemoteParams } from './ITokenAdapter.js';
export declare class CosmNativeTokenAdapter extends BaseCosmosAdapter implements ITokenAdapter<MsgTransferEncodeObject> {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProtocolProvider;
    readonly addresses: Record<string, Address>;
    readonly properties: {
        ibcDenom: string;
    };
    constructor(chainName: ChainName, multiProvider: MultiProtocolProvider, addresses: Record<string, Address>, properties: {
        ibcDenom: string;
    });
    getBalance(address: string): Promise<bigint>;
    getMetadata(): Promise<TokenMetadata>;
    getMinimumTransferAmount(_recipient: Address): Promise<bigint>;
    isApproveRequired(): Promise<boolean>;
    populateApproveTx(_transferParams: TransferParams): Promise<MsgTransferEncodeObject>;
    populateTransferTx(_transferParams: TransferParams): Promise<MsgTransferEncodeObject>;
    getTotalSupply(): Promise<bigint | undefined>;
}
export declare class CosmIbcTokenAdapter extends CosmNativeTokenAdapter implements IHypTokenAdapter<MsgTransferEncodeObject> {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProtocolProvider;
    readonly addresses: Record<string, Address>;
    readonly properties: {
        ibcDenom: string;
        sourcePort: string;
        sourceChannel: string;
    };
    constructor(chainName: ChainName, multiProvider: MultiProtocolProvider, addresses: Record<string, Address>, properties: {
        ibcDenom: string;
        sourcePort: string;
        sourceChannel: string;
    });
    getDomains(): Promise<Domain[]>;
    getRouterAddress(_domain: Domain): Promise<Buffer>;
    getAllRouters(): Promise<Array<{
        domain: Domain;
        address: Buffer;
    }>>;
    getBridgedSupply(): Promise<bigint | undefined>;
    quoteTransferRemoteGas(_destination: Domain): Promise<InterchainGasQuote>;
    populateTransferRemoteTx(transferParams: TransferRemoteParams, memo?: string): Promise<MsgTransferEncodeObject>;
}
export declare class CosmIbcToWarpTokenAdapter extends CosmIbcTokenAdapter implements IHypTokenAdapter<MsgTransferEncodeObject> {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProtocolProvider;
    readonly addresses: {
        intermediateRouterAddress: Address;
        destinationRouterAddress: Address;
    };
    readonly properties: CosmIbcTokenAdapter['properties'] & {
        intermediateIbcDenom: string;
        intermediateChainName: ChainName;
    };
    constructor(chainName: ChainName, multiProvider: MultiProtocolProvider, addresses: {
        intermediateRouterAddress: Address;
        destinationRouterAddress: Address;
    }, properties: CosmIbcTokenAdapter['properties'] & {
        intermediateIbcDenom: string;
        intermediateChainName: ChainName;
    });
    quoteTransferRemoteGas(_destination: Domain): Promise<InterchainGasQuote>;
    populateTransferRemoteTx(transferParams: TransferRemoteParams): Promise<MsgTransferEncodeObject>;
}
//# sourceMappingURL=CosmosTokenAdapter.d.ts.map