fbonds-core
Version:
Banx protocol sdk
45 lines (44 loc) • 2.1 kB
JavaScript
;
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();
}