@chorus-one/ethereum
Version:
All-in-one toolkit for building staking dApps on Ethereum network
38 lines (37 loc) • 1.5 kB
JavaScript
;
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;