import { Currency, PolkadotAmount, KusamaAmount, InterBtcAmount, MonetaryAmount, KintsugiAmount, InterlayAmount } from "@interlay/monetary-js";
import { ApiPromise } from "@polkadot/api";
import { EscrowLockedBalance, EscrowPoint, InterbtcPrimitivesCurrencyId, OrmlTokensAccountData } from "@polkadot/types/lookup";
import { BigSource } from "big.js";
import BN from "bn.js";
export declare enum CurrencyIdLiteral {
    DOT = "DOT",
    INTERBTC = "IBTC",
    INTR = "INTR",
    KSM = "KSM",
    KBTC = "KBTC",
    KINT = "KINT"
}
export declare type WrappedIdLiteral = CurrencyIdLiteral.INTERBTC | CurrencyIdLiteral.KBTC;
export declare type GovernanceIdLiteral = CurrencyIdLiteral.INTR | CurrencyIdLiteral.KINT;
export declare type CollateralIdLiteral = CurrencyIdLiteral.DOT | CurrencyIdLiteral.KSM | CurrencyIdLiteral.KINT | CurrencyIdLiteral.INTR;
export declare const CollateralAmount: (typeof PolkadotAmount | typeof KusamaAmount | typeof InterlayAmount | typeof KintsugiAmount)[];
export declare type CollateralAmount = typeof CollateralAmount[number];
export declare const CollateralCurrency: readonly [Currency<{
    readonly DOT: 10;
    readonly Planck: 0;
}>, Currency<{
    readonly KSM: 12;
    readonly Planck: 0;
}>, Currency<{
    readonly INTR: 10;
    readonly Planck: 0;
}>, Currency<{
    readonly KINT: 12;
    readonly Planck: 0;
}>];
export declare type CollateralCurrency = typeof CollateralCurrency[number];
export declare const CollateralUnit: ({
    readonly DOT: 10;
    readonly Planck: 0;
} | {
    readonly KSM: 12;
    readonly Planck: 0;
} | {
    readonly INTR: 10;
    readonly Planck: 0;
} | {
    readonly KINT: 12;
    readonly Planck: 0;
})[];
export declare type CollateralUnit = typeof CollateralUnit[number];
export declare const CurrencyUnit: ({
    readonly BTC: 8;
    readonly Satoshi: 0;
} | {
    readonly DOT: 10;
    readonly Planck: 0;
} | {
    readonly KSM: 12;
    readonly Planck: 0;
} | {
    readonly INTR: 10;
    readonly Planck: 0;
} | {
    readonly KINT: 12;
    readonly Planck: 0;
})[];
export declare type CurrencyUnit = typeof CurrencyUnit[number];
export declare const WrappedCurrency: Currency<{
    readonly BTC: 8;
    readonly Satoshi: 0;
}>[];
export declare type WrappedCurrency = typeof WrappedCurrency[number];
export declare const WrappedAmount: (typeof InterBtcAmount)[];
export declare type WrappedAmount = typeof WrappedAmount[number];
export declare const GovernanceCurrency: (Currency<{
    readonly INTR: 10;
    readonly Planck: 0;
}> | Currency<{
    readonly KINT: 12;
    readonly Planck: 0;
}>)[];
export declare type GovernanceCurrency = typeof GovernanceCurrency[number];
export declare const GovernanceUnit: ({
    readonly INTR: 10;
    readonly Planck: 0;
} | {
    readonly KINT: 12;
    readonly Planck: 0;
})[];
export declare type GovernanceUnit = typeof GovernanceUnit[number];
export declare const VotingCurrency: (Currency<{
    readonly INTR: 10;
    readonly Planck: 0;
}> | Currency<{
    readonly KINT: 12;
    readonly Planck: 0;
}>)[];
export declare type VotingCurrency = typeof VotingCurrency[number];
export declare const VoteUnit: ({
    readonly INTR: 10;
    readonly Planck: 0;
} | {
    readonly KINT: 12;
    readonly Planck: 0;
})[];
export declare type VoteUnit = GovernanceUnit;
export declare type StakedBalance<U extends GovernanceUnit> = {
    amount: MonetaryAmount<Currency<U>, U>;
    endBlock: number;
};
export declare function tickerToCurrencyIdLiteral(ticker: string): CurrencyIdLiteral;
export declare function currencyIdToMonetaryCurrency<U extends CurrencyUnit>(currencyId: InterbtcPrimitivesCurrencyId): Currency<U>;
export declare function currencyIdLiteralToMonetaryCurrency<U extends CurrencyUnit>(api: ApiPromise, currencyIdLiteral: CurrencyIdLiteral): Currency<U>;
export declare function currencyIdToLiteral(currencyId: InterbtcPrimitivesCurrencyId): CurrencyIdLiteral;
export declare function tickerToMonetaryCurrency<U extends CurrencyUnit>(api: ApiPromise, ticker: string): Currency<U>;
export declare type RWEscrowPoint = {
    bias: BN;
    slope: BN;
    ts: BN;
};
export declare function parseEscrowPoint(e: EscrowPoint): RWEscrowPoint;
export declare class ChainBalance<U extends CurrencyUnit> {
    free: MonetaryAmount<Currency<U>, U>;
    transferable: MonetaryAmount<Currency<U>, U>;
    reserved: MonetaryAmount<Currency<U>, U>;
    currency: Currency<U>;
    constructor(currency: Currency<U>, free?: BigSource, transferable?: BigSource, reserved?: BigSource);
    toString(base?: U[keyof U]): string;
}
export declare function parseOrmlTokensAccountData<U extends CurrencyUnit>(data: OrmlTokensAccountData, currency: Currency<U>): ChainBalance<U>;
export declare function parseEscrowLockedBalance(governanceCurrency: Currency<GovernanceUnit>, escrowLockedBalance: EscrowLockedBalance): StakedBalance<GovernanceUnit>;
