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