|
1 | 1 | const { sumTokens2 } = require('../helper/unwrapLPs'); |
2 | 2 |
|
3 | | -const VAQUITA_CONTRACT = '0xfA95214EA8195e9D256Bb18adF0F56b3dEc66FaE'; |
4 | | -const A_TOKEN_ADDRESS = '0x4e65fE4DbA92790696d040ac24Aa414708F5c0AB'; |
| 3 | +const abi = { |
| 4 | + assets: 'function assets(address) view returns (address assetAddress, address msvAddress, uint8 status, uint256 protocolFees)', |
| 5 | +} |
| 6 | + |
| 7 | +const VAQUITA_CONTRACT = '0x2400B4E44878d25597da16659705F48927cadef1'; |
| 8 | + |
| 9 | +const assets = { |
| 10 | + USDC: { |
| 11 | + address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', |
| 12 | + aToken: '0x4e65fE4DbA92790696d040ac24Aa414708F5c0AB', |
| 13 | + }, |
| 14 | + WETH: { |
| 15 | + address: '0x0000000000000000000000000000000000000000', |
| 16 | + aToken: '0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7', |
| 17 | + }, |
| 18 | + cbBTC: { |
| 19 | + address: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', |
| 20 | + aToken: '0xBdb9300b7CDE636d9cD4AFF00f6F009fFBBc8EE6', |
| 21 | + }, |
| 22 | +}; |
5 | 23 |
|
6 | 24 | async function tvl(api) { |
7 | | - return sumTokens2({ |
8 | | - api, |
9 | | - owners: [VAQUITA_CONTRACT], |
10 | | - tokens: [A_TOKEN_ADDRESS], |
| 25 | + const assetEntries = Object.entries(assets); |
| 26 | + |
| 27 | + const assetData = await api.multiCall({ |
| 28 | + abi: abi.assets, |
| 29 | + calls: assetEntries.map(([_, asset]) => ({ |
| 30 | + target: VAQUITA_CONTRACT, |
| 31 | + params: [asset.address] |
| 32 | + })), |
| 33 | + permitFailure: true |
| 34 | + }); |
| 35 | + |
| 36 | + const owners = []; |
| 37 | + const tokens = []; |
| 38 | + |
| 39 | + assetData.forEach((data, index) => { |
| 40 | + if (data && data.msvAddress) { |
| 41 | + const [_, asset] = assetEntries[index]; |
| 42 | + owners.push(data.msvAddress); |
| 43 | + tokens.push(asset.aToken); |
| 44 | + } |
11 | 45 | }); |
| 46 | + |
| 47 | + return sumTokens2({ api, owners, tokens }); |
12 | 48 | } |
13 | 49 |
|
14 | 50 | module.exports = { |
15 | 51 | base: { tvl }, |
16 | | - methodology: 'TVL is calculated by checking the aBasUSDC balance (Aave USDC on Base) held by VaquitaPool contract', |
| 52 | + methodology: 'TVL is calculated by checking the aToken balance held by each MSV (MultiStrategyVault) contract for each supported asset in Vaquita Protocol', |
17 | 53 | }; |
0 commit comments