descent-js
Version:
A Typescript library for interacting with the Descent Protocol
130 lines (129 loc) • 5.5 kB
JavaScript
;
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)
};
};