import { Algodv2 } from "algosdk";
export declare class Asset {
    algod: Algodv2;
    underlyingAssetId: number;
    bankAssetId: number;
    oracleAppId: number;
    oraclePriceField: string;
    oraclePriceScaleFactor: number;
    underlyingAssetInfo: {
        [key: string]: any;
    };
    bankAssetInfo: {};
    /**
     * This is the constructor for the Asset class.
     *
     * **Note, do not call this to create a new asset**. Instead call
     * the static method init as there are asynchronous set up steps in
     * creating an asset and a constructor can only return an instance of
     * the class and not a promise.
     *
     * #### Example
     * ```typescript
     * //Correct way to instantiate new asset
     * const newAsset = await Asset.init(algodClient, underlyingAssetId, bankAssetId, oracleAppId, oraclePriceField, oraclePriceScaleFactor)
     *
     * //Incorrect way to instantiate new asset
     * const newAsset = new Asset(algodClient, underlyingAssetId, bankAssetId, oracleAppId, oraclePriceField, oraclePriceScaleFactor)
     * ```
     *
     * @param algodClient - algod client
     * @param underlyingAssetId - id of underlying asset
     * @param bankAssetId - bank asset id
     * @param oracleAppId - oracle application id of underlying asset
     * @param oraclePriceField - oracle price field of underlying asset
     * @param oraclePriceScaleFactor - oracle price scale factor of underlying asset
     */
    constructor(algodClient: Algodv2, underlyingAssetId: number, bankAssetId: number, oracleAppId?: number, oraclePriceField?: string, oraclePriceScaleFactor?: number);
    /**
     * This is the function that should be called when creating a new asset.
     * You pass everything you would to the constructor, but to this function
     * instead and this returns the new and created asset.
     *
     * #### Example
     * ```typescript
     * //Correct way to instantiate new asset
     * const newAsset = await Asset.init(algodClient, underlyingAssetId, bankAssetId, oracleAppId, oraclePriceField, oraclePriceScaleFactor)
     *
     * //Incorrect way to instantiate new asset
     * const newAsset = new Asset(algodClient, underlyingAssetId, bankAssetId, oracleAppId, oraclePriceField, oraclePriceScaleFactor)
     * ```
     *
     * @param algodClient - algod client
     * @param underlyingAssetId - id of underlying asset
     * @param bankAssetId - bank asset id
     * @param oracleAppId - oracle application id of underlying asset
     * @param oraclePriceField - oracle price field of underlying asset
     * @param oraclePriceScaleFactor - oracle price scale factor of underlying asset
     * @returns a finished instance of the asset class.
     */
    static init(algodClient: Algodv2, underlyingAssetId: number, bankAssetId: number, oracleAppId?: number, oraclePriceField?: string, oraclePriceScaleFactor?: number): Promise<Asset>;
    /**
     * Returns underlying asset id
     *
     * @returns underlying asset id
     */
    getUnderlyingAssetId(): number;
    /**
     * Returns underlying asset info
     *
     * @returns underlying asset info as a dictionary
     */
    getUnderlyingAssetInfo(): {};
    /**
     * Returns bank asset id
     *
     * @returns bank asset id
     */
    getBankAssetId(): number;
    /**
     * Returns bank asset info
     *
     * @returns bank asset info as a dictionary
     */
    getBankAssetInfo(): {};
    /**
     * Returns oracle app id
     *
     * @returns oracle app id
     */
    getOracleAppId(): number;
    /**
     * Returns oracle price field
     *
     * @returns oracle price field
     */
    getOraclePriceField(): string;
    /**
     * Returns oracle price scale factor
     *
     * @returns oracle price scale factor
     */
    getOraclePriceScaleFactor(): number;
    /**
     * Returns the current raw oracle price
     *
     * @returns oracle price
     */
    getRawPrice(): Promise<number>;
    /**
     * Returns decimals of asset
     *
     * @returns decimals
     */
    getUnderlyingDecimals(): number;
    /**
     * Returns the current oracle price
     *
     * @returns oracle price
     */
    getPrice(): Promise<number>;
    /**
     * Returns the usd value of the underlying amount (base units)
     *
     * @param amount - integer amount of base underlying units
     * @returns usd value
     */
    toUSD(amount: number): Promise<number>;
}
