mirror of
https://github.com/alexgo-io/DefiLlama-Adapters.git
synced 2026-04-29 13:25:30 +08:00
add tvl from vaults HyperBloom (#15428)
This commit is contained in:
20
projects/HyperBloom/index.js
Normal file
20
projects/HyperBloom/index.js
Normal 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 });
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
};
|
||||
Reference in New Issue
Block a user