UNPKG

@moonwell-fi/moonwell-sdk

Version:

TypeScript Interface for Moonwell

70 lines 3.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStakingInfo = getStakingInfo; const chains_1 = require("viem/chains"); const index_js_1 = require("../../common/index.js"); const index_js_2 = require("../../environments/index.js"); const common_js_1 = require("./common.js"); async function getStakingInfo(client, args) { const environments = (0, index_js_1.getEnvironmentsFromArgs)(client, args); const envsWithStaking = environments.filter((env) => env.config.contracts.stakingToken); const envStakingInfoSettlements = await Promise.allSettled(envsWithStaking.map(async (environment) => { const homeEnvironment = Object.values(index_js_2.publicEnvironments).find((e) => e.custom?.governance?.chainIds?.includes(environment.chainId)) || environment; const isBase = environment.chainId === chains_1.base.id; const settlements = await Promise.allSettled([ environment.contracts.views?.read.getStakingInfo(), homeEnvironment.contracts.views?.read.getGovernanceTokenPrice(), ...(isBase ? [ environment.contracts.views?.read.getStakingInfo({ blockNumber: BigInt(34149943), }), ] : []), ]); return settlements.map((s) => s.status === "fulfilled" ? s.value : undefined); })); const envStakingInfo = envStakingInfoSettlements .filter((s) => s.status === "fulfilled") .map((s) => s.value) .filter((val) => val !== undefined); const baseEnv = envsWithStaking.find((env) => env.chainId === chains_1.base.id); const stakingTokenKey = baseEnv?.config.contracts.stakingToken; const baseStkToken = baseEnv != null && stakingTokenKey != null ? baseEnv.config.tokens[stakingTokenKey] : undefined; const baseStakingApr = baseStkToken != null ? await (0, common_js_1.getMerklStakingApr)(baseStkToken.address) : 0; const result = envsWithStaking.flatMap((curr, index) => { const token = curr.config.tokens[curr.config.contracts.governanceToken]; const stakingToken = curr.config.tokens[curr.config.contracts.stakingToken]; const envStakingInfoData = envStakingInfo[index][0]; const envGovernanceTokenPriceData = envStakingInfo[index][1]; const envStakingInfoDataAfterX28Proposal = envStakingInfo[index][2]; const isBase = curr.chainId === chains_1.base.id; if (!envStakingInfoData || (isBase && !envStakingInfoDataAfterX28Proposal)) { return []; } const { cooldown, distributionEnd, emissionPerSecond: emissionPerSecondRaw, totalSupply: totalSupplyRaw, unstakeWindow, } = envStakingInfoData; const governanceTokenPrice = new index_js_1.Amount((envGovernanceTokenPriceData ?? 0n), 18); const totalSupply = new index_js_1.Amount(totalSupplyRaw, 18); const emissionPerSecond = new index_js_1.Amount(emissionPerSecondRaw, 18); const emissionPerYear = emissionPerSecond.value * index_js_1.SECONDS_PER_DAY * index_js_1.DAYS_PER_YEAR; const apr = ((emissionPerYear + totalSupply.value) / totalSupply.value - 1) * 100; const stakingInfo = { apr: isBase ? baseStakingApr : apr, chainId: curr.chainId, cooldown: Number(cooldown), distributionEnd: Number(distributionEnd), token, tokenPrice: governanceTokenPrice.value, stakingToken, totalSupply, totalSupplyUSD: totalSupply.value * governanceTokenPrice.value, unstakeWindow: Number(unstakeWindow), }; return stakingInfo; }); return result; } //# sourceMappingURL=getStakingInfo.js.map