@chorus-one/ethereum
Version:
All-in-one toolkit for building staking dApps on Ethereum network
34 lines (33 loc) • 1.28 kB
JavaScript
import { parseEther } from 'viem';
import { MintTokenControllerAbi } from '../contracts/mintCotrollerAbi';
import { getBaseData } from '../utils/getBaseData';
import { getStake } from './getStake';
import { getMint } from './getMint';
export const getMaxUnstake = async (params) => {
const { connector, vault, userAccount } = params;
const min = parseEther('0.00001');
const { ltvPercent } = await getBaseData(connector, vault);
const { assets } = await getStake({
connector,
userAccount,
vaultAddress: vault
});
const { minted } = await getMint({
connector,
userAccount,
vaultAddress: vault
});
if (ltvPercent <= 0 || assets < min) {
return 0n;
}
const avgRewardPerSecond = (await connector.eth.readContract({
abi: 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;
};