diff --git a/projects/double2win/config.js b/projects/double2win/config.js new file mode 100644 index 000000000000..262c97895652 --- /dev/null +++ b/projects/double2win/config.js @@ -0,0 +1,24 @@ +module.exports = { + arbitrum: { + uniswapV2Vault: { + doubleContract: '0xBf212dEE0aea6531dEb0B02be6E70b527dDF8246', + type: 'v2-vault' + }, + uniswapV2Migration: { + doubleContract: '0x1c6E7CE03ae7a9A252BcE0C9F871654dBB0C7ca5', + type: 'v2-vault' + }, + uniswapV3Vault: { + doubleContract: '0x07116C5ED5cBb49464f64926Ba152B8985fe3AFf', + type: 'v3-vault' + }, + uniswapV3Migration: { + doubleContract: '0x99F980fa0b1939A0A1033092EF2a668df8D8b70D', + type: 'v3-vault' + }, + assetVault: { + doubleContract: '0x7C09A9c30736F17043Fe6D0C0A3D03a7Cf6e78FD', + type: 'asset-vault' + }, + } +}; diff --git a/projects/double2win/index.js b/projects/double2win/index.js new file mode 100644 index 000000000000..ebb95389caa0 --- /dev/null +++ b/projects/double2win/index.js @@ -0,0 +1,63 @@ +const config = require("./config") +const { sumTokens2 } = require('../helper/unwrapLPs') +const { cachedGraphQuery } = require('../helper/cache') + +const subgraphs = { + "arbitrum": "https://api.studio.thegraph.com/query/16975/double-arbitrum/version/latest", +} + +async function getTokens(chain) { + const graphQuery = ` + { + assetTokens(where: {amount_gt: "0"}) { + tokenAddress + } + migrations(where: {pair_starts_with: "0x", lpAmount_gt: "0"}) { + pair + ammType + } + liquidities(where: {pair_starts_with: "0x", lpAmount_gt: "0"}) { + pair + ammType + } + } + ` + + const { assetTokens, migrations, liquidities } = await cachedGraphQuery(`double2win/${chain}`, subgraphs[chain], graphQuery) + + return { assets: assetTokens.map(i => i.tokenAddress), v2Tokens: migrations.concat(liquidities).filter(i => i.ammType === 'UniswapV2').map(i => i.pair) } +} + +module.exports = { + doublecounted: true, +} + +Object.keys(config).forEach((chain) => { + const configs = Object.values(config[chain]) + + module.exports[chain] = { + tvl: async (api) => { + 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 { 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 }) + } + } + +})