diff --git a/projects/double2win/config.js b/projects/double2win/config.js index b4acfe13e1ea..262c97895652 100644 --- a/projects/double2win/config.js +++ b/projects/double2win/config.js @@ -2,27 +2,22 @@ module.exports = { arbitrum: { uniswapV2Vault: { doubleContract: '0xBf212dEE0aea6531dEb0B02be6E70b527dDF8246', - fromBlock: 217487403, type: 'v2-vault' }, uniswapV2Migration: { doubleContract: '0x1c6E7CE03ae7a9A252BcE0C9F871654dBB0C7ca5', - fromBlock: 217487754, - type: 'v2-lp' + type: 'v2-vault' }, uniswapV3Vault: { doubleContract: '0x07116C5ED5cBb49464f64926Ba152B8985fe3AFf', - fromBlock: 217488144, type: 'v3-vault' }, uniswapV3Migration: { doubleContract: '0x99F980fa0b1939A0A1033092EF2a668df8D8b70D', - fromBlock: 217488619, - type: 'v3-lp' + type: 'v3-vault' }, assetVault: { doubleContract: '0x7C09A9c30736F17043Fe6D0C0A3D03a7Cf6e78FD', - fromBlock: 217484114, type: 'asset-vault' }, } diff --git a/projects/double2win/index.js b/projects/double2win/index.js index 52f932ed4b91..ebb95389caa0 100644 --- a/projects/double2win/index.js +++ b/projects/double2win/index.js @@ -1,11 +1,6 @@ -const config = require("./config"); +const config = require("./config") const { sumTokens2 } = require('../helper/unwrapLPs') -const { cachedGraphQuery } = require('../helper/cache'); -const { getTokenPrices } = require('../helper/unknownTokens'); -const { stripTokenHeader } = require('../helper/utils'); -const sdk = require('@defillama/sdk'); -const { getChainTransform, getFixBalances } = require("../helper/portedTokens"); -const { default: BigNumber } = require("bignumber.js"); +const { cachedGraphQuery } = require('../helper/cache') const subgraphs = { "arbitrum": "https://api.studio.thegraph.com/query/16975/double-arbitrum/version/latest", @@ -26,75 +21,43 @@ async function getTokens(chain) { ammType } } - `; + ` - const { assetTokens, migrations, liquidities } = await cachedGraphQuery(`double2win/${chain}`, subgraphs[chain], graphQuery); + const { assetTokens, migrations, liquidities } = await cachedGraphQuery(`double2win/${chain}`, subgraphs[chain], graphQuery) - return { assetTokens, migrations, liquidities }; + return { assets: assetTokens.map(i => i.tokenAddress), v2Tokens: migrations.concat(liquidities).filter(i => i.ammType === 'UniswapV2').map(i => i.pair) } } -module.exports = {} +module.exports = { + doublecounted: true, +} -Object.keys(config).forEach((network) => { - const networkConfig = config[network]; +Object.keys(config).forEach((chain) => { + const configs = Object.values(config[chain]) - module.exports[network] = { + module.exports[chain] = { tvl: async (api) => { - // Initialize an empty map to store TVL per token - const block = api.block; - const tokenBalances = {}; - const tokenData = await getTokens(network); - const pairAddresses = []; - tokenData.migrations.forEach(migration => { - pairAddresses.push(migration.pair.toLowerCase()); - }); - tokenData.liquidities.forEach(liquidity => { - pairAddresses.push(liquidity.pair.toLowerCase()); - }); - const assetAddresses = []; - tokenData.assetTokens.forEach(assetToken => { - assetAddresses.push(assetToken.tokenAddress.toLowerCase()); - }); - // Iterate over each contract type within the network - await Promise.all( - Object.keys(networkConfig).map(async (contractType) => { - const tokensAndOwners = []; - const { doubleContract, fromBlock, type } = networkConfig[contractType]; - if (type.startsWith("v3")) { - await sumTokens2({ api, balances: tokenBalances, owner: doubleContract, resolveUniV3: true, chain: network, sumChunkSize: 50 }) - } else { - if (type.startsWith("v2")) { - pairAddresses.forEach(pairAddress => { - tokensAndOwners.push([pairAddress, doubleContract]); - }); - await sumTokens2({ api, balances: tokenBalances, tokensAndOwners: tokensAndOwners, chain: network, resolveLP: true, sumChunkSize: 50}) - } else { - assetAddresses.forEach(asset => { - tokensAndOwners.push([asset, doubleContract]); - }); - await sumTokens2({ api, balances: tokenBalances, tokensAndOwners: tokensAndOwners, chain: network, sumChunkSize: 50}) - } - } - }) - ); - const balances = Object.fromEntries( - Object.entries(tokenBalances).filter(([_, value]) => !Number.isNaN(value)) - ); - const finalBalances = balances; - const transformAddress = await getChainTransform(network); - const { prices} = await getTokenPrices({ chain: network, block, lps: ["0x27D336a834775988b1305df42569E27128932bDD"], useDefaultCoreAssets: true}) - Object.entries(balances).forEach(([address, amount = 0]) => { - const token = stripTokenHeader(address) - const price = prices[token]; - if (!price) return; - let tokenAmount = price[1] * +amount - const coreAsset = price[2] - sdk.util.sumSingleBalance(balances, transformAddress(coreAsset), BigNumber(tokenAmount).toFixed(0)) - delete balances[address] + const v2Vaults = [] + const v3Vaults = [] + const assetVaults = [] + configs.forEach((config) => { + switch (config.type) { + case 'v2-vault': + v2Vaults.push(config.doubleContract) + break + case 'v3-vault': + v3Vaults.push(config.doubleContract) + break + case 'asset-vault': + assetVaults.push(config.doubleContract) + break + } }) - const fixBalances = await getFixBalances(network) - fixBalances(finalBalances) - return finalBalances - }, - }; -}); + const { assets, v2Tokens } = await getTokens(chain) + await sumTokens2({ resolveUniV3: true, api, owners: v3Vaults }) + await sumTokens2({ owners: assetVaults, tokens: assets, api }) + return sumTokens2({ owners: v2Vaults, tokens: v2Tokens, resolveLP: true, api }) + } + } + +})