UNPKG

fbonds-core

Version:

Banx protocol sdk

45 lines (44 loc) 2.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calcMaxCollateralToReceive = calcMaxCollateralToReceive; exports.calcTokenToGet = calcTokenToGet; exports.calcOfferLtv = calcOfferLtv; exports.calcCollateralsPerTokenByFromLtv = calcCollateralsPerTokenByFromLtv; exports.calcMaxTokenToGetForMarket = calcMaxTokenToGetForMarket; exports.calcMaxCollateralToReceiveForMarket = calcMaxCollateralToReceiveForMarket; const constants_1 = require("../constants"); const anchor_1 = require("@coral-xyz/anchor"); const lodash_1 = require("lodash"); function calcMaxCollateralToReceive({ maxTokenToGet, tokenDecimals, collateralsPerToken, }) { const denominator = new anchor_1.BN(Math.pow(10, tokenDecimals)); return maxTokenToGet.mul(collateralsPerToken).div(denominator); } function calcTokenToGet({ collateralToReceive, tokenDecimals, collateralsPerToken }) { const denominator = new anchor_1.BN(Math.pow(10, tokenDecimals)); return collateralToReceive.mul(denominator).div(collateralsPerToken); } function calcOfferLtv(params) { const { collateralsPerToken, tokenPrice } = params; return tokenPrice.mul(constants_1.BASE_POINTS_BN).div(collateralsPerToken); } function calcCollateralsPerTokenByFromLtv(params) { const { ltv, tokenPrice } = params; return tokenPrice.mul(constants_1.BASE_POINTS_BN).div(ltv); } function calcMaxTokenToGetForMarket(simpleOffers) { return (0, lodash_1.chain)(simpleOffers) .map(({ maxTokenToGet }) => maxTokenToGet) .reduce((acc, amount) => acc.add(amount), constants_1.ZERO_BN) .value(); } function calcMaxCollateralToReceiveForMarket(params) { const { simpleOffers, tokenDecimals, customCollateralsPerToken } = params; return (0, lodash_1.chain)(simpleOffers) .map(({ maxTokenToGet, collateralsPerToken }) => calcMaxCollateralToReceive({ maxTokenToGet, tokenDecimals, collateralsPerToken: customCollateralsPerToken || collateralsPerToken, })) .reduce((acc, amount) => acc.add(amount), constants_1.ZERO_BN) .value(); }