import { OracleAPI } from "./oracle";
import Big from "big.js";
import { ApiPromise } from "@polkadot/api";
import { BitcoinUnit, Currency, ExchangeRate, MonetaryAmount } from "@interlay/monetary-js";
import { CollateralUnit, CurrencyUnit } from "../types";
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<Currency<BitcoinUnit>, BitcoinUnit>, type: GriefingCollateralType): Promise<MonetaryAmount<Currency<CurrencyUnit>, CurrencyUnit>>;
    /**
     * @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<C extends CollateralUnit>(feesWrapped: MonetaryAmount<Currency<BitcoinUnit>, BitcoinUnit>, lockedCollateral: MonetaryAmount<Currency<C>, C>, exchangeRate?: ExchangeRate<Currency<BitcoinUnit>, BitcoinUnit, Currency<C>, C>): 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;
    constructor(api: ApiPromise, oracleAPI: OracleAPI);
    getGriefingCollateral(amount: MonetaryAmount<Currency<BitcoinUnit>, BitcoinUnit>, type: GriefingCollateralType): Promise<MonetaryAmount<Currency<CurrencyUnit>, CurrencyUnit>>;
    getIssueGriefingCollateralRate(): Promise<Big>;
    getReplaceGriefingCollateralRate(): Promise<Big>;
    getIssueFee(): Promise<Big>;
    calculateAPY<C extends CollateralUnit>(feesWrapped: MonetaryAmount<Currency<BitcoinUnit>, BitcoinUnit>, lockedCollateral: MonetaryAmount<Currency<C>, C>, exchangeRate?: ExchangeRate<Currency<BitcoinUnit>, BitcoinUnit, Currency<C>, C>): Promise<Big>;
}
