import { MonetaryAmount } from "@interlay/monetary-js";
import { ApiPromise } from "@polkadot/api";
import { InterbtcPrimitivesVaultId } from "@polkadot/types/lookup";
import Big from "big.js";
import { AssetRegistryAPI, OracleAPI, SystemAPI } from "../parachain";
import { CollateralCurrencyExt, WrappedCurrency } from "./currency";
export interface WalletExt {
    addresses: Array<string>;
}
export declare enum VaultStatusExt {
    Active = 0,
    Inactive = 1,
    Liquidated = 2,
    CommittedTheft = 3
}
export declare class VaultExt {
    private api;
    private oracleAPI;
    private systemAPI;
    private assetRegistryAPI;
    wallet: WalletExt;
    backingCollateral: MonetaryAmount<CollateralCurrencyExt>;
    id: InterbtcPrimitivesVaultId;
    status: VaultStatusExt;
    bannedUntil: number | undefined;
    toBeIssuedTokens: MonetaryAmount<WrappedCurrency>;
    issuedTokens: MonetaryAmount<WrappedCurrency>;
    toBeRedeemedTokens: MonetaryAmount<WrappedCurrency>;
    toBeReplacedTokens: MonetaryAmount<WrappedCurrency>;
    replaceCollateral: MonetaryAmount<CollateralCurrencyExt>;
    liquidatedCollateral: MonetaryAmount<CollateralCurrencyExt>;
    constructor(api: ApiPromise, oracleAPI: OracleAPI, systemAPI: SystemAPI, assetRegistryAPI: AssetRegistryAPI, wallet: WalletExt, backingCollateral: MonetaryAmount<CollateralCurrencyExt>, id: InterbtcPrimitivesVaultId, status: VaultStatusExt, bannedUntil: number | undefined, toBeIssuedTokens: MonetaryAmount<WrappedCurrency>, issuedTokens: MonetaryAmount<WrappedCurrency>, toBeRedeemedTokens: MonetaryAmount<WrappedCurrency>, toBeReplacedTokens: MonetaryAmount<WrappedCurrency>, replaceCollateral: MonetaryAmount<CollateralCurrencyExt>, liquidatedCollateral: MonetaryAmount<CollateralCurrencyExt>);
    getRedeemableTokens(): MonetaryAmount<WrappedCurrency>;
    getIssuableTokens(): Promise<MonetaryAmount<WrappedCurrency>>;
    isBanned(): Promise<boolean>;
    getBackedTokens(): MonetaryAmount<WrappedCurrency>;
    getFreeCollateral(): Promise<MonetaryAmount<CollateralCurrencyExt>>;
    getUsedCollateral(): Promise<MonetaryAmount<CollateralCurrencyExt>>;
    getSecureCollateralThreshold(): Promise<Big>;
    computeBackingCollateral(nonce?: number): Promise<MonetaryAmount<CollateralCurrencyExt>>;
    getStakingPoolNonce(): Promise<number>;
}
export interface SystemVaultExt {
    toBeIssuedTokens: MonetaryAmount<WrappedCurrency>;
    issuedTokens: MonetaryAmount<WrappedCurrency>;
    toBeRedeemedTokens: MonetaryAmount<WrappedCurrency>;
    collateral: MonetaryAmount<CollateralCurrencyExt>;
    currencyPair: {
        collateralCurrency: CollateralCurrencyExt;
        wrappedCurrency: WrappedCurrency;
    };
}
