import { BondOfferV3, UserVault } from '../types';
import { SimpleOffer } from './offer';
import { BN } from '@coral-xyz/anchor';
import { Dictionary } from 'lodash';
type BorrowOffer = {
    maxCollateralToReceive: BN;
    ltv: BN;
} & SimpleOffer;
type CreateTokenBorrowOffersParams = {
    bondOffers: BondOfferV3[];
    userVaults: UserVault[];
    collateralsPerTokenLimit: BN | undefined;
    tokenPrice: BN;
    tokenDecimals: number;
};
/**
 *
 * @param bondOffers BondOfferV3[]
 * @param userVaults UserVault[]
 * @param collateralsPerTokenLimit Slice offers according to collateralsPerTokenLimit
 * Set to undefined to disable slicing
 * @param tokenPrice token(SOL|USDC) price in collaterals.
 * F.e. 1 USDC === 6.273 BANX
 * tokenPrice = 6.273 * 1e9(banx token decimals) = 6273*1e6
 * @param tokenDecimals token decimals number
 * F.e. for USDC = 6; for SOL = 9
 * @returns BorrowOffer[]
 */
export declare function createTokenBorrowOffers({ bondOffers, userVaults, collateralsPerTokenLimit, tokenPrice, tokenDecimals, }: CreateTokenBorrowOffersParams): BorrowOffer[];
type createTokenBorrowOffersCustomLTVParams = {
    bondOffers: BondOfferV3[];
    userVaults: UserVault[];
    userCollateralsPerToken: BN | undefined;
    tokenPrice: BN;
    tokenDecimals: number;
};
/**
 *
 * @param bondOffers BondOfferV3[]
 * @param userVaults UserVault[]
 * @param userCollateralsPerToken Allows to use offers with custom LTV:
 * Filters offers with collateralsPerToken <= userCollateralsPerToken
 * and sets userCollateralsPerToken in collateralsPerToken field.
 * Pass undefined to avoid custom LTV usage.
 * @param tokenPrice token(SOL|USDC) price in collaterals.
 * F.e. 1 USDC === 6.273 BANX
 * tokenPrice = 6.273 * 1e9(banx token decimals) = 6273*1e6
 * @param tokenDecimals token decimals number
 * F.e. for USDC = 6; for SOL = 9
 * @returns BorrowOffer[]
 */
export declare function createTokenBorrowOffersWithCustomLTV({ bondOffers, userVaults, userCollateralsPerToken, tokenPrice, tokenDecimals, }: createTokenBorrowOffersCustomLTVParams): BorrowOffer[];
export declare function createEscrowBalanceByLender(userVaults: UserVault[]): Dictionary<BN>;
export declare function filterSimpleOffersByVaultBalance(offers: SimpleOffer[], userVaults: UserVault[]): SimpleOffer[];
/**
 * Calculates the number of tokens per collateral unit.
 * @param {BN} collateralsPerToken - The amount of collateral per token. (1 human token = collateral decimals)
 * @param {number} collateralDecimals - The number of decimal places used by the collateral token.
 * @param {number} lendingTokenDecimals - The number of decimal places used by the lending token.
 * @returns {BN} - tokensPerCollateral (1 humanCollateral = token decimals)
 */
export declare const calculateTokensPerCollateral: (collateralsPerToken: BN, collateralDecimals: number, lendingTokenDecimals: number) => BN;
/**
 * @param {SimpleOffer} offer - SimpleOffer
 * @param {BN} maxCollateralToReceive - max amount of collateral that can be borrowed from offer
 * @param {number} tokenPriceInCollateral - how much collateral is 1 token worth. F.e. 1 USDC = 0.2339 JLP. tokenPriceInCollateral=0.2339
 * @param {number} collateralDecimals - decimals of collateral. F.e. 9
 * @param {number} tokenDecimals - decimals of token. F.e. 9
 * @returns Max multiplier in percent. F.e. 50.5 === 50.5%
 */
export declare const calcMaxMultiplier: ({ offer, maxCollateralToReceive, tokenPriceInCollateral, collateralDecimals, tokenDecimals, }: {
    offer: SimpleOffer;
    maxCollateralToReceive: BN;
    tokenPriceInCollateral: number;
    collateralDecimals: number;
    tokenDecimals: number;
}) => number;
/**
 * Calculates the number of tokens per collateral unit.
 * @param {number} collateralsPerToken - The amount of collateral per token. (1 human token = collateral decimals)
 * @param {number} collateralDecimals - The number of decimal places used by the collateral token.
 * @param {number} lendingTokenDecimals - The number of decimal places used by the lending token.
 * @returns {number} - tokensPerCollateral (1 humanCollateral = token decimals)
 */
export declare const calculateTokensPerCollateralFloat: (collateralsPerToken: number, collateralDecimals: number, lendingTokenDecimals: number) => number;
export {};
