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