import { MsgSendEncodeObject } from '@cosmjs/stargate';
import type { MsgRemoteTransferEncodeObject } from '@hyperlane-xyz/cosmos-sdk/runtime';
import { Address, Domain } from '@hyperlane-xyz/utils';
import { BaseCosmNativeAdapter } from '../../app/MultiProtocolApp.js';
import type { MultiProviderAdapter } from '../../providers/MultiProviderAdapter.js';
import { ChainName } from '../../types.js';
import { TokenMetadata } from '../types.js';
import { IHypTokenAdapter, ITokenAdapter, InterchainGasQuote, QuoteTransferRemoteParams, TransferParams, TransferRemoteParams } from './ITokenAdapter.js';
declare class CosmosModuleTokenAdapter extends BaseCosmNativeAdapter implements ITokenAdapter<MsgSendEncodeObject> {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProviderAdapter;
    readonly addresses: Record<string, Address>;
    readonly properties: {
        denom: string;
    };
    protected getDenom(): Promise<string>;
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: Record<string, Address>, properties: {
        denom: string;
    });
    getBalance(address: string): Promise<bigint>;
    getMetadata(): Promise<TokenMetadata>;
    getMinimumTransferAmount(_recipient: Address): Promise<bigint>;
    isApproveRequired(): Promise<boolean>;
    populateApproveTx(_transferParams: TransferParams): Promise<MsgSendEncodeObject>;
    isRevokeApprovalRequired(_: Address, __: Address): Promise<boolean>;
    populateTransferTx(transferParams: TransferParams): Promise<MsgSendEncodeObject>;
    getTotalSupply(): Promise<bigint | undefined>;
}
export declare class CosmNativeHypCollateralAdapter extends CosmosModuleTokenAdapter implements IHypTokenAdapter<MsgSendEncodeObject | MsgRemoteTransferEncodeObject> {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProviderAdapter;
    readonly addresses: {
        token: Address;
    };
    protected tokenAddress: string;
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: {
        token: Address;
    });
    protected getDenom(): Promise<string>;
    getDomains(): Promise<Domain[]>;
    getRouterAddress(domain: Domain): Promise<Buffer>;
    getAllRouters(): Promise<Array<{
        domain: Domain;
        address: Buffer;
    }>>;
    getBridgedSupply(): Promise<bigint | undefined>;
    quoteTransferRemoteGas({ destination, customHook, }: QuoteTransferRemoteParams): Promise<InterchainGasQuote>;
    populateTransferRemoteTx(params: TransferRemoteParams): Promise<MsgRemoteTransferEncodeObject>;
}
export declare class CosmNativeHypSyntheticAdapter extends CosmNativeHypCollateralAdapter {
    protected getTokenDenom(): Promise<string>;
}
export {};
//# sourceMappingURL=CosmosModuleTokenAdapter.d.ts.map