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 { 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
})