mirror of
https://github.com/uniwhale-io/DefiLlama-yield-server.git
synced 2026-04-30 04:45:20 +08:00
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:
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user