UNPKG

descent-js

Version:

A Typescript library for interacting with the Descent Protocol

148 lines (147 loc) 6.51 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 vault_exports = {}; __export(vault_exports, { VaultHealthFactor: () => VaultHealthFactor, VaultOperations: () => VaultOperations, burnCurrency: () => burnCurrency, collateralizeVault: () => collateralizeVault, mintCurrency: () => mintCurrency, withdrawCollateral: () => withdrawCollateral }); module.exports = __toCommonJS(vault_exports); var import_ethers = require("ethers"); var import_getContractAddresses = require("../contracts/getContractAddresses"); var import_factories = require("../generated/factories"); var VaultHealthFactor = /* @__PURE__ */ ((VaultHealthFactor2) => { VaultHealthFactor2["UNSAFE"] = "UNSAFE"; VaultHealthFactor2["SAFE"] = "SAFE"; return VaultHealthFactor2; })(VaultHealthFactor || {}); var VaultOperations = /* @__PURE__ */ ((VaultOperations2) => { VaultOperations2[VaultOperations2["DepositCollateral"] = 0] = "DepositCollateral"; VaultOperations2[VaultOperations2["WithdrawCollateral"] = 1] = "WithdrawCollateral"; VaultOperations2[VaultOperations2["MintCurrency"] = 2] = "MintCurrency"; VaultOperations2[VaultOperations2["BurnCurrency"] = 3] = "BurnCurrency"; return VaultOperations2; })(VaultOperations || {}); const collateralizeVault = async (amount, collateral, owner, chainId, transaction, internal) => { const collateralAddress = (0, import_getContractAddresses.getContractAddress)(collateral)[chainId]; const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault")[chainId]; const _amount = BigInt(amount) * BigInt(1e6); const to = (0, import_getContractAddresses.getContractAddress)("VaultRouter")[chainId]; let iface = internal.getInterface(import_factories.VaultRouter__factory.abi); const data = iface.encodeFunctionData("multiInteract", [ [vaultContractAddress], [0 /* DepositCollateral */], [collateralAddress], [import_ethers.ethers.ZeroAddress], [_amount] ]); const txConfig = await internal.getTransactionConfig({ from: owner, to, data }); const depositResResult = await transaction.send(txConfig, {}); return depositResResult; }; const withdrawCollateral = async (amount, collateral, owner, chainId, transaction, internal, contract) => { const collateralAddress = (0, import_getContractAddresses.getContractAddress)(collateral)[chainId]; const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault")[chainId]; const _amount = BigInt(amount) * BigInt(1e6); const to = (0, import_getContractAddresses.getContractAddress)("VaultRouter")[chainId]; let iface = internal.getInterface(import_factories.VaultRouter__factory.abi); const maxWithdrawable = (await contract.getVaultGetterContract()).getMaxWithdrawable( vaultContractAddress, collateralAddress, owner ); const formattedMaxWithdrawable = (0, import_ethers.formatUnits)((await maxWithdrawable).toString(), 6); if (Number(amount) > Number(formattedMaxWithdrawable.toString())) { throw new Error(" Withdrawal amount is more than available collateral balance"); } const data = iface.encodeFunctionData("multiInteract", [ [vaultContractAddress], [1 /* WithdrawCollateral */], [collateralAddress], [owner], [_amount] ]); const txConfig = await internal.getTransactionConfig({ from: owner, to, data }); const withdrawResResult = await transaction.send(txConfig, {}); return withdrawResResult; }; const mintCurrency = async (amount, collateral, owner, chainId, transaction, internal, contract) => { const collateralAddress = (0, import_getContractAddresses.getContractAddress)(collateral)[chainId]; const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault")[chainId]; const _amount = BigInt(amount) * BigInt(1e18); const maxBorrowable = (await contract.getVaultGetterContract()).getMaxBorrowable( vaultContractAddress, collateralAddress, owner ); const formattedmaxBorrowable = (0, import_ethers.formatEther)((await maxBorrowable).toString()); const to = (0, import_getContractAddresses.getContractAddress)("VaultRouter")[chainId]; let iface = internal.getInterface(import_factories.VaultRouter__factory.abi); const data = iface.encodeFunctionData("multiInteract", [ [vaultContractAddress], [2 /* MintCurrency */], [collateralAddress], [owner], [_amount] ]); const txConfig = await internal.getTransactionConfig({ from: owner, to, data }); const mintResResult = await transaction.send(txConfig, {}); return mintResResult; }; const burnCurrency = async (amount, collateral, owner, chainId, transaction, internal, contract) => { const collateralAddress = (0, import_getContractAddresses.getContractAddress)(collateral)[chainId]; const vaultContractAddress = (0, import_getContractAddresses.getContractAddress)("Vault")[chainId]; const _amount = BigInt(amount) * BigInt(1e18); const balance = await (await contract.getCurrencyContract()).balanceOf(owner); const formattedBalance = await (0, import_ethers.formatEther)(balance.toString()); if (Number(amount) > Number(formattedBalance.toString())) { throw new Error("Payback xNGN: Insufficient funds"); } const to = (0, import_getContractAddresses.getContractAddress)("VaultRouter")[chainId]; let iface = internal.getInterface(import_factories.VaultRouter__factory.abi); const data = iface.encodeFunctionData("multiInteract", [ [vaultContractAddress], [3 /* BurnCurrency */], [collateralAddress], [owner], [_amount] ]); const txConfig = await internal.getTransactionConfig({ from: owner, to, data }); const burnResult = await transaction.send(txConfig, {}); return burnResult; };