@descent-protocol/sdk
Version:
A Typescript library for interacting with the Descent Protocol
145 lines (144 loc) • 5.78 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, {
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]
};
};