UNPKG

@descent-protocol/sdk

Version:

A Typescript library for interacting with the Descent Protocol

145 lines (144 loc) 5.78 kB
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, { checkVaultSetupStatus: () => checkVaultSetupStatus, getCollateralData: () => getCollateralData, getVault: () => getVault }); module.exports = __toCommonJS(getters_exports); var import_getContractAddresses = require("../contracts/getContractAddresses"); var import_generated = require("../generated"); var import_contracts = require("../contracts"); const getVault = async (collateral, owner, chainId, internal, signer) => { const collateralAddress = (0, import_getContractAddresses.getContractAddress)(collateral, chainId); const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault", chainId); const vaultGettersAddress = (0, import_getContractAddresses.getContractAddress)("VaultGetters", chainId); const multiStaticcallAddress = (0, import_getContractAddresses.getContractAddress)("MultiStaticcall", chainId); const multiStaticcallContract = (0, import_contracts.Contract)( multiStaticcallAddress, import_generated.MultiStaticcall__factory.abi, signer ); 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 multiStaticcallContract.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, collateralLocked: BigInt(depositedCollateral) - BigInt(withdrawableCollateral), borrowedAmount, accruedFees: _accruedFees, currentCollateralRatio: collateralRatio[0], availableCollateral: withdrawableCollateral[0], availablexNGN: borrowableAmount[0] }; }; const checkVaultSetupStatus = async (owner, chainId, signer) => { const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault", chainId); const vaultRouterAddress = (0, import_getContractAddresses.getContractAddress)("VaultRouter", chainId); const vaultContract = (0, import_contracts.Contract)(vaultContractAddress, import_generated.Vault__factory.abi, signer); const getVaultSetupStatus = await vaultContract.relyMapping(owner, vaultRouterAddress); return getVaultSetupStatus; }; const getCollateralData = async (collateral, chainId, signer) => { const collateralAddress = (0, import_getContractAddresses.getContractAddress)(collateral, chainId); const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault", chainId); const vaultGetterAddress = (0, import_getContractAddresses.getContractAddress)("VaultGetters", chainId); const vaultGetterContract = (0, import_contracts.Contract)(vaultGetterAddress, import_generated.VaultGetters__factory.abi, signer); const getCollateralInfo = await vaultGetterContract.getCollateralInfo( vaultContractAddress, collateralAddress ); const returnData = (await getCollateralInfo).map((item) => item); return { totalDepositedCollateral: returnData[0], totalBorrowedAmount: returnData[1], liquidationThreshold: returnData[2], debtCeiling: returnData[3], rate: returnData[4], minDeposit: returnData[5], collateralPrice: returnData[6] }; };