import algosdk from "algosdk";
/**
 * Configuration interface for algo transfers
 * */
export interface TransferConfig {
    amount: number | string;
    note?: string;
}
/**
 * Configuration interface for USDC transfers
 * */
export interface TokenTransferConfig {
    /** Asset ID for Asset (e.g. for USDC 31566704) */
    assetId: number;
    amount: number | string;
    note?: string;
}
export interface AlgorandWallet {
    address: string;
    signAndSendTransaction: (txn: algosdk.Transaction) => Promise<string>;
}
export declare class AlgorandService {
    readonly wallet: AlgorandWallet;
    readonly algodClient: algosdk.Algodv2;
    private apiService;
    constructor(wallet: AlgorandWallet, sdkOptions?: {
        sandbox?: boolean;
    });
    /**
     * Fetches the Bitcoin vault address.
     *
     * @returns {Promise<{ address: string }>} A promise that resolves to the vault address.
     */
    fetchVault(symbol?: string): Promise<{
        address: string;
        tag?: string;
    }>;
    /**
     * Transfer Algorand currency from one wallet to another
     * @param config Transfer configuration
     * @returns Transaction ID if successful
     */
    transferAlgo(config: TransferConfig): Promise<string>;
    /**
     * Transfer USDC (ASA token) from wallet to vault
     * @param config USDC transfer configuration
     * @returns Transaction ID if successful
     */
    transferAsset(config: TokenTransferConfig): Promise<string>;
    /**
     * Check if an account is opted into a specific asset
     * @param address Account address
     * @param assetId Asset ID to check
     * @returns Whether the account is opted into the asset
     */
    isOptedIntoAsset(address: string, assetId: number): Promise<boolean>;
    /**
     * Get asset balance for a specific account in microAsset (base units)
     * @param address Account address
     * @param assetId Asset ID
     * @returns Asset balance in base units
     */
    private getAssetBalanceInMicroUnit;
    getAssetBalance(walletAddress: string, assetId: number): Promise<string>;
    getAssetsBalance(walletAddress: string, assetIds: number[]): Promise<Map<number, string>>;
    /**
     * Get account balance in Algos
     * @param address Account address
     * @returns Balance in ALGO
     */
    getAccountBalance(address: string | algosdk.Address): Promise<string>;
    /**
     * Get account balance in microAlgos (for internal calculations)
     * @param address Account address
     * @returns Balance in microAlgos
     */
    private getAccountBalanceInMicroAlgo;
}
