fbonds-core
Version:
Banx protocol sdk
87 lines (86 loc) • 4.28 kB
TypeScript
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 {};