UNPKG

@chorus-one/ethereum

Version:

All-in-one toolkit for building staking dApps on Ethereum network

38 lines (37 loc) 1.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMaxUnstake = void 0; const viem_1 = require("viem"); const mintCotrollerAbi_1 = require("../contracts/mintCotrollerAbi"); const getBaseData_1 = require("../utils/getBaseData"); const getStake_1 = require("./getStake"); const getMint_1 = require("./getMint"); const getMaxUnstake = async (params) => { const { connector, vault, userAccount } = params; const min = (0, viem_1.parseEther)('0.00001'); const { ltvPercent } = await (0, getBaseData_1.getBaseData)(connector, vault); const { assets } = await (0, getStake_1.getStake)({ connector, userAccount, vaultAddress: vault }); const { minted } = await (0, getMint_1.getMint)({ connector, userAccount, vaultAddress: vault }); if (ltvPercent <= 0 || assets < min) { return 0n; } const avgRewardPerSecond = (await connector.eth.readContract({ abi: mintCotrollerAbi_1.MintTokenControllerAbi, functionName: 'avgRewardPerSecond', address: connector.mintTokenController })); const secondsInHour = 60n * 60n; const gap = (avgRewardPerSecond * secondsInHour * minted.assets) / 1000000000000000000n; const lockedAssets = ((minted.assets + gap) * 1000000000000000000n) / ltvPercent; const maxWithdrawAssets = assets - lockedAssets; return maxWithdrawAssets > min ? maxWithdrawAssets : 0n; }; exports.getMaxUnstake = getMaxUnstake;