mirror of
https://github.com/alexgo-io/DefiLlama-Adapters.git
synced 2026-01-12 22:43:12 +08:00
fix dyson tvl
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
const { getConfig } = require('../helper/cache');
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const { staking } = require('../helper/staking')
|
||||
const { staking } = require('../helper/staking');
|
||||
const { sumTokens2 } = require('../helper/unwrapLPs');
|
||||
const utils = require('../helper/utils');
|
||||
const { toUSDTBalances } = require('../helper/balances');
|
||||
|
||||
|
||||
const TVL_URL = 'https://api2.dyson.money/vaults/metrics/tvl';
|
||||
@@ -11,14 +10,13 @@ const sphere_token = "0x62F594339830b90AE4C084aE7D223fFAFd9658A7"
|
||||
const ylSPHEREvault = "0x4Af613f297ab00361D516454E5E46bc895889653"
|
||||
|
||||
|
||||
let TVL_byNetwork;
|
||||
module.exports = {
|
||||
doublecounted: true,
|
||||
methodology: "Counts the tokens locked in the contracts.",
|
||||
};
|
||||
|
||||
async function polygonTvl(timestamp, block, chainBlocks) {
|
||||
let balances = {};
|
||||
|
||||
// add tokens in ylSPHERE vault
|
||||
await sumTokens2({
|
||||
balances,
|
||||
const config = {
|
||||
polygon: {
|
||||
owners: [ylSPHEREvault],
|
||||
tokens: [
|
||||
ADDRESSES.polygon.WMATIC_2,
|
||||
@@ -28,61 +26,53 @@ async function polygonTvl(timestamp, block, chainBlocks) {
|
||||
ADDRESSES.polygon.WBTC,
|
||||
"0x172370d5Cd63279eFa6d502DAB29171933a610AF"
|
||||
],
|
||||
chain: 'polygon',
|
||||
block: chainBlocks.polygon
|
||||
})
|
||||
|
||||
// calculate TVL for polygon from API
|
||||
const polygon_tvl = await fetchNetworkTVL('polygon')();
|
||||
for (const [token, balance] of Object.entries(polygon_tvl)) {
|
||||
balances[token] = (balances[token] || 0) + balance
|
||||
}
|
||||
return balances;
|
||||
}
|
||||
|
||||
function fetchNetworkTVL(network) {
|
||||
return async () => {
|
||||
try {
|
||||
if(!TVL_byNetwork) TVL_byNetwork = utils.fetchURL(`${TVL_URL}`).then(response => response.data);
|
||||
|
||||
const response = await TVL_byNetwork;
|
||||
const total = Number(response[network].total); // all numeric values on the API are stored as string for precision
|
||||
|
||||
if(!total) return {}
|
||||
|
||||
return toUSDTBalances(total);
|
||||
} catch(e) {
|
||||
console.error(`There was an error trying to fetch 'dyson-money' TVL on network - ${network}. Exited with error: ${e}`);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = {
|
||||
doublecounted: true,
|
||||
methodology: "Counts the tokens locked in the contracts.",
|
||||
polygon: {
|
||||
tvl: polygonTvl,
|
||||
staking: staking(ylSPHEREvault, sphere_token)
|
||||
},
|
||||
optimism: {
|
||||
tvl: fetchNetworkTVL('optimism'),
|
||||
staking: staking(ylSPHEREvault, sphere_token),
|
||||
},
|
||||
optimism: {},
|
||||
arbitrum: {
|
||||
tvl: fetchNetworkTVL('arbitrum'),
|
||||
blacklistedVaults: [
|
||||
'0x5e14aa6dd1606e789be9de8ded0b78b36d1fa4a3',
|
||||
'0x3b443e9b9b7f340c7b1417abfdc64132341873d4',
|
||||
]
|
||||
},
|
||||
bsc: {
|
||||
tvl: fetchNetworkTVL('binance')
|
||||
},
|
||||
avax: {
|
||||
tvl: fetchNetworkTVL('avalanche')
|
||||
bsc: { key: 'binance' },
|
||||
avax: { key: 'avalanche',
|
||||
blacklistedVaults: ['0xe5b584f5f8b2872202433d56299e3867ba246c6e', '0xe98786b94520772dd9efcc670d72939e184a6198'],
|
||||
},
|
||||
kava: {
|
||||
tvl: fetchNetworkTVL('kava'),
|
||||
blacklistedVaults: ['0x489e54eec6c228a1457975eb150a7efb8350b5be'],
|
||||
},
|
||||
base: {
|
||||
tvl: fetchNetworkTVL('base'),
|
||||
},
|
||||
};
|
||||
base: {},
|
||||
}
|
||||
|
||||
Object.keys(config).forEach(chain => {
|
||||
let { key, owners, tokens, staking, blacklistedVaults = []} = config[chain]
|
||||
blacklistedVaults = new Set(blacklistedVaults.map(i => i.toLowerCase()))
|
||||
|
||||
|
||||
module.exports[chain] = {
|
||||
tvl: async (api) => {
|
||||
if (owners && tokens) await api.sumTokens({ owners, tokens, })
|
||||
const config = await getConfig('dyson-money/api2', 'https://api2.dyson.money/vaults')
|
||||
const chainConfig = key ? config[key] : config[chain]
|
||||
let vaultsAll = Object.values(chainConfig ?? {}).map(i => i.address).filter(i => !blacklistedVaults.has(i.toLowerCase()))
|
||||
let vaults1 = []
|
||||
let vaults2 = []
|
||||
|
||||
const isVault1 = await api.multiCall({ abi: 'address:want', calls: vaultsAll, permitFailure: true })
|
||||
isVault1.forEach((v, i) => {
|
||||
if (v) vaults1.push(vaultsAll[i])
|
||||
else vaults2.push(vaultsAll[i])
|
||||
});
|
||||
|
||||
const token = await api.multiCall({ abi: 'address:want', calls: vaults1 })
|
||||
const balance = await api.multiCall({ abi: 'uint256:balance', calls: vaults1 })
|
||||
const token2 = await api.multiCall({ abi: 'address:underlying', calls: vaults2 })
|
||||
const balance2 = await api.multiCall({ abi: 'uint256:underlyingBalanceWithInvestment', calls: vaults2 })
|
||||
api.add(token, balance)
|
||||
api.add(token2, balance2)
|
||||
return sumTokens2({ api, resolveLP: true, })
|
||||
}
|
||||
}
|
||||
if (staking) module.exports[chain].staking = staking
|
||||
})
|
||||
Reference in New Issue
Block a user