import { OracleAPI } from "./oracle";
import Big from "big.js";
import { ApiPromise } from "@polkadot/api";
import { Bitcoin, ExchangeRate, MonetaryAmount } from "@interlay/monetary-js";
import { CollateralCurrencyExt, CurrencyExt, WrappedCurrency } from "../types";
import { AssetRegistryAPI } from "../parachain/asset-registry";
export declare enum GriefingCollateralType {
    Issue = 0,
    Replace = 1
}
/**
 * @category BTC Bridge
 */
export interface FeeAPI {
    /**
     * @param amount Amount, in BTC, for which to compute the required
     * griefing collateral
     * @param collateralCurrency Currency for determining the griefing collateral
     * @param type Type of griefing collateral to compute (e.g. for issuing, replacing)
     * @returns The griefing collateral
     */
    getGriefingCollateral(amount: MonetaryAmount<WrappedCurrency>, type: GriefingCollateralType): Promise<MonetaryAmount<CurrencyExt>>;
    /**
     * @param feesWrapped Wrapped token fees accrued, in wrapped token (e.g. BTC)
     * @param lockedCollateral Collateral value representing the value locked to gain yield.
     * @param exchangeRate (Optional) Conversion rate, as a `Monetary.js` object
     * @returns The APY, given the parameters
     */
    calculateAPY(feesWrapped: MonetaryAmount<WrappedCurrency>, lockedCollateral: MonetaryAmount<CollateralCurrencyExt>, exchangeRate?: ExchangeRate<Bitcoin, CollateralCurrencyExt>): Promise<Big>;
    /**
     * @returns The griefing collateral rate for issuing InterBTC
     */
    getIssueGriefingCollateralRate(): Promise<Big>;
    /**
     * @returns The griefing collateral rate for the Vault replace request
     */
    getReplaceGriefingCollateralRate(): Promise<Big>;
    /**
     * @returns The percentage of issued token that is received by the vault as reward
     */
    getIssueFee(): Promise<Big>;
}
export declare class DefaultFeeAPI implements FeeAPI {
    private api;
    private oracleAPI;
    private assetRegistryAPI;
    constructor(api: ApiPromise, oracleAPI: OracleAPI, assetRegistryAPI: AssetRegistryAPI);
    getGriefingCollateral(amount: MonetaryAmount<WrappedCurrency>, type: GriefingCollateralType): Promise<MonetaryAmount<CurrencyExt>>;
    getIssueGriefingCollateralRate(): Promise<Big>;
    getReplaceGriefingCollateralRate(): Promise<Big>;
    getIssueFee(): Promise<Big>;
    calculateAPY(feesWrapped: MonetaryAmount<WrappedCurrency>, lockedCollateral: MonetaryAmount<CollateralCurrencyExt>, exchangeRate?: ExchangeRate<Bitcoin, CollateralCurrencyExt>): Promise<Big>;
}
