fbonds-core
Version:
Banx protocol sdk
69 lines (68 loc) • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calculateAPRforOffer = exports.calculateLtvApr = exports.getFactoredApr = exports.calculateMCApr = void 0;
const calculateMCApr = (mcap) => {
if (mcap >= 1000) {
return 0;
}
if (mcap >= 500) {
return 30;
}
if (mcap >= 200) {
return 50;
}
if (mcap >= 100) {
return 70;
}
if (mcap >= 50) {
return 100;
}
return 200;
};
exports.calculateMCApr = calculateMCApr;
const getFactoredApr = (ltvApr, mcap) => {
if (mcap >= 1000) {
return ltvApr;
}
if (mcap >= 500) {
return ltvApr * 0.3 + ltvApr;
}
if (mcap >= 200) {
return ltvApr * 0.5 + ltvApr;
}
if (mcap >= 100) {
return ltvApr * 0.7 + ltvApr;
}
if (mcap >= 50) {
return ltvApr;
}
return ltvApr * 2;
};
exports.getFactoredApr = getFactoredApr;
const calculateLtvApr = (loanToValue) => {
const minApr = 8;
const maxApr = 50;
const minLtv = 30;
const maxLtv = 99;
// If loanToValue is less than or equal to minLtv, return minApr
if (loanToValue <= minLtv) {
return minApr;
}
// If loanToValue is greater than or equal to maxLtv, return maxApr
if (loanToValue >= maxLtv) {
return maxApr;
}
// Calculate APR for values between minLtv and maxLtv
const aprStep = (maxApr - minApr) / (maxLtv - minLtv); // Calculate the APR step value
const apr = minApr + (loanToValue - minLtv) * aprStep; // Calculate and round to nearest 100
return apr;
};
exports.calculateLtvApr = calculateLtvApr;
const calculateAPRforOffer = (offerLTV, marketCap) => {
// skipping util rate
const baseApr = (0, exports.calculateLtvApr)(offerLTV) + (0, exports.calculateMCApr)(marketCap);
const factorApr = (0, exports.getFactoredApr)((0, exports.calculateLtvApr)(offerLTV), marketCap) +
(0, exports.calculateMCApr)(marketCap);
return { apr: baseApr, factoredApr: factorApr };
};
exports.calculateAPRforOffer = calculateAPRforOffer;