fix dyson tvl

This commit is contained in:
g1nt0ki
2025-10-21 10:28:16 +02:00
parent 63092c3723
commit be4b2d5ef7

View File

@@ -1,8 +1,7 @@
const { getConfig } = require('../helper/cache');
const ADDRESSES = require('../helper/coreAssets.json') const ADDRESSES = require('../helper/coreAssets.json')
const { staking } = require('../helper/staking') const { staking } = require('../helper/staking');
const { sumTokens2 } = require('../helper/unwrapLPs'); 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'; const TVL_URL = 'https://api2.dyson.money/vaults/metrics/tvl';
@@ -11,14 +10,13 @@ const sphere_token = "0x62F594339830b90AE4C084aE7D223fFAFd9658A7"
const ylSPHEREvault = "0x4Af613f297ab00361D516454E5E46bc895889653" const ylSPHEREvault = "0x4Af613f297ab00361D516454E5E46bc895889653"
let TVL_byNetwork; module.exports = {
doublecounted: true,
methodology: "Counts the tokens locked in the contracts.",
};
async function polygonTvl(timestamp, block, chainBlocks) { const config = {
let balances = {}; polygon: {
// add tokens in ylSPHERE vault
await sumTokens2({
balances,
owners: [ylSPHEREvault], owners: [ylSPHEREvault],
tokens: [ tokens: [
ADDRESSES.polygon.WMATIC_2, ADDRESSES.polygon.WMATIC_2,
@@ -28,61 +26,53 @@ async function polygonTvl(timestamp, block, chainBlocks) {
ADDRESSES.polygon.WBTC, ADDRESSES.polygon.WBTC,
"0x172370d5Cd63279eFa6d502DAB29171933a610AF" "0x172370d5Cd63279eFa6d502DAB29171933a610AF"
], ],
chain: 'polygon', staking: staking(ylSPHEREvault, sphere_token),
block: chainBlocks.polygon },
}) optimism: {},
arbitrum: {
// calculate TVL for polygon from API blacklistedVaults: [
const polygon_tvl = await fetchNetworkTVL('polygon')(); '0x5e14aa6dd1606e789be9de8ded0b78b36d1fa4a3',
for (const [token, balance] of Object.entries(polygon_tvl)) { '0x3b443e9b9b7f340c7b1417abfdc64132341873d4',
balances[token] = (balances[token] || 0) + balance ]
} },
return balances; bsc: { key: 'binance' },
} avax: { key: 'avalanche',
blacklistedVaults: ['0xe5b584f5f8b2872202433d56299e3867ba246c6e', '0xe98786b94520772dd9efcc670d72939e184a6198'],
function fetchNetworkTVL(network) { },
return async () => { kava: {
try { blacklistedVaults: ['0x489e54eec6c228a1457975eb150a7efb8350b5be'],
if(!TVL_byNetwork) TVL_byNetwork = utils.fetchURL(`${TVL_URL}`).then(response => response.data); },
base: {},
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 {};
}
}
} }
Object.keys(config).forEach(chain => {
let { key, owners, tokens, staking, blacklistedVaults = []} = config[chain]
blacklistedVaults = new Set(blacklistedVaults.map(i => i.toLowerCase()))
module.exports = { module.exports[chain] = {
doublecounted: true, tvl: async (api) => {
methodology: "Counts the tokens locked in the contracts.", if (owners && tokens) await api.sumTokens({ owners, tokens, })
polygon: { const config = await getConfig('dyson-money/api2', 'https://api2.dyson.money/vaults')
tvl: polygonTvl, const chainConfig = key ? config[key] : config[chain]
staking: staking(ylSPHEREvault, sphere_token) let vaultsAll = Object.values(chainConfig ?? {}).map(i => i.address).filter(i => !blacklistedVaults.has(i.toLowerCase()))
}, let vaults1 = []
optimism: { let vaults2 = []
tvl: fetchNetworkTVL('optimism'),
}, const isVault1 = await api.multiCall({ abi: 'address:want', calls: vaultsAll, permitFailure: true })
arbitrum: { isVault1.forEach((v, i) => {
tvl: fetchNetworkTVL('arbitrum'), if (v) vaults1.push(vaultsAll[i])
}, else vaults2.push(vaultsAll[i])
bsc: { });
tvl: fetchNetworkTVL('binance')
}, const token = await api.multiCall({ abi: 'address:want', calls: vaults1 })
avax: { const balance = await api.multiCall({ abi: 'uint256:balance', calls: vaults1 })
tvl: fetchNetworkTVL('avalanche') const token2 = await api.multiCall({ abi: 'address:underlying', calls: vaults2 })
}, const balance2 = await api.multiCall({ abi: 'uint256:underlyingBalanceWithInvestment', calls: vaults2 })
kava: { api.add(token, balance)
tvl: fetchNetworkTVL('kava'), api.add(token2, balance2)
}, return sumTokens2({ api, resolveLP: true, })
base: { }
tvl: fetchNetworkTVL('base'), }
}, if (staking) module.exports[chain].staking = staking
}; })