UNPKG

@firefly-exchange/library-sui

Version:

Sui library housing helper methods, classes to interact with Bluefin protocol(s) deployed on Sui

56 lines (55 loc) 2.79 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Balance = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const library_1 = require("../library"); const constants_1 = require("../constants"); class Balance { constructor(mro, qPos, margin, oiOpen, isPosPositive) { this.mro = new bignumber_js_1.default(mro); this.qPos = new bignumber_js_1.default(qPos); this.margin = new bignumber_js_1.default(margin); this.oiOpen = new bignumber_js_1.default(oiOpen); this.isPosPositive = isPosPositive; } static fromPosition(position) { return new Balance(position.mro, position.qPos, position.margin, position.oiOpen, position.isPosPositive); } pPos() { return this.qPos.gt(0) ? this.oiOpen.multipliedBy(constants_1.BIGNUMBER_BASE_ON_CHAIN).dividedBy(this.qPos) : new bignumber_js_1.default("0"); } marginRatio(price, settlementAmount = (0, bignumber_js_1.default)(0)) { // if no position, margin ratio is one if (this.qPos.isEqualTo(0)) return constants_1.BIGNUMBER_BASE_ON_CHAIN; let marginRatio; const balance = price.times(this.qPos).dividedBy(constants_1.BIGNUMBER_BASE_ON_CHAIN); if (this.isPosPositive) { // long position const debt = this.oiOpen.minus(this.margin).minus(settlementAmount); const debtRatio = debt.times(constants_1.BIGNUMBER_BASE_ON_CHAIN).dividedBy(balance); // if this ratio exceeds 1 it means that the exchange is underwater. // It must be below 1 - maintenance ratio marginRatio = constants_1.BIGNUMBER_BASE_ON_CHAIN.minus(debtRatio); } else { // short position const debt = this.oiOpen.plus(this.margin).plus(settlementAmount); const debtRatio = debt.times(constants_1.BIGNUMBER_BASE_ON_CHAIN).dividedBy(balance); marginRatio = debtRatio.minus(constants_1.BIGNUMBER_BASE_ON_CHAIN); } return marginRatio; } printPosition() { console.log("isPosPositive:", this.isPosPositive); console.log("margin:", (0, library_1.toBaseNumber)(this.margin, 3, constants_1.BASE_DECIMALS_ON_CHAIN)); console.log("oiOpen:", (0, library_1.toBaseNumber)(this.oiOpen, 3, constants_1.BASE_DECIMALS_ON_CHAIN)); console.log("qPos:", (0, library_1.toBaseNumber)(this.qPos, 3, constants_1.BASE_DECIMALS_ON_CHAIN)); console.log("mro:", (0, library_1.toBaseNumber)(this.mro, 3, constants_1.BASE_DECIMALS_ON_CHAIN)); } } exports.Balance = Balance;