@chorus-one/ethereum
Version:
All-in-one toolkit for building staking dApps on Ethereum network
44 lines (43 loc) • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMaxMint = void 0;
const mintCotrollerAbi_1 = require("../contracts/mintCotrollerAbi");
const getBaseData_1 = require("../utils/getBaseData");
const getStake_1 = require("./getStake");
const getMint_1 = require("./getMint");
const getMaxMint = async (params) => {
const { connector, vault, userAccount } = params;
const { ltvPercent } = await (0, getBaseData_1.getBaseData)(connector, vault);
const { assets } = await (0, getStake_1.getStake)({
connector,
userAccount,
vaultAddress: vault
});
const mint = await (0, getMint_1.getMint)({
connector,
userAccount,
vaultAddress: vault
});
if (ltvPercent <= 0n || assets <= 0n) {
return 0n;
}
const avgRewardPerSecond = (await connector.eth.readContract({
abi: mintCotrollerAbi_1.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: mintCotrollerAbi_1.MintTokenControllerAbi,
functionName: 'convertToShares',
address: connector.mintTokenController,
args: [canMintAssets]
}));
return maxMintShares;
}
return 0n;
};
exports.getMaxMint = getMaxMint;