add tvl from vaults HyperBloom (#15428)

This commit is contained in:
Shanty
2025-07-24 16:03:43 +02:00
committed by GitHub
parent fe0f6acf7d
commit ec7faa27be
2 changed files with 83 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
const { getConfig } = require('../helper/cache')
const { yieldHelperPair } = require('../helper/unknownTokens')
const chain = "hyperliquid";
module.exports = {
misrepresentedTokens: true,
};
module.exports[chain] = {
tvl: async () => {
const pools = await getConfig('hyperbloom', 'https://raw.githubusercontent.com/hyperbloomxyz/vaults.config/refs/heads/master/hyperliquid.json');
const beefyPools = pools.filter(p => p.platformId === 'beefy');
const vaults = beefyPools.map(p => p.earnedTokenAddress).filter(Boolean);
return yieldHelperPair({ vaults, chain, useDefaultCoreAssets: true });
}
}

View File

@@ -266,6 +266,68 @@ function uniTvlExport(chain, factory, options = {}) {
return exportsObj
}
// Default ABI for CLM vaults that expose wants() => (token0, token1) and balances() => (amount0, amount1)
const pairApis = {
balances: 'function balances() view returns (uint256 amount0, uint256 amount1)',
wants: 'function wants() view returns (address token0, address token1)',
}
// Helper for CLM-style vaults (wants() + balances()) returning two tokens and two balances
async function yieldHelperPair({
chain = 'ethereum', block, coreAssets = [], blacklist = [], whitelist = [], vaults = [], transformAddress,
useDefaultCoreAssets = false,
balanceAPI = pairApis.balances,
tokenAPI = pairApis.wants,
restrictTokenRatio,
}) {
if (!balanceAPI || !tokenAPI)
throw new Error('yieldHelperPair requires both balanceAPI and tokenAPI')
if (!coreAssets.length && useDefaultCoreAssets)
coreAssets.push(...getCoreAssets(chain))
if (!transformAddress)
transformAddress = await getChainTransform(chain)
const calls = vaults.map(i => ({ target: i }))
const { output: balanceRes } = await sdk.api.abi.multiCall({ abi: balanceAPI, calls, chain, block })
const { output: tokenRes } = await sdk.api.abi.multiCall({ abi: tokenAPI, calls, chain, block })
const allTokens = []
const allBalances = []
balanceRes.forEach((balObj, i) => {
const tokensObj = tokenRes[i]?.output || {}
const token0 = tokensObj.token0 ?? tokensObj[0]
const token1 = tokensObj.token1 ?? tokensObj[1]
const amount0 = balObj.output?.amount0 ?? balObj.output?.[0] ?? 0
const amount1 = balObj.output?.amount1 ?? balObj.output?.[1] ?? 0
if (token0) {
allTokens.push(token0)
allBalances.push(amount0)
}
if (token1) {
allTokens.push(token1)
allBalances.push(amount1)
}
})
const { updateBalances } = await getTokenPrices({ chain, block, lps: allTokens, coreAssets, blacklist, whitelist, transformAddress, restrictTokenRatio, useDefaultCoreAssets, })
const balances = {}
allTokens.forEach((t, idx) => sdk.util.sumSingleBalance(balances, transformAddress(t), allBalances[idx]))
await updateBalances(balances)
return transformBalances(chain, balances)
}
// --------------------------------------------------------------------------
module.exports = {
nullAddress,
getTokenPrices,
@@ -281,4 +343,5 @@ module.exports = {
yieldHelper,
uniTvlExport,
uniTvlExports,
yieldHelperPair,
};