UNPKG

@chorus-one/ethereum

Version:

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

40 lines (39 loc) 1.47 kB
import { MintTokenControllerAbi } from '../contracts/mintCotrollerAbi'; import { getBaseData } from '../utils/getBaseData'; import { getStake } from './getStake'; import { getMint } from './getMint'; export const getMaxMint = async (params) => { const { connector, vault, userAccount } = params; const { ltvPercent } = await getBaseData(connector, vault); const { assets } = await getStake({ connector, userAccount, vaultAddress: vault }); const mint = await getMint({ connector, userAccount, vaultAddress: vault }); if (ltvPercent <= 0n || assets <= 0n) { return 0n; } const avgRewardPerSecond = (await connector.eth.readContract({ abi: MintTokenControllerAbi, functionName: 'avgRewardPerSecond', address: connector.mintTokenController })); const maxMintedAssets = (assets * ltvPercent) / 1000000000000000000n; const maxMintedAssetsHourReward = (maxMintedAssets * avgRewardPerSecond * 3600n) / 1000000000000000000n; const canMintAssets = maxMintedAssets - maxMintedAssetsHourReward - mint.minted.assets; if (canMintAssets > 0) { const maxMintShares = (await connector.eth.readContract({ abi: MintTokenControllerAbi, functionName: 'convertToShares', address: connector.mintTokenController, args: [canMintAssets] })); return maxMintShares; } return 0n; };