|
1 | 1 | const { sumERC4626VaultsExport } = require('../helper/erc4626');
|
2 | 2 | const { sumTokens2 } = require('../helper/unwrapLPs');
|
| 3 | +const sdk = require('@defillama/sdk'); |
| 4 | +const BigNumber = require('bignumber.js'); |
3 | 5 |
|
4 |
| -const hyperliquidVaults = ['0x96C6cBB6251Ee1c257b2162ca0f39AA5Fa44B1FB', '0xc061d38903b99aC12713B550C2CB44B221674F94']; |
| 6 | +const USDT0 = '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb'; |
| 7 | +const USDT0_VAULT = '0x5e105266db42f78fa814322bce7f388b4c2e61eb'; |
5 | 8 |
|
6 |
| -const ethereumVaults = [ |
7 |
| - '0x9E3C0D2D70e9A4BF4f9d5F0A6E4930ce76Fed09e', |
8 |
| - '0x9920d2075A350ACAaa4c6D00A56ebBEeD021cD7f', |
9 |
| - '0x340116F605Ca4264B8bC75aAE1b3C8E42AE3a3AB', |
10 |
| -]; |
| 9 | +const morphoVaults = { |
| 10 | + '0x5eEC795d919FA97688Fb9844eeB0072E6B846F9d': '0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34', |
| 11 | + '0x53A333e51E96FE288bC9aDd7cdC4B1EAD2CD2FfA': '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', |
| 12 | + '0x0571362ba5EA9784a97605f57483f865A37dBEAA': '0xBe6727B535545C67d5cAa73dEa54865B92CF7907', |
| 13 | + '0xd19e3d00f8547f7d108abfd4bbb015486437b487': '0x5555555555555555555555555555555555555555' |
| 14 | +}; |
11 | 15 |
|
12 |
| -const tokensToCheck = [ |
13 |
| - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', |
14 |
| - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '0xdAC17F958D2ee523a2206206994597C13D831ec7', |
15 |
| - '0x66a1E37c9b0eAddca17d3662D6c05F4DECf3e110', '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', |
16 |
| - '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', '0x8DB2350D78aBc13f5673A411D4700BCF87864dDE', |
17 |
| - '0x657e8C867D8B37dCC18fA4Caead9C45EB088C642', '0x094c0e36210634c3CfA25DC11B96b562E0b07624', |
18 |
| - '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', '0x8236a87084f8B84306f72007F36F2618A5634494', |
19 |
| - '0x7A56E1C57C7475CCf742a1832B028F0456652F97', '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', |
20 |
| - '0xE6829d9a7eE3040e1276Fa75293Bde931859e8fA', '0x7122985656e38BDC0302Db86685bb972b145bD3C', |
21 |
| - '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee', '0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7', |
22 |
| - '0xf951E335afb289353dc249e82926178EaC7DEd78', '0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0' |
23 |
| -]; |
| 16 | +const adjustDecimals = (amount, from, to = 6) => { |
| 17 | + return new BigNumber(amount) |
| 18 | + .times(new BigNumber(10).pow(to)) |
| 19 | + .div(new BigNumber(10).pow(from)) |
| 20 | + .toFixed(0); |
| 21 | +}; |
24 | 22 |
|
25 | 23 | module.exports = {
|
26 | 24 | doublecounted: true,
|
27 |
| - methodology: 'Measures TVL by calculating all tokens held by each vault. For Ethereum vaults we check balances of major tokens, for Hyperliquid vault we use the ERC4626 standard.', |
| 25 | + methodology: 'Measures TVL by calculating all tokens held by each vault.', |
28 | 26 | start: 1738368000,
|
29 | 27 | ethereum: {
|
30 |
| - tvl: async (api) => { |
31 |
| - return sumTokens2({ api, owners: ethereumVaults, tokens: tokensToCheck }); |
32 |
| - } |
| 28 | + tvl: async (api) => sumTokens2({ |
| 29 | + api, |
| 30 | + owners: [ |
| 31 | + '0x9E3C0D2D70e9A4BF4f9d5F0A6E4930ce76Fed09e', |
| 32 | + '0x9920d2075A350ACAaa4c6D00A56ebBEeD021cD7f', |
| 33 | + '0x340116F605Ca4264B8bC75aAE1b3C8E42AE3a3AB' |
| 34 | + ], |
| 35 | + tokens: [ |
| 36 | + '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', |
| 37 | + '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '0xdAC17F958D2ee523a2206206994597C13D831ec7', |
| 38 | + '0x66a1E37c9b0eAddca17d3662D6c05F4DECf3e110', '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', |
| 39 | + '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', '0x8DB2350D78aBc13f5673A411D4700BCF87864dDE', |
| 40 | + '0x657e8C867D8B37dCC18fA4Caead9C45EB088C642', '0x094c0e36210634c3CfA25DC11B96b562E0b07624', |
| 41 | + '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', '0x8236a87084f8B84306f72007F36F2618A5634494', |
| 42 | + '0x7A56E1C57C7475CCf742a1832B028F0456652F97', '0xF469fBD2abcd6B9de8E169d128226C0Fc90a012e', |
| 43 | + '0xE6829d9a7eE3040e1276Fa75293Bde931859e8fA', '0x7122985656e38BDC0302Db86685bb972b145bD3C', |
| 44 | + '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee', '0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7', |
| 45 | + '0xf951E335afb289353dc249e82926178EaC7DEd78', '0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0' |
| 46 | + ] |
| 47 | + }) |
33 | 48 | },
|
34 | 49 | hyperliquid: {
|
35 |
| - tvl: sumERC4626VaultsExport({ vaults: hyperliquidVaults, isOG4626: true }) |
| 50 | + tvl: async (api) => { |
| 51 | + await sumERC4626VaultsExport({ |
| 52 | + vaults: ['0x96C6cBB6251Ee1c257b2162ca0f39AA5Fa44B1FB', '0xc061d38903b99aC12713B550C2CB44B221674F94'], |
| 53 | + isOG4626: true |
| 54 | + })(api); |
| 55 | + |
| 56 | + const [supply, decimals] = await Promise.all([ |
| 57 | + sdk.api.erc20.totalSupply({ target: USDT0_VAULT, chain: 'hyperliquid' }), |
| 58 | + sdk.api.erc20.decimals(USDT0_VAULT, 'hyperliquid') |
| 59 | + ]); |
| 60 | + |
| 61 | + api.add(USDT0, adjustDecimals(supply.output, decimals.output)); |
| 62 | + |
| 63 | + const [supplies, vaultDecimals] = await Promise.all([ |
| 64 | + sdk.api.abi.multiCall({ |
| 65 | + calls: Object.keys(morphoVaults).map(v => ({ target: v })), |
| 66 | + abi: 'erc20:totalSupply', |
| 67 | + chain: 'hyperliquid' |
| 68 | + }), |
| 69 | + sdk.api.abi.multiCall({ |
| 70 | + calls: Object.keys(morphoVaults).map(v => ({ target: v })), |
| 71 | + abi: 'erc20:decimals', |
| 72 | + chain: 'hyperliquid' |
| 73 | + }) |
| 74 | + ]); |
| 75 | + |
| 76 | + supplies.output.forEach((data, i) => { |
| 77 | + const vault = data.input.target; |
| 78 | + const underlying = morphoVaults[vault]; |
| 79 | + const decimals = vaultDecimals.output[i].output; |
| 80 | + const amount = underlying === USDT0 |
| 81 | + ? adjustDecimals(data.output, decimals) |
| 82 | + : data.output; |
| 83 | + api.add(underlying, amount); |
| 84 | + }); |
| 85 | + |
| 86 | + return api.getBalances(); |
| 87 | + } |
36 | 88 | }
|
37 | 89 | };
|
0 commit comments