@moonwell-fi/moonwell-sdk
Version:
TypeScript Interface for Moonwell
93 lines • 4.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getUserRewardsData = void 0;
const viem_1 = require("viem");
const index_js_1 = require("../../../common/index.js");
const index_js_2 = require("../../../environments/index.js");
const index_js_3 = require("../../../environments/utils/index.js");
const getUserRewardsData = async (params) => {
const homeEnvironment = Object.values(index_js_2.publicEnvironments).find((e) => e.custom?.governance?.chainIds?.includes(params.environment.chainId)) || params.environment;
const viewsContract = params.environment.contracts.views;
const homeViewsContract = homeEnvironment.contracts.views;
const userData = await Promise.all([
viewsContract?.read.getAllMarketsInfo(),
viewsContract?.read.getUserRewards([params.account]),
homeViewsContract?.read.getNativeTokenPrice(),
homeViewsContract?.read.getGovernanceTokenPrice(),
]);
const [allMarkets, userRewards, nativeTokenPriceRaw, governanceTokenPriceRaw,] = userData;
const governanceTokenPrice = new index_js_1.Amount(governanceTokenPriceRaw || 0n, 18);
const nativeTokenPrice = new index_js_1.Amount(nativeTokenPriceRaw || 0n, 18);
let tokenPrices = allMarkets
?.map((marketInfo) => {
const marketFound = (0, index_js_3.findMarketByAddress)(params.environment, marketInfo.market);
if (marketFound) {
return {
token: marketFound.underlyingToken,
tokenPrice: new index_js_1.Amount(marketInfo.underlyingPrice, 36 - marketFound.underlyingToken.decimals),
};
}
else {
return;
}
})
.filter((token) => !!token) || [];
if (params.environment.custom?.governance?.token) {
tokenPrices = [
...tokenPrices,
{
token: params.environment.config.tokens[params.environment.custom.governance.token],
tokenPrice: governanceTokenPrice,
},
];
}
tokenPrices = [
...tokenPrices,
{
token: (0, index_js_3.findTokenByAddress)(params.environment, viem_1.zeroAddress),
tokenPrice: nativeTokenPrice,
},
];
const markets = (allMarkets || []).filter((r) => params.markets ? params.markets.includes(r.market) : true);
const rewards = markets.flatMap((marketInfo) => {
const market = (0, index_js_3.findMarketByAddress)(params.environment, marketInfo.market);
if (market) {
const marketRewards = userRewards?.filter((r) => r.market === marketInfo.market) || [];
return marketRewards
.filter((reward) => {
const token = (0, index_js_3.findTokenByAddress)(params.environment, reward.rewardToken);
return token !== undefined;
})
.map((reward) => {
const token = (0, index_js_3.findTokenByAddress)(params.environment, reward.rewardToken);
const isGovernanceToken = token.symbol === params.environment.custom?.governance?.token;
const isNativeToken = token.address === viem_1.zeroAddress;
const tokenPrice = tokenPrices?.find((r) => r?.token.address === reward.rewardToken)?.tokenPrice.value;
const price = (isNativeToken
? nativeTokenPrice.value
: isGovernanceToken
? governanceTokenPrice.value
: tokenPrice) || 0;
const supplyRewards = new index_js_1.Amount(reward.supplyRewardsAmount, token.decimals);
const borrowRewards = new index_js_1.Amount(reward.borrowRewardsAmount, token.decimals);
const result = {
chainId: params.environment.chainId,
account: params.account,
market: market.marketToken,
rewardToken: token,
supplyRewards,
supplyRewardsUsd: supplyRewards.value * price,
borrowRewards,
borrowRewardsUsd: borrowRewards.value * price,
};
return result;
});
}
else {
return [];
}
});
return rewards;
};
exports.getUserRewardsData = getUserRewardsData;
//# sourceMappingURL=common.js.map