Fix/actualize toros apy (#645)

* fix(Toros): apy values for yield products

* fix(Toros): use single apy field as its value combines base and rewards apys
This commit is contained in:
Denis Ignatovich
2023-03-10 09:26:23 +03:00
committed by GitHub
parent 44f12b6f5d
commit 61a69ce1bf

View File

@@ -13,6 +13,10 @@ const YIELD_PRODUCTS_QUERY = gql`
yieldProducts { yieldProducts {
address address
} }
apyForTorosFunds {
fundAddress
monthly
}
} }
`; `;
@@ -44,6 +48,7 @@ const formatValue = (value) => new BN(value).shiftedBy(-18).toNumber();
const getDaysSincePoolCreation = (blockTime) => const getDaysSincePoolCreation = (blockTime) =>
Math.round((Date.now() / 1000 - +blockTime) / 86400); Math.round((Date.now() / 1000 - +blockTime) / 86400);
// Fallback APY calculation simply based on pool's past performance
const calcApy = (blockTime, metrics) => { const calcApy = (blockTime, metrics) => {
const daysActive = getDaysSincePoolCreation(blockTime); const daysActive = getDaysSincePoolCreation(blockTime);
return daysActive >= 360 return daysActive >= 360
@@ -59,13 +64,17 @@ const calcApy = (blockTime, metrics) => {
const fetchTorosYieldProducts = async () => { const fetchTorosYieldProducts = async () => {
try { try {
const addresses = await request(DHEDGE_API_URL, YIELD_PRODUCTS_QUERY); const response = await request(DHEDGE_API_URL, YIELD_PRODUCTS_QUERY);
const apyData = response.apyForTorosFunds;
const products = await Promise.all( const products = await Promise.all(
addresses.yieldProducts.map(async ({ address }) => { response.yieldProducts.map(async ({ address }) => {
const poolData = await request(DHEDGE_API_URL, POOL_DATA_QUERY, { const { fund } = await request(DHEDGE_API_URL, POOL_DATA_QUERY, {
address, address,
}); });
return poolData.fund; const poolApyData = apyData.find(
({ fundAddress }) => fundAddress === fund.address
);
return { ...fund, apy: poolApyData?.monthly };
}) })
); );
return products; return products;
@@ -100,6 +109,7 @@ const listTorosYieldProducts = async () => {
performanceMetrics, performanceMetrics,
blockTime, blockTime,
fundComposition, fundComposition,
apy,
}) => { }) => {
const rewardIncentivisedPool = rewardData?.poolsWithRewards const rewardIncentivisedPool = rewardData?.poolsWithRewards
.map((address) => address.toLowerCase()) .map((address) => address.toLowerCase())
@@ -110,11 +120,7 @@ const listTorosYieldProducts = async () => {
project: 'toros', project: 'toros',
symbol, symbol,
tvlUsd: formatValue(totalValue), tvlUsd: formatValue(totalValue),
apyBase: calcApy(blockTime, performanceMetrics), apy: apy ?? calcApy(blockTime, performanceMetrics),
apyReward:
rewardIncentivisedPool && rewardData?.rewardApy
? +rewardData.rewardApy * 100
: null,
rewardTokens: rewardTokens:
rewardIncentivisedPool && rewardData?.rewardToken rewardIncentivisedPool && rewardData?.rewardToken
? [rewardData.rewardToken] ? [rewardData.rewardToken]