UNPKG

descent-js

Version:

A Typescript library for interacting with the Descent Protocol

130 lines (129 loc) 5.5 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var getters_exports = {}; __export(getters_exports, { getCollateralData: () => getCollateralData, getVault: () => getVault }); module.exports = __toCommonJS(getters_exports); var import_ethers = require("ethers"); var import_getContractAddresses = require("../contracts/getContractAddresses"); var import_generated = require("../generated"); const getVault = async (collateral, owner, chainId, contract, internal) => { const collateralAddress = (0, import_getContractAddresses.getContractAddress)(collateral)[chainId]; const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault")[chainId]; const vaultGettersAddress = (0, import_getContractAddresses.getContractAddress)("VaultGetters")[chainId]; let iface = internal.getInterface(import_generated.VaultGetters__factory.abi); const getVaultData = iface.encodeFunctionData("getVault", [ vaultContractAddress, collateralAddress, owner ]); const getAvailablexNGN = iface.encodeFunctionData("getMaxBorrowable", [ vaultContractAddress, collateralAddress, owner ]); const getAvailableCollateral = iface.encodeFunctionData("getMaxWithdrawable", [ vaultContractAddress, collateralAddress, owner ]); const getCollateralRatio = iface.encodeFunctionData("getCollateralRatio", [ vaultContractAddress, collateralAddress, owner ]); const getHealthFactor = iface.encodeFunctionData("getHealthFactor", [ vaultContractAddress, collateralAddress, owner ]); const multiCallData = [ { target: vaultGettersAddress, callData: getVaultData }, { target: vaultGettersAddress, callData: getAvailablexNGN }, { target: vaultGettersAddress, callData: getAvailableCollateral }, { target: vaultGettersAddress, callData: getCollateralRatio }, { target: vaultGettersAddress, callData: getHealthFactor } ]; const getVaultInfo = (await contract.getMultistaticcallContract()).multiStaticcall(multiCallData); const returnData = (await getVaultInfo).map((item) => item.returnDatum); const fnc = [ "getVault", "getMaxBorrowable", "getMaxWithdrawable", "getCollateralRatio", "getHealthFactor" ]; let formattedReturnData = []; for (let i = 0; i < fnc.length; i++) { const currentFnc = fnc[i]; formattedReturnData.push(iface.decodeFunctionResult(currentFnc, returnData[i])); } const depositedCollateral = formattedReturnData[0][0]; const borrowedAmount = formattedReturnData[0][1]; const _accruedFees = formattedReturnData[0][2]; const borrowableAmount = formattedReturnData[1]; const withdrawableCollateral = formattedReturnData[2]; const collateralRatio = formattedReturnData[3]; const healthFactor = formattedReturnData[4]; return { healthFactor: healthFactor ? "Safe" : "Unsafe", depositedCollateral: import_ethers.ethers.formatUnits(depositedCollateral.toString(), 6), collateralLocked: Number(import_ethers.ethers.formatUnits(depositedCollateral.toString(), 6)) - Number(import_ethers.ethers.formatUnits(withdrawableCollateral.toString(), 6)), borrowedAmount: import_ethers.ethers.formatUnits(borrowedAmount.toString(), 18), accruedFees: import_ethers.ethers.formatUnits(_accruedFees.toString(), 18), currentCollateralRatio: `${import_ethers.ethers.formatUnits(collateralRatio.toString(), 16)}%`, availableCollateral: import_ethers.ethers.formatUnits(withdrawableCollateral.toString(), 6), availablexNGN: import_ethers.ethers.formatUnits(borrowableAmount.toString(), 18) }; }; const getCollateralData = async (collateral, chainId, contract) => { const collateralAddress = (0, import_getContractAddresses.getContractAddress)(collateral)[chainId]; const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault")[chainId]; const getCollateralInfo = (await contract.getVaultGetterContract()).getCollateralInfo( vaultContractAddress, collateralAddress ); const returnData = (await getCollateralInfo).map((item) => item); return { totalDepositedCollateral: import_ethers.ethers.formatUnits(returnData[0].toString(), 6), totalBorrowedAmount: import_ethers.ethers.formatUnits(returnData[1].toString(), 18), liquidationThreshold: `${import_ethers.ethers.formatUnits(returnData[2].toString(), 16)}%`, debtCeiling: import_ethers.ethers.formatUnits(returnData[3].toString(), 18), rate: import_ethers.ethers.formatUnits(returnData[4].toString(), 6), minDeposit: import_ethers.ethers.formatUnits(returnData[5].toString(), 18), collateralPrice: import_ethers.ethers.formatUnits(returnData[6].toString(), 6) }; };