mirror of
https://github.com/alexgo-io/DefiLlama-Adapters.git
synced 2026-01-12 16:53:02 +08:00
78 lines
3.0 KiB
JavaScript
78 lines
3.0 KiB
JavaScript
const ADDRESSES = require('../helper/coreAssets.json')
|
|
const { getConfig } = require('../helper/cache')
|
|
const { addFraxVaultToTVL } = require("./fraxVault");
|
|
const { stakings } = require("../helper/staking");
|
|
const { sumTokens2 } = require('../helper/unwrapLPs');
|
|
|
|
const blacklists = {
|
|
ethereum: ['0xcF9273BA04b875F94E4A9D8914bbD6b3C1f08EDb', '0x77e88cA17A6D384DCBB13747F6767F30e3753e63'],
|
|
base: ['0x023577b99e8A59ac18454161EecD840Bd648D782'],
|
|
}
|
|
|
|
const chains = ['ethereum', 'bsc', 'polygon', 'arbitrum', 'optimism', 'base', 'hemi']
|
|
|
|
const veVCX = "0x0aB4bC35Ef33089B9082Ca7BB8657D7c4E819a1A";
|
|
const WETH_VCX_BAL_LP_TOKEN = "0x577A7f7EE659Aa14Dc16FD384B3F8078E23F1920";
|
|
const stVCX = "0xE5d383FC43F6c370DdD3975cf9e363Ad42367697";
|
|
const VCX = "0xce246eea10988c495b4a90a905ee9237a0f91543";
|
|
|
|
const fraxLockVaultsNotRegistered = [
|
|
"0x44a7b29335cfc61C2bEA1c48710A1fE11f4aFBa9",
|
|
"0x1F0a3bF1e4Ea8f27449AFa0a3A27eFc3817431fc",
|
|
"0xDc5Ed7b972710594082479AF498B1dA02d03a273",
|
|
];
|
|
|
|
const hemiBTCVaults = [
|
|
"0x748973D83d499019840880f61B32F1f83B46f1A5",
|
|
"0x0b8E088a35879f30a4d63F686B10adAD9cB3DBE1"
|
|
]
|
|
|
|
const abis = {
|
|
getRegisteredAddresses: 'address[]:getRegisteredAddresses',
|
|
asset: 'address:asset',
|
|
totalAssets: 'uint256:totalAssets'
|
|
}
|
|
|
|
const getHemiTvl = async (api) => {
|
|
const assets = hemiBTCVaults.map(vault => ADDRESSES.hemi.WBTC) // NBTC/bgBTC Price alternative on hemi
|
|
const totalAssets = await api.multiCall({ abi: abis.totalAssets, calls: hemiBTCVaults });
|
|
api.add(assets, totalAssets)
|
|
}
|
|
|
|
const getArbTvl = async (balances, api, vaults) => {
|
|
const fraxLockVaults = await api.call({ target: "0x25172C73958064f9ABc757ffc63EB859D7dc2219", abi: abis.getRegisteredAddresses });
|
|
const allFraxs = fraxLockVaults.concat(fraxLockVaultsNotRegistered)
|
|
const filteredVaults = vaults.filter((address) => !allFraxs.includes(address))
|
|
const assets = await api.multiCall({ abi: abis.asset, calls: filteredVaults });
|
|
const totalAssets = await api.multiCall({ abi: abis.totalAssets, calls: filteredVaults });
|
|
await addFraxVaultToTVL(balances, api);
|
|
api.add(assets, totalAssets)
|
|
return balances
|
|
}
|
|
|
|
const tvl = async (api) => {
|
|
const balances = {}
|
|
const chain = api.chain
|
|
const chainId = api.getChainId()
|
|
const blacklistTokens = blacklists[chain] ?? []
|
|
const data = await getConfig('popcorn/' + api.chain, `https://raw.githubusercontent.com/Popcorn-Limited/defi-db/main/vaults/${chainId}.json`);
|
|
const vaults = Object.keys(data).filter(i => !blacklistTokens.includes(i));
|
|
if (chain === 'hemi') return getHemiTvl(api)
|
|
if (chain === 'arbitrum') return getArbTvl(balances, api, vaults)
|
|
|
|
const assets = await api.multiCall({ abi: abis.asset, calls: vaults })
|
|
const totalAssets = await api.multiCall({ abi: abis.totalAssets, calls: vaults, permitFailure: true })
|
|
api.add(assets, totalAssets.map(i => i || 0))
|
|
return sumTokens2({ api, resolveLP: true })
|
|
}
|
|
|
|
chains.forEach((chain) => {
|
|
module.exports[chain] = {
|
|
tvl,
|
|
...(chain === 'ethereum' && {
|
|
staking: stakings([stVCX, veVCX], [VCX, WETH_VCX_BAL_LP_TOKEN]),
|
|
})
|
|
}
|
|
})
|
|
|