From 4b22158b8594d345464b341ecd67a51f751ddb78 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 19 Jun 2023 13:19:54 +0200 Subject: [PATCH 01/83] Use llamarpc --- constants/Web3.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/constants/Web3.js b/constants/Web3.js index d3550685..4d9a35df 100644 --- a/constants/Web3.js +++ b/constants/Web3.js @@ -5,8 +5,7 @@ const DECIMALS_WEI = 1e18; const DECIMALS_GWEI = 1e9; const MAX_UINT256 = BN(2).pow(256).minus(1); -// const RPC_URL = `https://eth.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`; -const RPC_URL = `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY_ETHEREUM}`; +const RPC_URL = `https://eth.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`; const RPC_BACKUP_URL = `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY_ETHEREUM}`; const RPC_URL_BSC = 'https://bsc-dataseed.binance.org/'; From b580dc1a4c0b5385ef997fa64bb7ff15c645aac9 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 19 Jun 2023 13:20:26 +0200 Subject: [PATCH 02/83] Make factory-tricrypto pools use prices from more registries --- pages/api/getPools/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index ae6f620d..b2a9fb43 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -334,11 +334,11 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) const REGISTRIES_DEPENDENCIES = { main: [], crypto: ['main'], - 'factory-tricrypto': ['main'], // This factory will have limited pools, for which main registry holds enough coin pricings 'factory-crvusd': ['main'], // This factory will have limited pools, for which main registry holds enough coin pricings 'factory-eywa': ['main'], // This factory will have limited pools, for which main registry holds enough coin pricings - 'factory-crypto': ['main', 'crypto', 'factory-crvusd', 'factory-tricrypto'], - factory: ['main', 'crypto', 'factory-crypto', 'factory-crvusd', 'factory-tricrypto'], + 'factory-crypto': ['main', 'crypto', 'factory-crvusd'], + factory: ['main', 'crypto', 'factory-crypto', 'factory-crvusd'], + 'factory-tricrypto': ['main', 'factory-crvusd', 'factory'], }; const { poolsAndLpTokens: mainRegistryPoolsAndLpTokens } = await getMainRegistryPoolsAndLpTokensFn.straightCall({ blockchainId }); const otherRegistryPoolsData = await sequentialPromiseFlatMap(REGISTRIES_DEPENDENCIES[registryId], async (id) => ( From 3f0dffe7d7f38918b62ded602f874428546a0d2a Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 19 Jun 2023 17:03:42 +0200 Subject: [PATCH 03/83] Revert "Remove temporary separate crvusd pools vol subgraph" This reverts commit c56105ff42efb5b14f1dcb8a8c708dd8363573ae. --- .../getSubgraphData/crvusd-mainnet-temp.js | 234 ++++++++++++++++++ pages/api/getSubgraphData/index.js | 25 ++ 2 files changed, 259 insertions(+) create mode 100644 pages/api/getSubgraphData/crvusd-mainnet-temp.js diff --git a/pages/api/getSubgraphData/crvusd-mainnet-temp.js b/pages/api/getSubgraphData/crvusd-mainnet-temp.js new file mode 100644 index 00000000..0938b788 --- /dev/null +++ b/pages/api/getSubgraphData/crvusd-mainnet-temp.js @@ -0,0 +1,234 @@ +import Web3 from 'web3'; +import BN from 'bignumber.js'; +import configs from 'constants/configs'; +import { BASE_API_DOMAIN } from 'constants/AppConstants'; +import { runConcurrentlyAtMost } from 'utils/Async'; +import getAllCurvePoolsData from 'utils/data/curve-pools-data'; + +const lc = (str) => str.toLowerCase(); + +// Pools for which volume data on the subgraph is incorrect, and needs +// to be overriden with a manual calculation. +const POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME = { + ethereum: [ + '0x84997FAFC913f1613F51Bb0E2b5854222900514B', + '0x2863a328a0b7fc6040f11614fa0728587db8e353', + ].map(lc), + polygon: [ + '0x7c1aa4989df27970381196d3ef32a7410e3f2748', + '0xB05475d2A99ec4f7fa9ff1Ffb0e65894d2A639f3', + '0x8914B29F7Bea602A183E89D6843EcB251D56D07e', + '0xa7C475FC82422F2E9cEfd6E6C9Ab4Ee9660cB421', + '0x9b3d675FDbe6a0935E8B7d1941bc6f78253549B7', + ].map(lc), +}; + +const crvusdPoolsAddresses = [ + '0x4dece678ceceb27446b35c672dc7d61f30bad69e', + '0x390f3595bca2df7d23783dfd126427cceb997bf4', + '0xca978a0528116dda3cba9acd3e68bc6191ca53d0', + '0x34d655069f4cac1547e4c8ca284ffff5ad4a8db0', +].map(lc); + +export default async ({ blockchainId } = {}) => { + if (typeof blockchainId === 'undefined') blockchainId = 'ethereum'; // Default value + + const config = configs[blockchainId]; + const web3 = new Web3(config.rpcUrl); + + if (typeof config === 'undefined') { + throw new Error(`No factory data for blockchainId "${blockchainId}"`); + } + + const GRAPH_ENDPOINT = 'https://api.thegraph.com/subgraphs/name/convex-community/volume-mainnet-staging'; + const CURRENT_TIMESTAMP = Math.round(new Date().getTime() / 1000); + const TIMESTAMP_24H_AGO = CURRENT_TIMESTAMP - (25 * 3600); + + let subgraphHasErrors = false; + + const allPools = await getAllCurvePoolsData([blockchainId]); + const getPoolByAddress = (address) => ( + allPools.find((pool) => (lc(pool.address) === lc(address))) + ); + + const poolListData = await (await fetch(`${BASE_API_DOMAIN}/api/getPoolList/${blockchainId}`)).json() + let poolList = poolListData.data.poolList.filter(({ address }) => crvusdPoolsAddresses.includes(lc(address))) + let totalVolume = 0 + let cryptoVolume = 0 + + await runConcurrentlyAtMost(poolList.map((_, i) => async () => { + const poolAddress = lc(poolList[i].address); + + let POOL_QUERY = ` + { + swapVolumeSnapshots( + first: 1000, + orderBy: timestamp, + orderDirection: desc, + where: { + pool: "${poolAddress}" + timestamp_gt: ${TIMESTAMP_24H_AGO} + period: 3600 + } + ) + { + volume + volumeUSD + timestamp + count + } + } + ` + const res = await fetch(GRAPH_ENDPOINT, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ query: POOL_QUERY }) + }) + + let data = await res.json() + let rollingDaySummedVolume = 0 + let rollingRawVolume = 0 + + subgraphHasErrors = data.errors?.length > 0; + if (!subgraphHasErrors) { + for (let i = 0; i < data.data.swapVolumeSnapshots.length; i++) { + const hourlyVolUSD = parseFloat(data.data.swapVolumeSnapshots[i].volumeUSD) + rollingDaySummedVolume = rollingDaySummedVolume + hourlyVolUSD + + const hourlyVol = parseFloat(data.data.swapVolumeSnapshots[i].volume) + rollingRawVolume = rollingRawVolume + hourlyVol + } + } + + const hasRawVolumeButNoUsdVolume = (rollingDaySummedVolume === 0 && rollingRawVolume > 0); + const needsFallbackUsdVolume = ( + hasRawVolumeButNoUsdVolume || + (POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME[blockchainId] || []).includes(poolAddress) + ); + + if (needsFallbackUsdVolume) { + const ILLIQUID_THRESHOLD = 100; + const poolData = getPoolByAddress(poolAddress); + const poolLpTokenPrice = ( + poolData.usdTotal > ILLIQUID_THRESHOLD ? + (poolData.usdTotal / (poolData.totalSupply / 1e18)) : + 0 + ); + const usdVolumeRectified = poolLpTokenPrice * rollingRawVolume; + + if (usdVolumeRectified > 0 || poolData.usdTotal <= ILLIQUID_THRESHOLD) { + rollingDaySummedVolume = usdVolumeRectified; + + console.log(`Missing usd volume from subgraph: derived using lp token price from getPools endpoint for pool ${poolAddress} (derived rolling day usd volume: ${usdVolumeRectified})`); + } + } + + if (blockchainId === 'ethereum' && (poolAddress === '0x141ace5fd4435fd341e396d579c91df99fed10d4' || poolAddress === '0x2863a328a0b7fc6040f11614fa0728587db8e353')) { + poolList[i].rawVolume = 0 + poolList[i].volumeUSD = 0 + } else { + poolList[i].rawVolume = rollingRawVolume + poolList[i].volumeUSD = rollingDaySummedVolume + } + + totalVolume += parseFloat(rollingDaySummedVolume) + cryptoVolume += (poolList[i].type.includes('crypto')) ? parseFloat(rollingDaySummedVolume) : 0 + + + const APY_QUERY = ` + { + dailyPoolSnapshots(first: 7, + orderBy: timestamp, + orderDirection: desc, + where: + {pool: "${poolList[i].address.toLowerCase()}"}) + { + baseApr + xcpProfit + xcpProfitA + virtualPrice + timestamp + } + } + `; + + const resAPY = await fetch(GRAPH_ENDPOINT, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query: APY_QUERY }), + }); + + let dataAPY = await resAPY.json(); + + const snapshots = dataAPY?.data?.dailyPoolSnapshots?.map((a) => ({ + baseApr: +a.baseApr, + virtualPrice: +a.virtualPrice, + xcpProfit: a.xcpProfit ? +a.xcpProfit : undefined, + xcpProfitA: a.xcpProfitA ? +a.xcpProfitA : undefined, + timestamp: a.timestamp, + })) || []; + + let latestDailyApy = 0 + let latestWeeklyApy = 0 + if (snapshots.length >= 2) { + const isCryptoPool = snapshots[0].xcpProfit > 0; + + if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[1].xcpProfit !== 0) { + const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; + const dayOldProfit = ((snapshots[1].xcpProfit / 2) + (snapshots[1].xcpProfitA / 2) + 1e18) / 2; + const rateDaily = (currentProfit - dayOldProfit) / dayOldProfit; + latestDailyApy = ((rateDaily + 1) ** 365 - 1) * 100; + } else if (snapshots[1].virtualPrice !== 0) { + latestDailyApy = ((snapshots[0].baseApr + 1) ** 365 - 1) * 100; + } + } + if (snapshots.length > 6) { + const isCryptoPool = snapshots[0].xcpProfit > 0; + + if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[6].xcpProfit !== 0) { + const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; + const weekOldProfit = ((snapshots[6].xcpProfit / 2) + (snapshots[6].xcpProfitA / 2) + 1e18) / 2; + const rateWeekly = (currentProfit - weekOldProfit) / weekOldProfit; + latestWeeklyApy = ((rateWeekly + 1) ** 52 - 1) * 100; + } else if (snapshots[6].virtualPrice !== 0) { + const latestWeeklyRate = + (snapshots[0].virtualPrice - snapshots[6].virtualPrice) / + snapshots[0].virtualPrice; + latestWeeklyApy = ((latestWeeklyRate + 1) ** 52 - 1) * 100; + } + } + poolList[i].latestDailyApy = Math.min(latestDailyApy, 1e6); + poolList[i].latestWeeklyApy = Math.min(latestWeeklyApy, 1e6); + poolList[i].virtualPrice = snapshots[0] ? snapshots[0].virtualPrice : undefined; + + }), 10); + + // When a crypto pool uses a base pool lp as one of its underlying assets, apy calculations + // using xcp_profit need to add up 1/3rd of the underlying pool's base volume + if (config.CRYPTO_POOLS_WITH_BASE_POOLS) { + poolList = poolList.map((pool) => { + if (config.CRYPTO_POOLS_WITH_BASE_POOLS.has(pool.address)) { + const { latestDailyApy, latestWeeklyApy } = pool; + const underlyingPoolAddress = config.CRYPTO_POOLS_WITH_BASE_POOLS.get(pool.address); + const underlyingPool = poolList.find(({ address }) => address.toLowerCase() === underlyingPoolAddress.toLowerCase()); + if (!underlyingPool) { + console.error(`Couldn't find underlying pool for crypto pool ${pool.address}, hence couldn't add up its base apy`); + return pool; + } + + return { + ...pool, + latestDailyApy: BN(latestDailyApy).plus(BN(underlyingPool.latestDailyApy).div(3)).toFixed(), + latestWeeklyApy: BN(latestWeeklyApy).plus(BN(underlyingPool.latestWeeklyApy).div(3)).toFixed(), + } + } + + return pool; + }) + } + + + const cryptoShare = (cryptoVolume / totalVolume) * 100 + + return { poolList, totalVolume, cryptoVolume, cryptoShare, subgraphHasErrors } +}; diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index f1ac1348..a817be12 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -227,6 +227,31 @@ export default fn(async ( {blockchainId} ) => { }) } + // [start] Temporary addition while main ethereum subgraph syncs new crvusd factory pools + /*if (blockchainId === 'ethereum') { + const getCrvusdData = (await import('./crvusd-mainnet-temp.js')).default; + const crvusdData = await getCrvusdData(); + + if (!crvusdData.subgraphHasErrors) { + const crvusdPoolsAddresses = [ + '0x4dece678ceceb27446b35c672dc7d61f30bad69e', + '0x390f3595bca2df7d23783dfd126427cceb997bf4', + '0xca978a0528116dda3cba9acd3e68bc6191ca53d0', + '0x34d655069f4cac1547e4c8ca284ffff5ad4a8db0', + ].map(lc); + + poolList = ( + poolList + .filter(({ address }) => !crvusdPoolsAddresses.includes(lc(address))) + .concat(crvusdData.poolList) + ); + + totalVolume += crvusdData.totalVolume; + } + }*/ + // [end] Temporary addition while main ethereum subgraph syncs new crvusd factory pools + + const cryptoShare = (cryptoVolume / totalVolume) * 100 return { poolList, totalVolume, cryptoVolume, cryptoShare, subgraphHasErrors } From c119c9c55538e5350beb975b344e9239e8584218 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 19 Jun 2023 18:00:28 +0200 Subject: [PATCH 04/83] Use temporary subgraph to fetch missing pool vol data --- pages/api/getSubgraphData/crvusd-mainnet-temp.js | 5 +++++ pages/api/getSubgraphData/index.js | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pages/api/getSubgraphData/crvusd-mainnet-temp.js b/pages/api/getSubgraphData/crvusd-mainnet-temp.js index 0938b788..4e50fbff 100644 --- a/pages/api/getSubgraphData/crvusd-mainnet-temp.js +++ b/pages/api/getSubgraphData/crvusd-mainnet-temp.js @@ -24,10 +24,15 @@ const POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME = { }; const crvusdPoolsAddresses = [ + '0x0cd6f267b2086bea681e922e19d40512511be538', + '0x2889302a794da87fbf1d6db415c1492194663d13', '0x4dece678ceceb27446b35c672dc7d61f30bad69e', '0x390f3595bca2df7d23783dfd126427cceb997bf4', '0xca978a0528116dda3cba9acd3e68bc6191ca53d0', '0x34d655069f4cac1547e4c8ca284ffff5ad4a8db0', + '0x58b94400bdad7b9ac8d5335e12ef96e8b4966b4a', + '0x7f86bf177dd4f3494b841a37e810a34dd56c829b', + '0xf5f5b97624542d72a9e06f04804bf81baa15e2b4', ].map(lc); export default async ({ blockchainId } = {}) => { diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index a817be12..e3f3790d 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -228,16 +228,21 @@ export default fn(async ( {blockchainId} ) => { } // [start] Temporary addition while main ethereum subgraph syncs new crvusd factory pools - /*if (blockchainId === 'ethereum') { + if (blockchainId === 'ethereum') { const getCrvusdData = (await import('./crvusd-mainnet-temp.js')).default; const crvusdData = await getCrvusdData(); if (!crvusdData.subgraphHasErrors) { const crvusdPoolsAddresses = [ + '0x0cd6f267b2086bea681e922e19d40512511be538', + '0x2889302a794da87fbf1d6db415c1492194663d13', '0x4dece678ceceb27446b35c672dc7d61f30bad69e', '0x390f3595bca2df7d23783dfd126427cceb997bf4', '0xca978a0528116dda3cba9acd3e68bc6191ca53d0', '0x34d655069f4cac1547e4c8ca284ffff5ad4a8db0', + '0x58b94400bdad7b9ac8d5335e12ef96e8b4966b4a', + '0x7f86bf177dd4f3494b841a37e810a34dd56c829b', + '0xf5f5b97624542d72a9e06f04804bf81baa15e2b4', ].map(lc); poolList = ( @@ -248,8 +253,8 @@ export default fn(async ( {blockchainId} ) => { totalVolume += crvusdData.totalVolume; } - }*/ - // [end] Temporary addition while main ethereum subgraph syncs new crvusd factory pools + } + // [end] Temporary addition while main ethereum subgraph syncs latest crvusd factory pools const cryptoShare = (cryptoVolume / totalVolume) * 100 From 32e3f83a46af6363e863aecfd98c0eceaeeadc05 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 20 Jun 2023 22:53:31 +0200 Subject: [PATCH 05/83] Add ref prices for eywa pools --- constants/CoinAddressCoingeckoIdMap.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/constants/CoinAddressCoingeckoIdMap.js b/constants/CoinAddressCoingeckoIdMap.js index 51474d64..0394b066 100644 --- a/constants/CoinAddressCoingeckoIdMap.js +++ b/constants/CoinAddressCoingeckoIdMap.js @@ -130,6 +130,10 @@ export default { '0x049d68029688eabf473097a2fc38ef61633a3c7a': 'tether', // fUSDT '0x1e4f97b9f9f913c46f1632781732927b9019c68b': 'curve-dao-token', // CRV '0xC931f61B1534EB21D8c11B24f3f5Ab2471d4aB50': 'binance-usd', // BUSD + '0x0ac7e2f9f78de2ccc467139d43b6f32473454dd9': 'tether', // sUSDT_BSC, base price for price inferences on eywa facto pools + '0xE35177E61d09bFDb61Ea29db92d19B5E05EdDa8f': 'usd-coin', // sUSDC_BSC, base price for price inferences on eywa facto pools + '0x88486E058865611c939D1077725F293378E7bD75': 'dai', // sDAI_BSC, base price for price inferences on eywa facto pools + '0xC4417bE9c9b3f682fd03224A4B29e01CE34602fE': 'true-usd', // sTUSD_BSC, base price for price inferences on eywa facto pools }, optimism: { '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee': 'ethereum', // Native ETH From db60af775f61f41c61f0b476c0796f191dd66601 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 28 Jun 2023 19:08:58 +0200 Subject: [PATCH 06/83] Add eywa api as price oracle for eywa fantom pools --- pages/api/getPools/index.js | 8 ++++++++ utils/data/getEywaTokenPrices.js | 35 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 utils/data/getEywaTokenPrices.js diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index b2a9fb43..73b96ee2 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -35,6 +35,7 @@ import getAssetsPrices from 'utils/data/assets-prices'; import getTokensPrices from 'utils/data/tokens-prices'; import getYcTokenPrices from 'utils/data/getYcTokenPrices'; import getTempleTokenPrices from 'utils/data/getTempleTokenPrices'; +import getEywaTokenPrices from 'utils/data/getEywaTokenPrices'; import getMainRegistryPools from 'pages/api/getMainRegistryPools'; import getMainRegistryPoolsAndLpTokensFn from 'pages/api/getMainRegistryPoolsAndLpTokens'; import getMainPoolsGaugeRewards from 'pages/api/getMainPoolsGaugeRewards'; @@ -719,6 +720,12 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) {} ); + const eywaTokensAddressesAndPricesMapFallback = ( + (blockchainId === 'fantom' && registryId === 'factory-eywa') ? + await getEywaTokenPrices(networkSettingsParam, blockchainId, coinAddressesAndPricesMapFallback, allCoinAddresses) : + {} + ); + const coinData = await multiCall(flattenArray(allCoinAddresses.map(({ poolId, address }) => { // In crypto facto pools, native eth is represented as weth const isNativeEth = ( @@ -805,6 +812,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) coinAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || ycTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || templeTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || + eywaTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || (registryId === 'factory' && ethereumOnlyData?.factoryGaugesPoolAddressesAndAssetPricesMap?.[poolAddress.toLowerCase()]) || null ) diff --git a/utils/data/getEywaTokenPrices.js b/utils/data/getEywaTokenPrices.js new file mode 100644 index 00000000..7950da32 --- /dev/null +++ b/utils/data/getEywaTokenPrices.js @@ -0,0 +1,35 @@ +import memoize from 'memoizee'; +import { arrayToHashmap, flattenArray } from 'utils/Array'; +import { multiCall } from 'utils/Calls'; +import TEMPLE_LP_TOKEN_ABI from 'constants/abis/temple-lp-token.json'; +import getTokensPrices from 'utils/data/tokens-prices'; +import groupBy from 'lodash.groupby'; +import Request from 'utils/Request'; + +const getEywaTokenPrice = (address) => ( + Request.get(`https://pusher.eywa.fi/prices/${address}`) + .then((res) => res.json()) + .catch(() => 1) // Fallback if the eywa api doesn't know about this token yet, should happen rarely if at all +); + +const getEywaTokenPrices = memoize(async ( + networkSettingsParam, + blockchainId, + coinAddressesAndPricesMapFallback, + allCoinAddresses +) => { + const firstTokenOfEachEywaPool = Array.from(Object.values(groupBy(allCoinAddresses, 'poolId'))).map(([{ address }]) => address); + console.log('firstTokenOfEachEywaPool', firstTokenOfEachEywaPool) + + const prices = await Promise.all(firstTokenOfEachEywaPool.map(getEywaTokenPrice)) + console.log('prices', prices) + + const EywaTokensPrices = arrayToHashmap(firstTokenOfEachEywaPool.map((address, i) => [address.toLowerCase(), prices[i]])); + + return EywaTokensPrices; +}, { + promise: true, + maxAge: 10 * 60 * 1000, // 10 min +}); + +export default getEywaTokenPrices; From 6358f49254d849ca322aa0bf21fa2468d8d15b37 Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 29 Jun 2023 15:56:10 +0200 Subject: [PATCH 07/83] Add coin symbol overrides for kava --- pages/api/getPools/index.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 73b96ee2..bcacf7ec 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -86,9 +86,20 @@ const CURVE_POOL_LP_SYMBOLS_OVERRIDES = new Map([ ['0x051d7e5609917bd9b73f04bac0ded8dd46a74301', 'sbtc2Crv'], ]); -const overrideSymbol = (coin) => ({ +// Lowercase token address <> symbol to use +const CURVE_POOL_SYMBOLS_OVERRIDES = new Map([ + ['kava-0xfa9343c3897324496a05fc75abed6bac29f8a40f', 'multiUSDC'], + ['kava-0x765277eebeca2e31912c9946eae1021199b39c61', 'multiDAI'], + ['kava-0xb44a9b6905af7c801311e8f4e76932ee959c663c', 'multiUSDT'], +]); + +const overrideSymbol = (coin, blockchainId) => ({ ...coin, - symbol: (CURVE_POOL_LP_SYMBOLS_OVERRIDES.get(lc(coin.address)) || coin.symbol), + symbol: ( + CURVE_POOL_LP_SYMBOLS_OVERRIDES.get(lc(coin.address)) || + CURVE_POOL_SYMBOLS_OVERRIDES.get(`${blockchainId}-${lc(coin.address)}`) || + coin.symbol + ), }); const getEthereumOnlyData = async ({ preventQueryingFactoData, blockchainId }) => { @@ -1127,7 +1138,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ), lpTokenAddress: (poolInfo.lpTokenAddress || poolInfo.address), assetTypeName, - coins: augmentedCoins.map(overrideSymbol), + coins: augmentedCoins.map((coin) => overrideSymbol(coin, blockchainId)), usdTotal, isMetaPool, underlyingDecimals: (isMetaPool ? poolInfo.underlyingDecimals : undefined), From 817f6dd51ae4b8b602fa56d8943683a6159537dd Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 2 Jul 2023 22:50:53 +0200 Subject: [PATCH 08/83] Add tricrypto factory on arbi --- constants/CoinAddressCoingeckoIdMap.js | 1 + constants/configs/configs.js | 2 ++ pages/api/getPools/index.js | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/constants/CoinAddressCoingeckoIdMap.js b/constants/CoinAddressCoingeckoIdMap.js index 0394b066..55f987cc 100644 --- a/constants/CoinAddressCoingeckoIdMap.js +++ b/constants/CoinAddressCoingeckoIdMap.js @@ -79,6 +79,7 @@ export default { '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee': 'ethereum', // Native ETH '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1': 'dai', '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8': 'usd-coin', + '0xaf88d065e77c8cC2239327C5EDb3A432268e5831': 'usd-coin', '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9': 'tether', '0x82e64f49ed5ec1bc6e43dad4fc8af9bb3a2312ee': 'dai', '0x625e7708f30ca75bfd92586e17077590c60eb4cd': 'usd-coin', diff --git a/constants/configs/configs.js b/constants/configs/configs.js index ffc0856f..6975bc11 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -171,6 +171,7 @@ const configs = { multicallAddress: '0x5b5cfe992adac0c9d48e05854b2d91c73a003858', multicall2Address: '0x5b5cfe992adac0c9d48e05854b2d91c73a003858', getFactoryRegistryAddress: async () => '0xb17b674D9c5CB2e441F8e196a2f048A81355d031', + getFactoryTricryptoRegistryAddress: async () => '0xbC0797015fcFc47d9C1856639CaE50D0e69FbEE8', getCryptoRegistryAddress: async () => '0x0E9fBb167DF83EdE3240D6a5fa5d40c6C6851e15', factoryImplementationAddressMap: new Map([ ['0x54e8A25d0Ac0E4945b697C80b8372445FEA17A62'.toLowerCase(), 'plain2basic'], @@ -191,6 +192,7 @@ const configs = { ['0x3edE9b145F82e9e46C03f8A8F67B77aEE847b632'.toLowerCase(), 'metausdbalances-factory-v2-41'], ['0x094d12e5b541784701FD8d65F11fc0598FBC6332'.toLowerCase(), 'metabtc'], ['0xF1f85a74AD6c64315F85af52d3d46bF715236ADc'.toLowerCase(), 'metabtcbalances'], + ['0xd7E72f3615aa65b92A4DBdC211E296a35512988B'.toLowerCase(), 'tricrypto-1'], ]), BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([ ['0x7f90122bf0700f9e7e1f688fe926940e8839f353', '0xbF7E49483881C76487b0989CD7d9A8239B20CA41'], // meta usd diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index bcacf7ec..02861957 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -504,7 +504,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) params: [address], metaData: { poolId, type: 'implementationAddress' }, ...networkSettingsParam, - // factory-tricrypto pools do not have any view method to read their implementation; currently + // factory-tricrypto pools on mainnet do not have any view method to read their implementation; currently // there's only one implementation available in this registry, so we hardcode it by querying // an unexisting method and falling back to the desired value, but we'll need to find // another way when another implementation is added. From 65b0bf68e19b1e86f00bd6b6d492a7c803187acb Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 4 Jul 2023 18:07:23 +0200 Subject: [PATCH 09/83] Add zkevm and zksync --- constants/configs/configs.js | 66 ++++++++++++++ pages/api/getFactoryAPYs-zkevm.js | 137 +++++++++++++++++++++++++++++ pages/api/getFactoryAPYs-zksync.js | 137 +++++++++++++++++++++++++++++ pages/api/getTVL.js | 86 +++++++++--------- pages/api/getTVLZkevm.js | 59 +++++++++++++ pages/api/getTVLZksync.js | 59 +++++++++++++ 6 files changed, 502 insertions(+), 42 deletions(-) create mode 100644 pages/api/getFactoryAPYs-zkevm.js create mode 100644 pages/api/getFactoryAPYs-zksync.js create mode 100644 pages/api/getTVLZkevm.js create mode 100644 pages/api/getTVLZksync.js diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 6975bc11..088b8f57 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -450,5 +450,71 @@ const configs = { approxBlocksPerDay: 17280, // https://celoscan.io/chart/blocks graphEndpoint: 'https://api.thegraph.com/subgraphs/name/convex-community/volume-celo', }, + zkevm: { + hasNoMainRegistry: true, // No main registry deployed nor address provider + poolsBaseUrlOld: null, + poolsBaseUrl: null, + shortId: 'zkevm', + nativeCurrencySymbol: 'ETH', + chainId: 1101, + nativeCurrencyCoingeckoId: 'ethereum', + platformCoingeckoId: 'polygon-zkevm', + nativeAssetErc20WrapperId: 'weth', // Used by crypto facto, since it handles wrapped native as native + rpcUrl: 'https://zkevm-rpc.com', + multicallAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', + multicall2Address: '0xcA11bde05977b3631167028862bE2a173976CA11', + getFactoryRegistryAddress: async () => '0xCDC481031E23AEd8CbBe6e07A638298a790D445a', + factoryImplementationAddressMap: new Map([ + ['0xDec8C0e31A66ed2eEf7ed54155647c9abcf49b9F'.toLowerCase(), 'plain2basic'], + ['0x6842E0412AC1c00464dc48961330156a07268d14'.toLowerCase(), 'plain2balances'], + ['0x9fAe78C4bBB649deB7b2295dDB8A03adA7eB660F'.toLowerCase(), 'plain2eth'], + ['0xfCE359115dFe1533a2458650123F86C454BC0213'.toLowerCase(), 'plain2optimized'], + ['0xD19Baeadc667Cf2015e395f2B08668Ef120f41F5'.toLowerCase(), 'plain3basic'], + ['0x04e39EF8332e979Cf8e4f8891E64934FF65F231b'.toLowerCase(), 'plain3balances'], + ['0xC9438d8928486bD9621D326002F4672bF684187A'.toLowerCase(), 'plain3eth'], + ['0x2b70A5B878665FfDB4A06Ba40a264d6c70f68F4B'.toLowerCase(), 'plain3optimized'], + ['0x7Bb707085905c9D80854652809A1ba8480C11789'.toLowerCase(), 'plain4basic'], + ['0xec9cEBE650E181079576C1b6d0d2e092B1EdfF13'.toLowerCase(), 'plain4balances'], + ['0xe8269B33E47761f552E1a3070119560d5fa8bBD6'.toLowerCase(), 'plain4eth'], + ['0x114C4042B11a2b16F58Fe1BFe847589a122F678a'.toLowerCase(), 'plain4optimized'], + ]), + BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), + DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + approxBlocksPerDay: 50000, // https://zkevm.polygonscan.com/chart/blocks + graphEndpoint: undefined, // Not supported by TheGraph's hosted service + }, + zksync: { + hasNoMainRegistry: true, // No main registry deployed nor address provider + poolsBaseUrlOld: null, + poolsBaseUrl: null, + shortId: 'zksync', + nativeCurrencySymbol: 'ETH', + chainId: 324, + nativeCurrencyCoingeckoId: 'ethereum', + platformCoingeckoId: 'zksync', + nativeAssetErc20WrapperId: 'weth', // Used by crypto facto, since it handles wrapped native as native + rpcUrl: 'https://mainnet.era.zksync.io', + multicallAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', // ?? + multicall2Address: '0xcA11bde05977b3631167028862bE2a173976CA11', // ?? + getFactoryRegistryAddress: async () => '0xAF5261eD780fd5b80CF6E206b6BF90CbB97F511B', + factoryImplementationAddressMap: new Map([ + ['0x7c2a205C52361410233540008f7095dEF5915843'.toLowerCase(), 'plain2basic'], + ['0xEF04fC6b95b1658AfdFd527aF9b947cd7BD46bde'.toLowerCase(), 'plain2balances'], + ['0x4887ef1a68f30364a25a8b0bAA13EeeA7eeBE574'.toLowerCase(), 'plain2eth'], + ['0x044f8F31078c0CB898f25fff3286cE905C18434e'.toLowerCase(), 'plain2optimized'], + ['0x2e6De7148Afc6e4B1ee766D070DDeff0C84831a5'.toLowerCase(), 'plain3basic'], + ['0x5D18b28C052Bb0C1573d90Ea055b13048026d83F'.toLowerCase(), 'plain3balances'], + ['0x9707Bbf96eBB136B67788aa7E46d771Ec18895f4'.toLowerCase(), 'plain3eth'], + ['0xb274f2cdCff70A0bac146e9Ca5a8a28f59a3f812'.toLowerCase(), 'plain3optimized'], + ['0x30eb3F0EF60993584e8dD231dF7539db31800555'.toLowerCase(), 'plain4basic'], + ['0x3D21E268d6A526948e978ad1595052c949927e54'.toLowerCase(), 'plain4balances'], + ['0xD46aed59fBd5eB6c134b1AFb364240bb62dA0451'.toLowerCase(), 'plain4eth'], + ['0xE80AeF1a4782eA7b7f9Ad9F0c2ed9343861934e3'.toLowerCase(), 'plain4optimized'], + ]), + BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), + DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + approxBlocksPerDay: 70000, // Very approx from list of blocks on https://explorer.zksync.io/blocks + graphEndpoint: undefined, // Not supported by TheGraph's hosted service + }, }; export default configs; diff --git a/pages/api/getFactoryAPYs-zkevm.js b/pages/api/getFactoryAPYs-zkevm.js new file mode 100644 index 00000000..6999d912 --- /dev/null +++ b/pages/api/getFactoryAPYs-zkevm.js @@ -0,0 +1,137 @@ +/** + * Custom implementation because reliance on `getFactoryAPYs/_sidechains` implies + * two requirements: (1) need for thegraph to support the chain, and (2) need for + * a uniswap fork to be running on that chain for the subgraph to use as an + * external oracle where needed. + * Moonbeam satisfies (1) but not (2), so it uses a suboptimal custom setup for now. + */ + +import Web3 from 'web3'; +import BigNumber from 'big-number'; +import { BASE_API_DOMAIN } from 'constants/AppConstants'; + +import getPoolsFn from 'pages/api/getPools'; +import configs from 'constants/configs'; +import { fn } from 'utils/api'; +import registryAbi from 'constants/abis/factory_registry.json'; +import multicallAbi from 'constants/abis/multicall.json'; +import factorypool3Abi from 'constants/abis/factory_swap.json'; + +const web3 = new Web3(configs.zkevm.rpcUrl); + +export default fn(async (query) => { + const config = configs.zkevm; + const version = 2 + + let registryAddress = await config.getFactoryRegistryAddress(); + let multicallAddress = config.multicallAddress; + let registry = new web3.eth.Contract(registryAbi, registryAddress); + let multicall = new web3.eth.Contract(multicallAbi, multicallAddress) + let res = await getPoolsFn.straightCall({ blockchainId: 'zkevm', registryId: 'factory' }) + let poolDetails = []; + let totalVolume = 0 + + const latest = await web3.eth.getBlockNumber() + const DAY_BLOCKS_24H = config.approxBlocksPerDay; + let DAY_BLOCKS = DAY_BLOCKS_24H + + await Promise.all( + res.poolData.map(async (pool, index) => { + + let poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) + + let vPriceOldFetch; + let vPriceOldFetchFailed = false; + try { + vPriceOldFetch = await poolContract.methods.get_virtual_price().call('', latest - DAY_BLOCKS) + } catch (e) { + console.error(`Couldn't fetch get_virtual_price for block ${latest - DAY_BLOCKS}: ${e.toString()}`); + vPriceOldFetchFailed = true; + vPriceOldFetch = 1 * (10 ** 18) + } + const testPool = pool.address + const eventName = 'TokenExchangeUnderlying'; + const eventName2 = 'TokenExchange'; + + + console.log(latest - DAY_BLOCKS, latest, 'blocks') + const isMetaPool = ( + pool.implementation?.startsWith('v1metausd') || + pool.implementation?.startsWith('metausd') || + pool.implementation?.startsWith('v1metabtc') || + pool.implementation?.startsWith('metabtc') + ); + + let decimals = ( + version === 1 ? [pool.token.decimals, 18, 18, 18] : + (version === 2 && isMetaPool) ? pool.underlyingDecimals : + pool.decimals + ); + let volume = 0; + + let events = await poolContract.getPastEvents(eventName, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) + + events.map((trade) => { + + let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] + volume += t + + }) + + + if (version == '2') { + let events2 = await poolContract.getPastEvents(eventName2, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) + + events2.map((trade) => { + let t = trade.returnValues[2] / 10 ** decimals[trade.returnValues[1]] + volume += t + }) + + + } + + // Since we don't fetch blocks for the entirety of the past 24 hours, + // we multiply the split volume accordingly + const correctedVolume = volume * (DAY_BLOCKS_24H / DAY_BLOCKS); + + let vPriceFetch + try { + vPriceFetch = await poolContract.methods.get_virtual_price().call() + } catch (e) { + vPriceFetch = 1 * (10 ** 18) + } + + let vPrice = vPriceOldFetchFailed ? vPriceFetch : vPriceOldFetch + let vPriceNew = vPriceFetch + let apy = (vPriceNew - vPrice) / vPrice * 100 * 365 + let apyFormatted = `${apy.toFixed(2)}%` + totalVolume += correctedVolume + + let p = { + index, + 'poolAddress': pool.address, + 'poolSymbol': version === 1 ? pool.token.symbol : pool.symbol, + apyFormatted, + apy, + 'virtualPrice': vPriceFetch, + volume: correctedVolume, + } + poolDetails.push(p) + }) + ) + + poolDetails.sort((a, b) => (a.index > b.index) ? 1 : ((b.index > a.index) ? -1 : 0)) + + return { poolDetails, totalVolume, latest }; + +}, { + maxAge: 30, // 30s +}); diff --git a/pages/api/getFactoryAPYs-zksync.js b/pages/api/getFactoryAPYs-zksync.js new file mode 100644 index 00000000..130e1fed --- /dev/null +++ b/pages/api/getFactoryAPYs-zksync.js @@ -0,0 +1,137 @@ +/** + * Custom implementation because reliance on `getFactoryAPYs/_sidechains` implies + * two requirements: (1) need for thegraph to support the chain, and (2) need for + * a uniswap fork to be running on that chain for the subgraph to use as an + * external oracle where needed. + * Moonbeam satisfies (1) but not (2), so it uses a suboptimal custom setup for now. + */ + +import Web3 from 'web3'; +import BigNumber from 'big-number'; +import { BASE_API_DOMAIN } from 'constants/AppConstants'; + +import getPoolsFn from 'pages/api/getPools'; +import configs from 'constants/configs'; +import { fn } from 'utils/api'; +import registryAbi from 'constants/abis/factory_registry.json'; +import multicallAbi from 'constants/abis/multicall.json'; +import factorypool3Abi from 'constants/abis/factory_swap.json'; + +const web3 = new Web3(configs.zksync.rpcUrl); + +export default fn(async (query) => { + const config = configs.zksync; + const version = 2 + + let registryAddress = await config.getFactoryRegistryAddress(); + let multicallAddress = config.multicallAddress; + let registry = new web3.eth.Contract(registryAbi, registryAddress); + let multicall = new web3.eth.Contract(multicallAbi, multicallAddress) + let res = await getPoolsFn.straightCall({ blockchainId: 'zksync', registryId: 'factory' }) + let poolDetails = []; + let totalVolume = 0 + + const latest = await web3.eth.getBlockNumber() + const DAY_BLOCKS_24H = config.approxBlocksPerDay; + let DAY_BLOCKS = DAY_BLOCKS_24H + + await Promise.all( + res.poolData.map(async (pool, index) => { + + let poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) + + let vPriceOldFetch; + let vPriceOldFetchFailed = false; + try { + vPriceOldFetch = await poolContract.methods.get_virtual_price().call('', latest - DAY_BLOCKS) + } catch (e) { + console.error(`Couldn't fetch get_virtual_price for block ${latest - DAY_BLOCKS}: ${e.toString()}`); + vPriceOldFetchFailed = true; + vPriceOldFetch = 1 * (10 ** 18) + } + const testPool = pool.address + const eventName = 'TokenExchangeUnderlying'; + const eventName2 = 'TokenExchange'; + + + console.log(latest - DAY_BLOCKS, latest, 'blocks') + const isMetaPool = ( + pool.implementation?.startsWith('v1metausd') || + pool.implementation?.startsWith('metausd') || + pool.implementation?.startsWith('v1metabtc') || + pool.implementation?.startsWith('metabtc') + ); + + let decimals = ( + version === 1 ? [pool.token.decimals, 18, 18, 18] : + (version === 2 && isMetaPool) ? pool.underlyingDecimals : + pool.decimals + ); + let volume = 0; + + let events = await poolContract.getPastEvents(eventName, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) + + events.map((trade) => { + + let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] + volume += t + + }) + + + if (version == '2') { + let events2 = await poolContract.getPastEvents(eventName2, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) + + events2.map((trade) => { + let t = trade.returnValues[2] / 10 ** decimals[trade.returnValues[1]] + volume += t + }) + + + } + + // Since we don't fetch blocks for the entirety of the past 24 hours, + // we multiply the split volume accordingly + const correctedVolume = volume * (DAY_BLOCKS_24H / DAY_BLOCKS); + + let vPriceFetch + try { + vPriceFetch = await poolContract.methods.get_virtual_price().call() + } catch (e) { + vPriceFetch = 1 * (10 ** 18) + } + + let vPrice = vPriceOldFetchFailed ? vPriceFetch : vPriceOldFetch + let vPriceNew = vPriceFetch + let apy = (vPriceNew - vPrice) / vPrice * 100 * 365 + let apyFormatted = `${apy.toFixed(2)}%` + totalVolume += correctedVolume + + let p = { + index, + 'poolAddress': pool.address, + 'poolSymbol': version === 1 ? pool.token.symbol : pool.symbol, + apyFormatted, + apy, + 'virtualPrice': vPriceFetch, + volume: correctedVolume, + } + poolDetails.push(p) + }) + ) + + poolDetails.sort((a, b) => (a.index > b.index) ? 1 : ((b.index > a.index) ? -1 : 0)) + + return { poolDetails, totalVolume, latest }; + +}, { + maxAge: 30, // 30s +}); diff --git a/pages/api/getTVL.js b/pages/api/getTVL.js index dff05d9f..276de92a 100644 --- a/pages/api/getTVL.js +++ b/pages/api/getTVL.js @@ -14,48 +14,50 @@ const web3 = new Web3(WEB3_CONSTANTS.RPC_URL); export default fn(async () => { - const LP_TOKEN_DECIMALS = 18; - - let tvl = 0; - - - let resCrypto = await (await fetch(`https://api.curve.fi/api/getPools/ethereum/crypto`)).json() - let resMain = await (await fetch(`https://api.curve.fi/api/getPools/ethereum/main`)).json() - let resFacto = await (await fetch(`https://api.curve.fi/api/getPools/ethereum/factory`)).json() - let resCryptoFacto = await (await fetch(`https://api.curve.fi/api/getPools/ethereum/factory-crypto`)).json() - - tvl = +resCrypto.data.tvl + +resMain.data.tvl + +resFacto.data.tvl + +resCryptoFacto.data.tvl - - let sideTVLs = [] - let endPoints = [ - 'getTVLPolygon', - 'getTVLFantom', - 'getTVLxDai', - 'getTVLAvalanche', - 'getTVLHarmony', - 'getTVLArbitrum', - 'getTVLOptimism', - 'getTVLMoonbeam', - 'getTVLKava', - 'getTVLCelo', - ] - - let sideChainTVL = 0 - await Promise.all( - endPoints.map(async (endPoint) => { - let res = await (await fetch(`https://api.curve.fi/api/${endPoint}`)).json() - let sideChain = { - 'chain': endPoint.replace('getTVL', ''), - 'tvl': parseFloat(res.data.tvl) - } - sideChainTVL += sideChain.tvl - sideTVLs.push(sideChain) - }) - ) - - - - return { tvl, sideTVLs, sideChainTVL }; + const LP_TOKEN_DECIMALS = 18; + + let tvl = 0; + + + let resCrypto = await (await fetch(`https://api.curve.fi/api/getPools/ethereum/crypto`)).json() + let resMain = await (await fetch(`https://api.curve.fi/api/getPools/ethereum/main`)).json() + let resFacto = await (await fetch(`https://api.curve.fi/api/getPools/ethereum/factory`)).json() + let resCryptoFacto = await (await fetch(`https://api.curve.fi/api/getPools/ethereum/factory-crypto`)).json() + + tvl = +resCrypto.data.tvl + +resMain.data.tvl + +resFacto.data.tvl + +resCryptoFacto.data.tvl + + let sideTVLs = [] + let endPoints = [ + 'getTVLPolygon', + 'getTVLFantom', + 'getTVLxDai', + 'getTVLAvalanche', + 'getTVLHarmony', + 'getTVLArbitrum', + 'getTVLOptimism', + 'getTVLMoonbeam', + 'getTVLKava', + 'getTVLCelo', + 'getTVLZkevm', + 'getTVLZksync', + ] + + let sideChainTVL = 0 + await Promise.all( + endPoints.map(async (endPoint) => { + let res = await (await fetch(`https://api.curve.fi/api/${endPoint}`)).json() + let sideChain = { + 'chain': endPoint.replace('getTVL', ''), + 'tvl': parseFloat(res.data.tvl) + } + sideChainTVL += sideChain.tvl + sideTVLs.push(sideChain) + }) + ) + + + + return { tvl, sideTVLs, sideChainTVL }; }, { maxAge: 15 * 60, // 15 min diff --git a/pages/api/getTVLZkevm.js b/pages/api/getTVLZkevm.js new file mode 100644 index 00000000..1bfc56bb --- /dev/null +++ b/pages/api/getTVLZkevm.js @@ -0,0 +1,59 @@ +import Web3 from 'web3'; +import configs from 'constants/configs'; + +import getPoolsFn from 'pages/api/getPools'; +import { fn } from 'utils/api'; +import erc20Abi from 'constants/abis/erc20.json'; +import aavePool from 'constants/abis/pools/aave.json'; + +const web3 = new Web3(configs.zkevm.rpcUrl); + + +export default fn(async () => { + + + let price_feed = await (await fetch('https://api.coingecko.com/api/v3/simple/price?ids=tether,ethereum,bitcoin&vs_currencies=usd')).json() + + let pools = { + } + let tvl = 0 + for (const [key, pool] of Object.entries(pools)) { + + let poolC = new web3.eth.Contract(aavePool, pool.address); + + let multiplier = (pool.type == 'stable' || pool.type == 'crypto') ? 1 : price_feed[pool.type].usd + + await Promise.all( + pool.decimals.map(async (decimal, index) => { + let balance = await poolC.methods.balances(index).call() + balance = balance / (10 ** decimal) + + if (pool.type == 'crypto') { + multiplier = price_feed[pool.keys[index]].usd + } + + pools[key].tvl += (balance * multiplier) + tvl += (parseFloat(balance) * multiplier) + + }) + ) + + if (pool.type == 'crypto') { + let tokenContract = new web3.eth.Contract(erc20Abi, pool.token); + let supply = await tokenContract.methods.totalSupply().call(); + pools[key].lpPrice = pools[key].tvl / (supply / 10 ** 18) + } + } + + const factoDetails = await getPoolsFn.straightCall({ blockchainId: 'zkevm', registryId: 'factory' }) + tvl += factoDetails.tvlAll + const factory = { + tvl: factoDetails.tvlAll + }; + + return { tvl, pools, factory }; + + +}, { + maxAge: 15 * 60, // 15 min +}); diff --git a/pages/api/getTVLZksync.js b/pages/api/getTVLZksync.js new file mode 100644 index 00000000..76e4a850 --- /dev/null +++ b/pages/api/getTVLZksync.js @@ -0,0 +1,59 @@ +import Web3 from 'web3'; +import configs from 'constants/configs'; + +import getPoolsFn from 'pages/api/getPools'; +import { fn } from 'utils/api'; +import erc20Abi from 'constants/abis/erc20.json'; +import aavePool from 'constants/abis/pools/aave.json'; + +const web3 = new Web3(configs.zksync.rpcUrl); + + +export default fn(async () => { + + + let price_feed = await (await fetch('https://api.coingecko.com/api/v3/simple/price?ids=tether,ethereum,bitcoin&vs_currencies=usd')).json() + + let pools = { + } + let tvl = 0 + for (const [key, pool] of Object.entries(pools)) { + + let poolC = new web3.eth.Contract(aavePool, pool.address); + + let multiplier = (pool.type == 'stable' || pool.type == 'crypto') ? 1 : price_feed[pool.type].usd + + await Promise.all( + pool.decimals.map(async (decimal, index) => { + let balance = await poolC.methods.balances(index).call() + balance = balance / (10 ** decimal) + + if (pool.type == 'crypto') { + multiplier = price_feed[pool.keys[index]].usd + } + + pools[key].tvl += (balance * multiplier) + tvl += (parseFloat(balance) * multiplier) + + }) + ) + + if (pool.type == 'crypto') { + let tokenContract = new web3.eth.Contract(erc20Abi, pool.token); + let supply = await tokenContract.methods.totalSupply().call(); + pools[key].lpPrice = pools[key].tvl / (supply / 10 ** 18) + } + } + + const factoDetails = await getPoolsFn.straightCall({ blockchainId: 'zksync', registryId: 'factory' }) + tvl += factoDetails.tvlAll + const factory = { + tvl: factoDetails.tvlAll + }; + + return { tvl, pools, factory }; + + +}, { + maxAge: 15 * 60, // 15 min +}); From 4ce7fccc6c79cea055fc11efcbf64de932cfc45b Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 4 Jul 2023 18:22:44 +0200 Subject: [PATCH 10/83] Fix zksync multicall address --- constants/configs/configs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 088b8f57..8b03a062 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -494,8 +494,8 @@ const configs = { platformCoingeckoId: 'zksync', nativeAssetErc20WrapperId: 'weth', // Used by crypto facto, since it handles wrapped native as native rpcUrl: 'https://mainnet.era.zksync.io', - multicallAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', // ?? - multicall2Address: '0xcA11bde05977b3631167028862bE2a173976CA11', // ?? + multicallAddress: '0xF9cda624FBC7e059355ce98a31693d299FACd963', + multicall2Address: '0xF9cda624FBC7e059355ce98a31693d299FACd963', getFactoryRegistryAddress: async () => '0xAF5261eD780fd5b80CF6E206b6BF90CbB97F511B', factoryImplementationAddressMap: new Map([ ['0x7c2a205C52361410233540008f7095dEF5915843'.toLowerCase(), 'plain2basic'], From d38e6ba6571864b12223565264fe0b8e3801690e Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 8 Jul 2023 13:41:13 +0200 Subject: [PATCH 11/83] Add underlying ETH LSDs APY info to pools & pool APYs --- .eslintrc.json | 61 ++++++-- pages/api/getPools/index.js | 212 ++++++++++++++------------ pages/api/getSubgraphData/index.js | 230 +++++++++++++++++------------ utils/data/assets-prices.js | 2 +- utils/data/getETHLSDAPYs.js | 26 ++++ 5 files changed, 325 insertions(+), 206 deletions(-) create mode 100644 utils/data/getETHLSDAPYs.js diff --git a/.eslintrc.json b/.eslintrc.json index bd602e3b..70dcee1a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,29 +4,64 @@ }, "extends": "airbnb", "parser": "@babel/eslint-parser", + "requireconfigfile": false, "plugins": [ "@babel" ], "rules": { "func-names": 0, "no-nested-ternary": 0, - "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }], + "react/jsx-filename-extension": [ + 1, + { + "extensions": [ + ".js", + ".jsx" + ] + } + ], "max-len": 0, - "arrow-parens": ["error", "always"], + "arrow-parens": [ + "error", + "always" + ], "no-underscore-dangle": 0, "operator-linebreak": 0, - "comma-dangle": ["error", { - "arrays": "always-multiline", - "objects": "always-multiline", - "imports": "always-multiline", - "exports": "always-multiline", - "functions": "never" - }], - "no-use-before-define": ["error", "nofunc"], - "no-empty": ["error", { "allowEmptyCatch": true }], + "comma-dangle": [ + "error", + { + "arrays": "always-multiline", + "objects": "always-multiline", + "imports": "always-multiline", + "exports": "always-multiline", + "functions": "never" + } + ], + "no-use-before-define": [ + "error", + "nofunc" + ], + "no-empty": [ + "error", + { + "allowEmptyCatch": true + } + ], "react/forbid-prop-types": 0, - "no-mixed-operators": ["error", { "allowSamePrecedence": true }], - "indent": ["error", 2, { "flatTernaryExpressions": true, "SwitchCase": 1 }] + "no-mixed-operators": [ + "error", + { + "allowSamePrecedence": true + } + ], + "indent": [ + "error", + 2, + { + "flatTernaryExpressions": false, + "SwitchCase": 1 + } + ] }, "settings": { "import/resolver": { diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 02861957..98f65046 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -34,6 +34,7 @@ import { getRegistry } from 'utils/getters'; import getAssetsPrices from 'utils/data/assets-prices'; import getTokensPrices from 'utils/data/tokens-prices'; import getYcTokenPrices from 'utils/data/getYcTokenPrices'; +import getETHLSDAPYs from 'utils/data/getETHLSDAPYs'; import getTempleTokenPrices from 'utils/data/getTempleTokenPrices'; import getEywaTokenPrices from 'utils/data/getEywaTokenPrices'; import getMainRegistryPools from 'pages/api/getMainRegistryPools'; @@ -48,15 +49,16 @@ import { deriveMissingCoinPrices, getImplementation } from 'pages/api/getPools/_ import { lc } from 'utils/String'; /* eslint-disable */ -const POOL_BALANCE_ABI_UINT256 = [{ "gas": 1823, "inputs": [ { "name": "arg0", "type": "uint256" } ], "name": "balances", "outputs": [ { "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }]; -const POOL_BALANCE_ABI_INT128 = [{ "gas": 1823, "inputs": [ { "name": "arg0", "type": "int128" } ], "name": "balances", "outputs": [ { "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }]; -const POOL_PRICE_ORACLE_NO_ARGS_ABI = [{"stateMutability":"view","type":"function","name":"price_oracle","inputs":[],"outputs":[{"name":"","type":"uint256"}]}]; -const POOL_PRICE_ORACLE_WITH_ARGS_ABI = [{"stateMutability":"view","type":"function","name":"price_oracle","inputs":[{"name":"k","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]}]; -const POOL_TOKEN_METHOD_ABI = [{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":468}, {"stateMutability":"view","type":"function","name":"lp_token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":468}]; -const POOL_NAME_METHOD_ABI = [{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]}]; -const POOL_SYMBOL_METHOD_ABI = [{ "stateMutability": "view", "type": "function", "name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}]}]; -const POOL_TOTALSUPPLY_METHOD_ABI = [{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function"}]; +const POOL_BALANCE_ABI_UINT256 = [{ "gas": 1823, "inputs": [{ "name": "arg0", "type": "uint256" }], "name": "balances", "outputs": [{ "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }]; +const POOL_BALANCE_ABI_INT128 = [{ "gas": 1823, "inputs": [{ "name": "arg0", "type": "int128" }], "name": "balances", "outputs": [{ "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }]; +const POOL_PRICE_ORACLE_NO_ARGS_ABI = [{ "stateMutability": "view", "type": "function", "name": "price_oracle", "inputs": [], "outputs": [{ "name": "", "type": "uint256" }] }]; +const POOL_PRICE_ORACLE_WITH_ARGS_ABI = [{ "stateMutability": "view", "type": "function", "name": "price_oracle", "inputs": [{ "name": "k", "type": "uint256" }], "outputs": [{ "name": "", "type": "uint256" }] }]; +const POOL_TOKEN_METHOD_ABI = [{ "stateMutability": "view", "type": "function", "name": "token", "inputs": [], "outputs": [{ "name": "", "type": "address" }], "gas": 468 }, { "stateMutability": "view", "type": "function", "name": "lp_token", "inputs": [], "outputs": [{ "name": "", "type": "address" }], "gas": 468 }]; +const POOL_NAME_METHOD_ABI = [{ "stateMutability": "view", "type": "function", "name": "name", "inputs": [], "outputs": [{ "name": "", "type": "string" }] }]; +const POOL_SYMBOL_METHOD_ABI = [{ "stateMutability": "view", "type": "function", "name": "symbol", "inputs": [], "outputs": [{ "name": "", "type": "string" }] }]; +const POOL_TOTALSUPPLY_METHOD_ABI = [{ "name": "totalSupply", "outputs": [{ "type": "uint256", "name": "" }], "inputs": [], "stateMutability": "view", "type": "function" }]; const REGISTRY_GET_IMPLEMENTATION_ADDRESS_ABI = [factoryV2RegistryAbi.find(({ name }) => name === 'get_implementation_address')] +const ORACLIZED_POOL_DETECTION_ABI = [{ "stateMutability": "view", "type": "function", "name": "oracle_method", "inputs": [], "outputs": [{ "name": "", "type": "uint256" }] }]; /* eslint-enable */ /* eslint-disable object-curly-newline, camelcase */ @@ -259,45 +261,45 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) const registryAddress = ( registryId === 'factory' ? await getFactoryRegistryAddress() : - registryId === 'main' ? await getRegistry({ blockchainId }) : - registryId === 'crypto' ? await getCryptoRegistryAddress() : - registryId === 'factory-crypto' ? await getFactoryCryptoRegistryAddress() : - registryId === 'factory-crvusd' ? await getFactoryCrvusdRegistryAddress() : - registryId === 'factory-tricrypto' ? await getFactoryTricryptoRegistryAddress() : - registryId === 'factory-eywa' ? await getFactoryEywaRegistryAddress() : - undefined + registryId === 'main' ? await getRegistry({ blockchainId }) : + registryId === 'crypto' ? await getCryptoRegistryAddress() : + registryId === 'factory-crypto' ? await getFactoryCryptoRegistryAddress() : + registryId === 'factory-crvusd' ? await getFactoryCrvusdRegistryAddress() : + registryId === 'factory-tricrypto' ? await getFactoryTricryptoRegistryAddress() : + registryId === 'factory-eywa' ? await getFactoryEywaRegistryAddress() : + undefined ); if (registryAddress === ZERO_ADDRESS || !registryAddress) return { poolData: [], tvlAll: 0 }; const getIdForPool = (id) => ( registryId === 'factory' ? `factory-v2-${id}` : - registryId === 'main' ? `${id}` : - registryId === 'crypto' ? `crypto-${id}` : - registryId === 'factory-crypto' ? `factory-crypto-${id}` : - registryId === 'factory-crvusd' ? `factory-crvusd-${id}` : - registryId === 'factory-tricrypto' ? `factory-tricrypto-${id}` : - registryId === 'factory-eywa' ? `factory-eywa-${id}` : - undefined + registryId === 'main' ? `${id}` : + registryId === 'crypto' ? `crypto-${id}` : + registryId === 'factory-crypto' ? `factory-crypto-${id}` : + registryId === 'factory-crvusd' ? `factory-crvusd-${id}` : + registryId === 'factory-tricrypto' ? `factory-tricrypto-${id}` : + registryId === 'factory-eywa' ? `factory-eywa-${id}` : + undefined ); const POOL_ABI = ( registryId === 'factory-crypto' ? factoryCryptoPoolAbi : - registryId === 'factory-crvusd' ? factoryCrvusdPoolAbi : - registryId === 'factory-tricrypto' ? factoryTricryptoPoolAbi : - registryId === 'factory-eywa' ? factoryEywaPoolAbi : - factoryPoolAbi + registryId === 'factory-crvusd' ? factoryCrvusdPoolAbi : + registryId === 'factory-tricrypto' ? factoryTricryptoPoolAbi : + registryId === 'factory-eywa' ? factoryEywaPoolAbi : + factoryPoolAbi ); const REGISTRY_ABI = ( registryId === 'factory-crypto' ? factoryCryptoRegistryAbi : - registryId === 'factory-crvusd' ? factoryCrvusdRegistryAbi : - registryId === 'factory-tricrypto' ? [ - ...factoryTricryptoRegistryAbi, - ...REGISTRY_GET_IMPLEMENTATION_ADDRESS_ABI, // Hack, see get_implementation_address call for factory-tricrypto for context - ] : - registryId === 'factory-eywa' ? factoryEywaRegistryAbi : - registryId === 'crypto' ? cryptoRegistryAbi : - factoryV2RegistryAbi + registryId === 'factory-crvusd' ? factoryCrvusdRegistryAbi : + registryId === 'factory-tricrypto' ? [ + ...factoryTricryptoRegistryAbi, + ...REGISTRY_GET_IMPLEMENTATION_ADDRESS_ABI, // Hack, see get_implementation_address call for factory-tricrypto for context + ] : + registryId === 'factory-eywa' ? factoryEywaRegistryAbi : + registryId === 'crypto' ? cryptoRegistryAbi : + factoryV2RegistryAbi ); @@ -372,8 +374,8 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) poolRegistryId === 'main' ? mainRegistryPoolsAndLpTokens.find(({ address: addressB }) => ( addressB.toLowerCase() === address.toLowerCase() )) : - poolRegistryId === 'crypto' ? pool : - null + poolRegistryId === 'crypto' ? pool : + null ); if (!matchingPool) return null; @@ -404,7 +406,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) lcAddress, tokenUsdPrices.sort(({ poolUsdTotal: poolUsdTotalA }, { poolUsdTotal: poolUsdTotalB }) => ( poolUsdTotalA > poolUsdTotalB ? -1 : - poolUsdTotalB > poolUsdTotalA ? 1 : 0 + poolUsdTotalB > poolUsdTotalA ? 1 : 0 ))[0].usdPrice, ])); @@ -416,6 +418,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ...POOL_NAME_METHOD_ABI, ...POOL_SYMBOL_METHOD_ABI, ...POOL_TOTALSUPPLY_METHOD_ABI, + ...ORACLIZED_POOL_DETECTION_ABI, ], address); // Note: reverting for at least some pools, prob non-meta ones: get_underlying_coins, get_underlying_decimals @@ -441,6 +444,11 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) methodName: 'A', metaData: { poolId, type: 'amplificationCoefficient' }, ...networkSettingsParam, + }, { + contract: poolContract, + methodName: 'oracle_method', + metaData: { poolId, type: 'oracleMethod' }, + ...networkSettingsParam, }, // 'main' and 'factory' registries have these pieces of info, others do not ...( @@ -627,42 +635,42 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) const lpTokenData = ( lpTokensWithMetadata.length === 0 ? [] : - await multiCall(flattenArray(lpTokensWithMetadata.map(({ - data: address, - metaData, - }) => { - const lpTokenContract = new web3.eth.Contract(erc20Abi, address); - const poolCoinsCount = tweakedPoolData.find(({ metaData: { type, poolId } }) => ( - type === 'coinsAddresses' && - poolId === metaData.poolId - )).data.filter((coinAddress) => coinAddress !== '0x0000000000000000000000000000000000000000').length; - const poolHasMultipleOracles = poolCoinsCount > 2; - const poolAddress = poolAddresses[poolIds.indexOf(metaData.poolId)]; - const poolContractForPriceOracleCall = new web3.eth.Contract(poolHasMultipleOracles ? POOL_PRICE_ORACLE_WITH_ARGS_ABI : POOL_PRICE_ORACLE_NO_ARGS_ABI, poolAddress); - - return [{ - contract: lpTokenContract, - methodName: 'name', - metaData: { poolId: metaData.poolId, type: 'name' }, - ...networkSettingsParam, - }, { - contract: lpTokenContract, - methodName: 'symbol', - metaData: { poolId: metaData.poolId, type: 'symbol' }, - ...networkSettingsParam, - }, { - contract: lpTokenContract, - methodName: 'totalSupply', - metaData: { poolId: metaData.poolId, type: 'totalSupply' }, - ...networkSettingsParam, - }, { - contract: poolContractForPriceOracleCall, - methodName: 'price_oracle', // uint256 - params: poolHasMultipleOracles ? [0] : [], // Price oracle for first asset, there are N-1 oracles so we can fetch more if needed - metaData: { poolId: metaData.poolId, type: 'priceOracle' }, - ...networkSettingsParam, - }]; - }))) + await multiCall(flattenArray(lpTokensWithMetadata.map(({ + data: address, + metaData, + }) => { + const lpTokenContract = new web3.eth.Contract(erc20Abi, address); + const poolCoinsCount = tweakedPoolData.find(({ metaData: { type, poolId } }) => ( + type === 'coinsAddresses' && + poolId === metaData.poolId + )).data.filter((coinAddress) => coinAddress !== '0x0000000000000000000000000000000000000000').length; + const poolHasMultipleOracles = poolCoinsCount > 2; + const poolAddress = poolAddresses[poolIds.indexOf(metaData.poolId)]; + const poolContractForPriceOracleCall = new web3.eth.Contract(poolHasMultipleOracles ? POOL_PRICE_ORACLE_WITH_ARGS_ABI : POOL_PRICE_ORACLE_NO_ARGS_ABI, poolAddress); + + return [{ + contract: lpTokenContract, + methodName: 'name', + metaData: { poolId: metaData.poolId, type: 'name' }, + ...networkSettingsParam, + }, { + contract: lpTokenContract, + methodName: 'symbol', + metaData: { poolId: metaData.poolId, type: 'symbol' }, + ...networkSettingsParam, + }, { + contract: lpTokenContract, + methodName: 'totalSupply', + metaData: { poolId: metaData.poolId, type: 'totalSupply' }, + ...networkSettingsParam, + }, { + contract: poolContractForPriceOracleCall, + methodName: 'price_oracle', // uint256 + params: poolHasMultipleOracles ? [0] : [], // Price oracle for first asset, there are N-1 oracles so we can fetch more if needed + metaData: { poolId: metaData.poolId, type: 'priceOracle' }, + ...networkSettingsParam, + }]; + }))) ); const augmentedPoolData = [ @@ -751,8 +759,8 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ); const coinContract = ( isNativeEth ? undefined : - hasByte32Symbol ? new web3.eth.Contract(erc20AbiMKR, address) : - new web3.eth.Contract(erc20Abi, address) + hasByte32Symbol ? new web3.eth.Contract(erc20AbiMKR, address) : + new web3.eth.Contract(erc20Abi, address) ); const poolAddress = poolAddresses[poolIds.indexOf(poolId)]; @@ -818,14 +826,14 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) (IGNORED_COINS[blockchainId] || []).includes(coinAddress.toLowerCase()) ? 0 : ( - otherRegistryTokensPricesMap[coinAddress.toLowerCase()] || - mainRegistryLpTokensPricesMap[coinAddress.toLowerCase()] || - coinAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || - ycTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || - templeTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || - eywaTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || - (registryId === 'factory' && ethereumOnlyData?.factoryGaugesPoolAddressesAndAssetPricesMap?.[poolAddress.toLowerCase()]) || - null + otherRegistryTokensPricesMap[coinAddress.toLowerCase()] || + mainRegistryLpTokensPricesMap[coinAddress.toLowerCase()] || + coinAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || + ycTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || + templeTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || + eywaTokensAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || + (registryId === 'factory' && ethereumOnlyData?.factoryGaugesPoolAddressesAndAssetPricesMap?.[poolAddress.toLowerCase()]) || + null ) ); @@ -842,13 +850,13 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ...( // Most pool contracts expect a coin index as uint256, which we retrieve in poolBalanceUint256 type === 'poolBalanceUint256' ? { poolBalance: data } : - // Some pool contracts expect a coin index as int128, which we retrieve in poolBalanceInt128, - // and use as fallback value for poolBalance - type === 'poolBalanceInt128' ? { poolBalance: BN.max(coinInfo.poolBalance, data).toFixed() } : - type === 'poolStakedBalance' ? { poolBalance: BN(coinInfo.poolBalance).plus(data).toFixed() } : - // Force 'MKR' as symbol for MKR token on Ethereum, which uses bytes32 and not string - (type === 'symbol' && blockchainId === 'ethereum' && lc(coinAddress) === '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2') ? { symbol: 'MKR' } : - { [type]: data } + // Some pool contracts expect a coin index as int128, which we retrieve in poolBalanceInt128, + // and use as fallback value for poolBalance + type === 'poolBalanceInt128' ? { poolBalance: BN.max(coinInfo.poolBalance, data).toFixed() } : + type === 'poolStakedBalance' ? { poolBalance: BN(coinInfo.poolBalance).plus(data).toFixed() } : + // Force 'MKR' as symbol for MKR token on Ethereum, which uses bytes32 and not string + (type === 'symbol' && blockchainId === 'ethereum' && lc(coinAddress) === '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2') ? { symbol: 'MKR' } : + { [type]: data } ), ...(isNativeEth ? hardcodedInfoForNativeEth : {}), isBasePoolLpToken: mainRegistryPoolsAndLpTokens.some(({ lpTokenAddress }) => ( @@ -956,10 +964,10 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) // and fall back to the assetType prop. const assetTypeName = ( (implementation === 'plain2eth' || implementation === 'plain2ethema' || implementation === 'plain2ethema2' || implementation === 'plain3eth' || implementation === 'plain4eth') ? nativeCurrencySymbol.toLowerCase() : - isBtcMetaPool ? 'btc' : - isUsdMetaPool ? 'usd' : - isNativeStablePool ? nativeCurrencySymbol.toLowerCase() : - (assetTypeMap.get(poolInfo.assetType) || 'unknown') + isBtcMetaPool ? 'btc' : + isUsdMetaPool ? 'usd' : + isNativeStablePool ? nativeCurrencySymbol.toLowerCase() : + (assetTypeMap.get(poolInfo.assetType) || 'unknown') ); const coins = poolInfo.coinsAddresses @@ -1127,6 +1135,13 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) }) ); + /** + * Detect pools with oracles: oracle_method must be present (if not present, + * call returns default value of zero) and non-zero + */ + const usesRateOracle = Number(poolInfo.oracleMethod) !== 0; + const ethereumLSDAPYs = (blockchainId === 'ethereum') ? (await getETHLSDAPYs()) : {}; + const augmentedPool = { ...poolInfo, poolUrls: detailedPoolUrls, @@ -1138,7 +1153,12 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ), lpTokenAddress: (poolInfo.lpTokenAddress || poolInfo.address), assetTypeName, - coins: augmentedCoins.map((coin) => overrideSymbol(coin, blockchainId)), + coins: augmentedCoins.map((coin) => ({ + ...overrideSymbol(coin, blockchainId), + ...(typeof ethereumLSDAPYs[lc(coin.address)] !== 'undefined' ? { + ethLsdApy: ethereumLSDAPYs[lc(coin.address)], + } : {}), + })), usdTotal, isMetaPool, underlyingDecimals: (isMetaPool ? poolInfo.underlyingDecimals : undefined), @@ -1155,6 +1175,8 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) [gaugeCrvBaseApy, (gaugeCrvBaseApy * 2.5)] : undefined ), + oracleMethod: undefined, // Don't return this value, unneeded for api consumers + usesRateOracle, }; // When retrieving pool data for a registry that isn't 'main', mainRegistryLpTokensPricesMap diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index e3f3790d..578d67bb 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -10,7 +10,9 @@ import tripoolSwapAbi from 'constants/abis/tripool_swap.json'; import configs from 'constants/configs'; import { BASE_API_DOMAIN } from 'constants/AppConstants'; import { runConcurrentlyAtMost } from 'utils/Async'; +import { uintToBN } from 'utils/Web3'; import getAllCurvePoolsData from 'utils/data/curve-pools-data'; +import { sumBN } from 'utils/Array.js'; const lc = (str) => str.toLowerCase(); @@ -30,7 +32,7 @@ const POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME = { ].map(lc), }; -export default fn(async ( {blockchainId} ) => { +export default fn(async ({ blockchainId }) => { if (typeof blockchainId === 'undefined') blockchainId = 'ethereum'; // Default value const config = configs[blockchainId]; @@ -59,7 +61,7 @@ export default fn(async ( {blockchainId} ) => { await runConcurrentlyAtMost(poolList.map((_, i) => async () => { const poolAddress = lc(poolList[i].address); - let POOL_QUERY = ` + let POOL_QUERY = ` { swapVolumeSnapshots( first: 1000, @@ -79,63 +81,63 @@ export default fn(async ( {blockchainId} ) => { } } ` - const res = await fetch(GRAPH_ENDPOINT, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query: POOL_QUERY }) - }) - - let data = await res.json() - let rollingDaySummedVolume = 0 - let rollingRawVolume = 0 - - subgraphHasErrors = data.errors?.length > 0; - if (!subgraphHasErrors) { - for (let i = 0; i < data.data.swapVolumeSnapshots.length; i ++) { - const hourlyVolUSD = parseFloat(data.data.swapVolumeSnapshots[i].volumeUSD) - rollingDaySummedVolume = rollingDaySummedVolume + hourlyVolUSD - - const hourlyVol = parseFloat(data.data.swapVolumeSnapshots[i].volume) - rollingRawVolume = rollingRawVolume + hourlyVol - } + const res = await fetch(GRAPH_ENDPOINT, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ query: POOL_QUERY }) + }) + + let data = await res.json() + let rollingDaySummedVolume = 0 + let rollingRawVolume = 0 + + subgraphHasErrors = data.errors?.length > 0; + if (!subgraphHasErrors) { + for (let i = 0; i < data.data.swapVolumeSnapshots.length; i++) { + const hourlyVolUSD = parseFloat(data.data.swapVolumeSnapshots[i].volumeUSD) + rollingDaySummedVolume = rollingDaySummedVolume + hourlyVolUSD + + const hourlyVol = parseFloat(data.data.swapVolumeSnapshots[i].volume) + rollingRawVolume = rollingRawVolume + hourlyVol } + } - const hasRawVolumeButNoUsdVolume = (rollingDaySummedVolume === 0 && rollingRawVolume > 0); - const needsFallbackUsdVolume = ( - hasRawVolumeButNoUsdVolume || - (POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME[blockchainId] || []).includes(poolAddress) + const hasRawVolumeButNoUsdVolume = (rollingDaySummedVolume === 0 && rollingRawVolume > 0); + const needsFallbackUsdVolume = ( + hasRawVolumeButNoUsdVolume || + (POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME[blockchainId] || []).includes(poolAddress) + ); + + if (needsFallbackUsdVolume) { + const ILLIQUID_THRESHOLD = 100; + const poolData = getPoolByAddress(poolAddress); + const poolLpTokenPrice = ( + poolData.usdTotal > ILLIQUID_THRESHOLD ? + (poolData.usdTotal / (poolData.totalSupply / 1e18)) : + 0 ); + const usdVolumeRectified = poolLpTokenPrice * rollingRawVolume; - if (needsFallbackUsdVolume) { - const ILLIQUID_THRESHOLD = 100; - const poolData = getPoolByAddress(poolAddress); - const poolLpTokenPrice = ( - poolData.usdTotal > ILLIQUID_THRESHOLD ? - (poolData.usdTotal / (poolData.totalSupply / 1e18)) : - 0 - ); - const usdVolumeRectified = poolLpTokenPrice * rollingRawVolume; + if (usdVolumeRectified > 0 || poolData.usdTotal <= ILLIQUID_THRESHOLD) { + rollingDaySummedVolume = usdVolumeRectified; - if (usdVolumeRectified > 0 || poolData.usdTotal <= ILLIQUID_THRESHOLD) { - rollingDaySummedVolume = usdVolumeRectified; - - console.log(`Missing usd volume from subgraph: derived using lp token price from getPools endpoint for pool ${poolAddress} (derived rolling day usd volume: ${usdVolumeRectified})`); - } + console.log(`Missing usd volume from subgraph: derived using lp token price from getPools endpoint for pool ${poolAddress} (derived rolling day usd volume: ${usdVolumeRectified})`); } + } - if (blockchainId === 'ethereum' && (poolAddress === '0x141ace5fd4435fd341e396d579c91df99fed10d4' || poolAddress === '0x2863a328a0b7fc6040f11614fa0728587db8e353')) { - poolList[i].rawVolume = 0 - poolList[i].volumeUSD = 0 - } else { - poolList[i].rawVolume = rollingRawVolume - poolList[i].volumeUSD = rollingDaySummedVolume - } + if (blockchainId === 'ethereum' && (poolAddress === '0x141ace5fd4435fd341e396d579c91df99fed10d4' || poolAddress === '0x2863a328a0b7fc6040f11614fa0728587db8e353')) { + poolList[i].rawVolume = 0 + poolList[i].volumeUSD = 0 + } else { + poolList[i].rawVolume = rollingRawVolume + poolList[i].volumeUSD = rollingDaySummedVolume + } - totalVolume += parseFloat(rollingDaySummedVolume) - cryptoVolume += (poolList[i].type.includes('crypto')) ? parseFloat(rollingDaySummedVolume) : 0 + totalVolume += parseFloat(rollingDaySummedVolume) + cryptoVolume += (poolList[i].type.includes('crypto')) ? parseFloat(rollingDaySummedVolume) : 0 - const APY_QUERY = ` + const APY_QUERY = ` { dailyPoolSnapshots(first: 7, orderBy: timestamp, @@ -152,54 +154,54 @@ export default fn(async ( {blockchainId} ) => { } `; - const resAPY = await fetch(GRAPH_ENDPOINT, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ query: APY_QUERY }), - }); - - let dataAPY = await resAPY.json(); - - const snapshots = dataAPY?.data?.dailyPoolSnapshots?.map((a) => ({ - baseApr: +a.baseApr, - virtualPrice: +a.virtualPrice, - xcpProfit: a.xcpProfit ? +a.xcpProfit : undefined, - xcpProfitA: a.xcpProfitA ? +a.xcpProfitA : undefined, - timestamp: a.timestamp, - })) || []; - - let latestDailyApy = 0 - let latestWeeklyApy = 0 - if (snapshots.length >= 2) { - const isCryptoPool = snapshots[0].xcpProfit > 0; - - if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[1].xcpProfit !== 0) { - const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; - const dayOldProfit = ((snapshots[1].xcpProfit / 2) + (snapshots[1].xcpProfitA / 2) + 1e18) / 2; - const rateDaily = (currentProfit - dayOldProfit) / dayOldProfit; - latestDailyApy = ((rateDaily + 1) ** 365 - 1) * 100; - } else if (snapshots[1].virtualPrice !== 0) { - latestDailyApy = ((snapshots[0].baseApr + 1) ** 365 - 1) * 100; - } - } - if (snapshots.length > 6) { - const isCryptoPool = snapshots[0].xcpProfit > 0; - - if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[6].xcpProfit !== 0) { - const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; - const weekOldProfit = ((snapshots[6].xcpProfit / 2) + (snapshots[6].xcpProfitA / 2) + 1e18) / 2; - const rateWeekly = (currentProfit - weekOldProfit) / weekOldProfit; - latestWeeklyApy = ((rateWeekly + 1) ** 52 - 1) * 100; - } else if (snapshots[6].virtualPrice !== 0) { - const latestWeeklyRate = - (snapshots[0].virtualPrice - snapshots[6].virtualPrice) / - snapshots[0].virtualPrice; - latestWeeklyApy = ((latestWeeklyRate + 1) ** 52 - 1) * 100; - } - } - poolList[i].latestDailyApy = Math.min(latestDailyApy, 1e6); - poolList[i].latestWeeklyApy = Math.min(latestWeeklyApy, 1e6); - poolList[i].virtualPrice = snapshots[0] ? snapshots[0].virtualPrice : undefined; + const resAPY = await fetch(GRAPH_ENDPOINT, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query: APY_QUERY }), + }); + + let dataAPY = await resAPY.json(); + + const snapshots = dataAPY?.data?.dailyPoolSnapshots?.map((a) => ({ + baseApr: +a.baseApr, + virtualPrice: +a.virtualPrice, + xcpProfit: a.xcpProfit ? +a.xcpProfit : undefined, + xcpProfitA: a.xcpProfitA ? +a.xcpProfitA : undefined, + timestamp: a.timestamp, + })) || []; + + let latestDailyApy = 0 + let latestWeeklyApy = 0 + if (snapshots.length >= 2) { + const isCryptoPool = snapshots[0].xcpProfit > 0; + + if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[1].xcpProfit !== 0) { + const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; + const dayOldProfit = ((snapshots[1].xcpProfit / 2) + (snapshots[1].xcpProfitA / 2) + 1e18) / 2; + const rateDaily = (currentProfit - dayOldProfit) / dayOldProfit; + latestDailyApy = ((rateDaily + 1) ** 365 - 1) * 100; + } else if (snapshots[1].virtualPrice !== 0) { + latestDailyApy = ((snapshots[0].baseApr + 1) ** 365 - 1) * 100; + } + } + if (snapshots.length > 6) { + const isCryptoPool = snapshots[0].xcpProfit > 0; + + if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[6].xcpProfit !== 0) { + const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; + const weekOldProfit = ((snapshots[6].xcpProfit / 2) + (snapshots[6].xcpProfitA / 2) + 1e18) / 2; + const rateWeekly = (currentProfit - weekOldProfit) / weekOldProfit; + latestWeeklyApy = ((rateWeekly + 1) ** 52 - 1) * 100; + } else if (snapshots[6].virtualPrice !== 0) { + const latestWeeklyRate = + (snapshots[0].virtualPrice - snapshots[6].virtualPrice) / + snapshots[0].virtualPrice; + latestWeeklyApy = ((latestWeeklyRate + 1) ** 52 - 1) * 100; + } + } + poolList[i].latestDailyApy = Math.min(latestDailyApy, 1e6); + poolList[i].latestWeeklyApy = Math.min(latestWeeklyApy, 1e6); + poolList[i].virtualPrice = snapshots[0] ? snapshots[0].virtualPrice : undefined; }), 10); @@ -257,6 +259,40 @@ export default fn(async ( {blockchainId} ) => { // [end] Temporary addition while main ethereum subgraph syncs latest crvusd factory pools + /** + * Add additional ETH staking APY to pools containing ETH LSDs + */ + poolList = poolList.map((pool) => { + const { usesRateOracle, coins, usdTotal } = getPoolByAddress(pool.address); + const needsAdditionalLsdAssetApy = ( + !usesRateOracle && + coins.some(({ ethLsdApy }) => typeof ethLsdApy !== 'undefined') + ); + + if (!needsAdditionalLsdAssetApy || usdTotal === 0) return pool; + + const additionalApysPcentFromLsds = coins.map(({ + ethLsdApy, + poolBalance, + decimals, + usdPrice, + }) => { + if (typeof ethLsdApy === 'undefined' || usdPrice === null || usdPrice === 0) return 0; + + const assetUsdTotal = uintToBN(poolBalance, decimals).times(usdPrice); + const assetProportionInPool = assetUsdTotal.div(usdTotal); + + return assetProportionInPool.times(ethLsdApy).times(100); + }); + + return { + ...pool, + latestDailyApy: BN(pool.latestDailyApy).plus(sumBN(additionalApysPcentFromLsds)).toFixed(), + latestWeeklyApy: BN(pool.latestWeeklyApy).plus(sumBN(additionalApysPcentFromLsds)).toFixed(), + } + }); + + const cryptoShare = (cryptoVolume / totalVolume) * 100 return { poolList, totalVolume, cryptoVolume, cryptoShare, subgraphHasErrors } diff --git a/utils/data/assets-prices.js b/utils/data/assets-prices.js index 63388f23..8aa56d13 100644 --- a/utils/data/assets-prices.js +++ b/utils/data/assets-prices.js @@ -2,7 +2,7 @@ import memoize from 'memoizee'; import Request from 'utils/Request'; import { arrayToHashmap } from 'utils/Array'; -const getAssetsPrices = memoize((assetCoingeckoIds) => { +const getAssetsPrices = memoize(async (assetCoingeckoIds) => { if (assetCoingeckoIds.length === 0) return {}; // https://defillama.com/docs/api diff --git a/utils/data/getETHLSDAPYs.js b/utils/data/getETHLSDAPYs.js new file mode 100644 index 00000000..ca1c9630 --- /dev/null +++ b/utils/data/getETHLSDAPYs.js @@ -0,0 +1,26 @@ +import memoize from 'memoizee'; +import { arrayToHashmap } from 'utils/Array'; +import { lc } from 'utils/String'; +import Request from 'utils/Request'; + +const FALLBACK_RETURN_VALUE = {}; + +// Returns a map of ETH LSD address <> staking apy +const getETHLSDAPYs = memoize(async () => { + try { + const { success, data } = await (await Request.get('https://api.cryptostats.community/api/v1/eth-staking-pools/apy?metadata=true')).json(); + if (!success) return FALLBACK_RETURN_VALUE; + + return arrayToHashmap(data.map(({ metadata: { tokenAddress }, results: { apy } }) => [ + lc(tokenAddress), + apy, + ])); + } catch (err) { + return FALLBACK_RETURN_VALUE; + } +}, { + promise: true, + maxAge: 30 * 60 * 1000, // 30 min +}); + +export default getETHLSDAPYs; From 3a37cf036fab5ad9b1cbd5f0fed234de63d003cf Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 8 Jul 2023 14:05:47 +0200 Subject: [PATCH 12/83] Fix type --- pages/api/getFactoryAPYs/ethereum.js | 250 +++++++++++++-------------- pages/api/getSubgraphData/index.js | 8 +- 2 files changed, 129 insertions(+), 129 deletions(-) diff --git a/pages/api/getFactoryAPYs/ethereum.js b/pages/api/getFactoryAPYs/ethereum.js index 254352d9..b3f49f90 100644 --- a/pages/api/getFactoryAPYs/ethereum.js +++ b/pages/api/getFactoryAPYs/ethereum.js @@ -17,143 +17,143 @@ import { sum } from 'utils/Array'; const web3 = new Web3(WEB3_CONSTANTS.RPC_URL); export default fn(async ({ version }) => { - version = ( - version === 'crypto' ? 'crypto' : + version = ( + version === 'crypto' ? 'crypto' : Number(version) === 2 ? 2 : - 1 - ); + 1 + ); - let registryAddress = await getFactoryRegistry(); - let multicallAddress = await getMultiCall() - let registry = new web3.eth.Contract(registryAbi, registryAddress); - let multicall = new web3.eth.Contract(multicallAbi, multicallAddress) + let registryAddress = await getFactoryRegistry(); + let multicallAddress = await getMultiCall() + let registry = new web3.eth.Contract(registryAbi, registryAddress); + let multicall = new web3.eth.Contract(multicallAbi, multicallAddress) - const factoryPoolsApiEndpoint = ( - version === 1 ? 'getFactoryPools' : + const factoryPoolsApiEndpoint = ( + version === 1 ? 'getFactoryPools' : version === 2 ? 'getFactoryV2Pools' : - version === 'crypto' ? 'getPools/ethereum/factory-crypto' : - undefined - ); - const { data: { poolData } } = await (await fetch(`https://api.curve.fi/api/${factoryPoolsApiEndpoint}`)).json() - - let poolDetails = []; - let totalVolume = 0 - - if (version === 1) { - const latest = await web3.eth.getBlockNumber(); - await Promise.all( - poolData.map(async (pool, index) => { - - let poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) - let DAY_BLOCKS = 6550 - - const testPool = pool.address - const eventName = 'TokenExchangeUnderlying'; - const eventName2 = 'TokenExchange'; - - const isMetaPool = ( - pool.implementation?.startsWith('v1metausd') || - pool.implementation?.startsWith('metausd') || - pool.implementation?.startsWith('v1metabtc') || - pool.implementation?.startsWith('metabtc') - ); - - let decimals = [pool.token.decimals, 18, 18, 18]; - let volume = 0; - - let vPriceFetch = 1 * (10 ** 18) - try { - vPriceFetch = await poolContract.methods.get_virtual_price().call() - } catch (e) { - vPriceFetch = 1 * (10 ** 18) - } - - let rateDaily; - let rateWeekly; - - let vPriceDayOldFetch; - let vPriceWeekOldFetch; - try { - vPriceDayOldFetch = await poolContract.methods.get_virtual_price().call('', latest - DAY_BLOCKS) - } catch (e) { - vPriceDayOldFetch = 1 * (10 ** 18) - DAY_BLOCKS = 1; - } - try { - vPriceWeekOldFetch = await poolContract.methods.get_virtual_price().call('', latest - (DAY_BLOCKS * 7)) - } catch (e) { - vPriceWeekOldFetch = vPriceDayOldFetch - } - - rateDaily = (vPriceFetch - vPriceDayOldFetch) / vPriceDayOldFetch; - rateWeekly = (vPriceFetch - vPriceWeekOldFetch) / vPriceWeekOldFetch; - - const apy = (((1 + rateDaily) ** 365) - 1) * 100; - const apyWeekly = (((1 + rateWeekly) ** (365 / 7)) - 1) * 100; - - let events = await poolContract.getPastEvents(eventName, { - filter: {}, // Using an array means OR: e.g. 20 or 23 - fromBlock: latest - DAY_BLOCKS, - toBlock: 'latest' - }) - events.map(async (trade) => { - - let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] - volume += t - - // if (t > 1000000) { - // console.log('$',t, trade.transactionHash) - // } - }) - - const apyFormatted = `${apy.toFixed(2)}%` - totalVolume += volume - let p = { - index, - 'poolAddress' : pool.address, - 'poolSymbol' : version === 1 ? pool.token.symbol : pool.symbol, - apyFormatted, - apy, - apyWeekly, - 'virtualPrice':vPriceFetch, - volume, - } - poolDetails.push(p) - }) - ) - } else { - const { data: { poolList: poolsStats } } = await (await fetch('https://api.curve.fi/api/getSubgraphData/ethereum')).json(); - poolData.forEach((pool, index) => { - const lcSwapAddress = pool.address.toLowerCase(); - const poolStats = poolsStats.find(({ address }) => address.toLowerCase() === lcSwapAddress); - - if (!poolStats) { - const errorMessage = `Couldn't find pool address ${pool.address} in subgraph stats data`; - - if (IS_DEV) throw new Error(errorMessage); - else console.error(errorMessage); + version === 'crypto' ? 'getPools/ethereum/factory-crypto' : + undefined + ); + const { data: { poolData } } = await (await fetch(`http://localhost:3000/api/${factoryPoolsApiEndpoint}`)).json() + + let poolDetails = []; + let totalVolume = 0 + + if (version === 1) { + const latest = await web3.eth.getBlockNumber(); + await Promise.all( + poolData.map(async (pool, index) => { + + let poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) + let DAY_BLOCKS = 6550 + + const testPool = pool.address + const eventName = 'TokenExchangeUnderlying'; + const eventName2 = 'TokenExchange'; + + const isMetaPool = ( + pool.implementation?.startsWith('v1metausd') || + pool.implementation?.startsWith('metausd') || + pool.implementation?.startsWith('v1metabtc') || + pool.implementation?.startsWith('metabtc') + ); + + let decimals = [pool.token.decimals, 18, 18, 18]; + let volume = 0; + + let vPriceFetch = 1 * (10 ** 18) + try { + vPriceFetch = await poolContract.methods.get_virtual_price().call() + } catch (e) { + vPriceFetch = 1 * (10 ** 18) + } + + let rateDaily; + let rateWeekly; + + let vPriceDayOldFetch; + let vPriceWeekOldFetch; + try { + vPriceDayOldFetch = await poolContract.methods.get_virtual_price().call('', latest - DAY_BLOCKS) + } catch (e) { + vPriceDayOldFetch = 1 * (10 ** 18) + DAY_BLOCKS = 1; } + try { + vPriceWeekOldFetch = await poolContract.methods.get_virtual_price().call('', latest - (DAY_BLOCKS * 7)) + } catch (e) { + vPriceWeekOldFetch = vPriceDayOldFetch + } + + rateDaily = (vPriceFetch - vPriceDayOldFetch) / vPriceDayOldFetch; + rateWeekly = (vPriceFetch - vPriceWeekOldFetch) / vPriceWeekOldFetch; + + const apy = (((1 + rateDaily) ** 365) - 1) * 100; + const apyWeekly = (((1 + rateWeekly) ** (365 / 7)) - 1) * 100; - poolDetails.push({ + let events = await poolContract.getPastEvents(eventName, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) + events.map(async (trade) => { + + let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] + volume += t + + // if (t > 1000000) { + // console.log('$',t, trade.transactionHash) + // } + }) + + const apyFormatted = `${apy.toFixed(2)}%` + totalVolume += volume + let p = { index, - poolAddress: pool.address, - poolSymbol: pool.symbol, - apyFormatted: `${poolStats.latestDailyApy.toFixed(2)}%`, - apy: poolStats.latestDailyApy, - apyWeekly: poolStats.latestWeeklyApy, - virtualPrice: poolStats.virtualPrice, - volume: version === 2 ? poolStats.rawVolume : poolStats.volumeUSD, // Facto pools historically have usd volume there, keeping this inconsistency to avoid breakage - ...(version === 2 ? { usdVolume: poolStats.volumeUSD } : {}), // Attach usd volume for facto pools - }); + 'poolAddress': pool.address, + 'poolSymbol': version === 1 ? pool.token.symbol : pool.symbol, + apyFormatted, + apy, + apyWeekly, + 'virtualPrice': vPriceFetch, + volume, + } + poolDetails.push(p) + }) + ) + } else { + const { data: { poolList: poolsStats } } = await (await fetch('http://localhost:3000/api/getSubgraphData/ethereum')).json(); + poolData.forEach((pool, index) => { + const lcSwapAddress = pool.address.toLowerCase(); + const poolStats = poolsStats.find(({ address }) => address.toLowerCase() === lcSwapAddress); + + if (!poolStats) { + const errorMessage = `Couldn't find pool address ${pool.address} in subgraph stats data`; + + if (IS_DEV) throw new Error(errorMessage); + else console.error(errorMessage); + } + + poolDetails.push({ + index, + poolAddress: pool.address, + poolSymbol: pool.symbol, + apyFormatted: `${poolStats.latestDailyApy.toFixed(2)}%`, + apy: poolStats.latestDailyApy, + apyWeekly: poolStats.latestWeeklyApy, + virtualPrice: poolStats.virtualPrice, + volume: version === 2 ? poolStats.rawVolume : poolStats.volumeUSD, // Facto pools historically have usd volume there, keeping this inconsistency to avoid breakage + ...(version === 2 ? { usdVolume: poolStats.volumeUSD } : {}), // Attach usd volume for facto pools }); + }); - totalVolume = sum(poolDetails.map(({ volume }) => volume)); - } + totalVolume = sum(poolDetails.map(({ volume }) => volume)); + } - poolDetails.sort((a,b) => (a.index > b.index) ? 1 : ((b.index > a.index) ? -1 : 0)) + poolDetails.sort((a, b) => (a.index > b.index) ? 1 : ((b.index > a.index) ? -1 : 0)) - return { poolDetails, totalVolume }; + return { poolDetails, totalVolume }; }, { maxAge: 30, // 30s diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index 578d67bb..9923f88f 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -220,8 +220,8 @@ export default fn(async ({ blockchainId }) => { return { ...pool, - latestDailyApy: BN(latestDailyApy).plus(BN(underlyingPool.latestDailyApy).div(3)).toFixed(), - latestWeeklyApy: BN(latestWeeklyApy).plus(BN(underlyingPool.latestWeeklyApy).div(3)).toFixed(), + latestDailyApy: BN(latestDailyApy).plus(BN(underlyingPool.latestDailyApy).div(3)).toNumber(), + latestWeeklyApy: BN(latestWeeklyApy).plus(BN(underlyingPool.latestWeeklyApy).div(3)).toNumber(), } } @@ -287,8 +287,8 @@ export default fn(async ({ blockchainId }) => { return { ...pool, - latestDailyApy: BN(pool.latestDailyApy).plus(sumBN(additionalApysPcentFromLsds)).toFixed(), - latestWeeklyApy: BN(pool.latestWeeklyApy).plus(sumBN(additionalApysPcentFromLsds)).toFixed(), + latestDailyApy: BN(pool.latestDailyApy).plus(sumBN(additionalApysPcentFromLsds)).toNumber(), + latestWeeklyApy: BN(pool.latestWeeklyApy).plus(sumBN(additionalApysPcentFromLsds)).toNumber(), } }); From 6f7f27ac0739d3dcec052b77c9a813069032e720 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 8 Jul 2023 14:07:30 +0200 Subject: [PATCH 13/83] Fix url --- pages/api/getFactoryAPYs/ethereum.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/api/getFactoryAPYs/ethereum.js b/pages/api/getFactoryAPYs/ethereum.js index b3f49f90..45a4081a 100644 --- a/pages/api/getFactoryAPYs/ethereum.js +++ b/pages/api/getFactoryAPYs/ethereum.js @@ -34,7 +34,7 @@ export default fn(async ({ version }) => { version === 'crypto' ? 'getPools/ethereum/factory-crypto' : undefined ); - const { data: { poolData } } = await (await fetch(`http://localhost:3000/api/${factoryPoolsApiEndpoint}`)).json() + const { data: { poolData } } = await (await fetch(`https://api.curve.fi/api/${factoryPoolsApiEndpoint}`)).json() let poolDetails = []; let totalVolume = 0 @@ -122,7 +122,7 @@ export default fn(async ({ version }) => { }) ) } else { - const { data: { poolList: poolsStats } } = await (await fetch('http://localhost:3000/api/getSubgraphData/ethereum')).json(); + const { data: { poolList: poolsStats } } = await (await fetch('https://api.curve.fi/api/getSubgraphData/ethereum')).json(); poolData.forEach((pool, index) => { const lcSwapAddress = pool.address.toLowerCase(); const poolStats = poolsStats.find(({ address }) => address.toLowerCase() === lcSwapAddress); From 9259fba064bb6e73f74e6873d5f383befa27215c Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 8 Jul 2023 15:29:23 +0200 Subject: [PATCH 14/83] Silently ignore broken pools in subgraph data --- pages/api/getSubgraphData/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index 9923f88f..8c0bde5d 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -263,7 +263,10 @@ export default fn(async ({ blockchainId }) => { * Add additional ETH staking APY to pools containing ETH LSDs */ poolList = poolList.map((pool) => { - const { usesRateOracle, coins, usdTotal } = getPoolByAddress(pool.address); + const poolData = getPoolByAddress(pool.address); + if (!poolData) return pool; // Some broken/ignored pools might still be picked up by the subgraph + + const { usesRateOracle, coins, usdTotal } = poolData; const needsAdditionalLsdAssetApy = ( !usesRateOracle && coins.some(({ ethLsdApy }) => typeof ethLsdApy !== 'undefined') From ef3b8ff736f8302a1f1983da397371f31db220c3 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 8 Jul 2023 19:21:48 +0200 Subject: [PATCH 15/83] Add wsteth to list of lsd apys --- utils/data/getETHLSDAPYs.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/utils/data/getETHLSDAPYs.js b/utils/data/getETHLSDAPYs.js index ca1c9630..d3c00c27 100644 --- a/utils/data/getETHLSDAPYs.js +++ b/utils/data/getETHLSDAPYs.js @@ -5,16 +5,28 @@ import Request from 'utils/Request'; const FALLBACK_RETURN_VALUE = {}; +const MIRROR_REPRESENTATIONS = [ + [lc('0xae7ab96520de3a18e5e111b5eaab095312d7fe84'), lc('0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0')], // stETH <> wstETH +]; + // Returns a map of ETH LSD address <> staking apy const getETHLSDAPYs = memoize(async () => { try { const { success, data } = await (await Request.get('https://api.cryptostats.community/api/v1/eth-staking-pools/apy?metadata=true')).json(); if (!success) return FALLBACK_RETURN_VALUE; - return arrayToHashmap(data.map(({ metadata: { tokenAddress }, results: { apy } }) => [ + const map = arrayToHashmap(data.map(({ metadata: { tokenAddress }, results: { apy } }) => [ lc(tokenAddress), apy, ])); + + return { + ...map, + ...arrayToHashmap(MIRROR_REPRESENTATIONS.map(([a, b]) => [ + b, + map[a], + ])), + }; } catch (err) { return FALLBACK_RETURN_VALUE; } From 24f84253225951f20d3f872f2e2b745b354d9738 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 8 Jul 2023 19:41:01 +0200 Subject: [PATCH 16/83] Further lsd apy tweaks --- utils/data/getETHLSDAPYs.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/utils/data/getETHLSDAPYs.js b/utils/data/getETHLSDAPYs.js index d3c00c27..ddf8215f 100644 --- a/utils/data/getETHLSDAPYs.js +++ b/utils/data/getETHLSDAPYs.js @@ -5,8 +5,12 @@ import Request from 'utils/Request'; const FALLBACK_RETURN_VALUE = {}; +const REPRESENTATIONS = { + [lc('0xae7ab96520de3a18e5e111b5eaab095312d7fe84')]: lc('0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0'), // stETH <> wstETH +}; + const MIRROR_REPRESENTATIONS = [ - [lc('0xae7ab96520de3a18e5e111b5eaab095312d7fe84'), lc('0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0')], // stETH <> wstETH + [lc('0x5e8422345238f34275888049021821e8e08caa1f'), lc('0xac3e018457b222d93114458476f3e3416abbe38f')], // frxETH <> sfrxETH ]; // Returns a map of ETH LSD address <> staking apy @@ -16,7 +20,7 @@ const getETHLSDAPYs = memoize(async () => { if (!success) return FALLBACK_RETURN_VALUE; const map = arrayToHashmap(data.map(({ metadata: { tokenAddress }, results: { apy } }) => [ - lc(tokenAddress), + (REPRESENTATIONS[lc(tokenAddress)] || lc(tokenAddress)), apy, ])); From e670012e2dab126cd7613a2e8fda96b5f10c6f01 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 8 Jul 2023 22:06:23 +0200 Subject: [PATCH 17/83] fix --- utils/data/getETHLSDAPYs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/data/getETHLSDAPYs.js b/utils/data/getETHLSDAPYs.js index ddf8215f..e7365b17 100644 --- a/utils/data/getETHLSDAPYs.js +++ b/utils/data/getETHLSDAPYs.js @@ -7,10 +7,11 @@ const FALLBACK_RETURN_VALUE = {}; const REPRESENTATIONS = { [lc('0xae7ab96520de3a18e5e111b5eaab095312d7fe84')]: lc('0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0'), // stETH <> wstETH + [lc('0x5e8422345238f34275888049021821e8e08caa1f')]: lc('0xac3e018457b222d93114458476f3e3416abbe38f'), // frxETH <> sfrxETH }; const MIRROR_REPRESENTATIONS = [ - [lc('0x5e8422345238f34275888049021821e8e08caa1f'), lc('0xac3e018457b222d93114458476f3e3416abbe38f')], // frxETH <> sfrxETH + ]; // Returns a map of ETH LSD address <> staking apy From d044e54862e67421d3f374b81f3b26c18509bb90 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 10 Jul 2023 13:01:02 +0200 Subject: [PATCH 18/83] Only use pools above 5k usd tvl for price derivation method 2 --- pages/api/getPools/_utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/api/getPools/_utils.js b/pages/api/getPools/_utils.js index e0e02719..f2e75519 100644 --- a/pages/api/getPools/_utils.js +++ b/pages/api/getPools/_utils.js @@ -80,7 +80,7 @@ const deriveMissingCoinPricesSinglePass = async ({ * of obscureUsd to fill in its usdPrice in the currently iterated-on pool) */ const otherPoolsCoinsAddressesAndPricesMap = arrayToHashmap(flattenArray(otherPools.map((pool) => ( - pool.coins ? + (pool.coins && pool.usdTotal > 5000) ? pool.coins.filter(({ usdPrice }) => usdPrice !== null) : [] // Pools at higher indices do not have a coins prop yet ).map(({ address, usdPrice }) => [address, usdPrice])))); From bd64ff65c8d8c9ea1d3ab92745037f834efbfb81 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 10 Jul 2023 13:01:27 +0200 Subject: [PATCH 19/83] Linting --- pages/api/getMainPoolsGaugeRewards.js | 34 ++++++++-------- pages/api/getMainRegistryPools.js | 3 +- pages/api/getMainRegistryPoolsAndLpTokens.js | 43 ++++++++++---------- pages/api/getPools/[...params].js | 1 + utils/api.js | 12 ++++-- 5 files changed, 51 insertions(+), 42 deletions(-) diff --git a/pages/api/getMainPoolsGaugeRewards.js b/pages/api/getMainPoolsGaugeRewards.js index 78a24eae..af7eabee 100644 --- a/pages/api/getMainPoolsGaugeRewards.js +++ b/pages/api/getMainPoolsGaugeRewards.js @@ -60,7 +60,7 @@ const FACTORY_GAUGES_ADDED_TO_MAIN_LIST_ADDRESSES_REF_ASSET_PRICE = { }; // eslint-disable-next-line -const GAUGES_PARTIAL_ABI = [{"name":"reward_contract","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2051},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1691},{"stateMutability":"view","type":"function","name":"reward_tokens","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3787},{"name":"rewarded_token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2201}]; +const GAUGES_PARTIAL_ABI = [{ "name": "reward_contract", "outputs": [{ "type": "address", "name": "" }], "inputs": [], "stateMutability": "view", "type": "function", "gas": 2051 }, { "name": "totalSupply", "outputs": [{ "type": "uint256", "name": "" }], "inputs": [], "stateMutability": "view", "type": "function", "gas": 1691 }, { "stateMutability": "view", "type": "function", "name": "reward_tokens", "inputs": [{ "name": "arg0", "type": "uint256" }], "outputs": [{ "name": "", "type": "address" }], "gas": 3787 }, { "name": "rewarded_token", "outputs": [{ "type": "address", "name": "" }], "inputs": [], "stateMutability": "view", "type": "function", "gas": 2201 }]; export default fn(async (gauges) => { if (typeof gauges === 'undefined') { @@ -70,7 +70,7 @@ export default fn(async (gauges) => { //empty gauges cause reverts const remove = [ - 'eurtusd', // Todo adapt script to this new type of gauges + 'eurtusd', // Todo adapt script to this new type of gauges 'eursusd', // Todo adapt script to this new type of gauges 'crveth', // Todo adapt script to this new type of gauges 'cvxeth', // Todo adapt script to this new type of gauges @@ -89,10 +89,10 @@ export default fn(async (gauges) => { address: gauge, version: ( V0_GAUGES_ADDRESSES.includes(gauge) ? null : - FACTORY_GAUGES_ADDED_TO_MAIN_LIST_ADDRESSES.includes(gauge.toLowerCase()) ? 'factory' : - name === 'ankreth' ? 'v-rewarddata' : // Uses the rewardData implementation - i < 18 ? 'v1' : - 'v2' + FACTORY_GAUGES_ADDED_TO_MAIN_LIST_ADDRESSES.includes(gauge.toLowerCase()) ? 'factory' : + name === 'ankreth' ? 'v-rewarddata' : // Uses the rewardData implementation + i < 18 ? 'v1' : + 'v2' ), })); @@ -119,13 +119,13 @@ export default fn(async (gauges) => { methodName: 'rewarded_token', metaData: { address, type: 'rewardToken' }, }] : - [...Array(Number(REWARDS_CONFIG[version].maxRewardCount)).keys()].map((rewardIndex) => ({ - address, - abi: GAUGES_PARTIAL_ABI, - methodName: 'reward_tokens', - params: [rewardIndex], - metaData: { address, type: 'rewardToken' }, - })) + [...Array(Number(REWARDS_CONFIG[version].maxRewardCount)).keys()].map((rewardIndex) => ({ + address, + abi: GAUGES_PARTIAL_ABI, + methodName: 'reward_tokens', + params: [rewardIndex], + metaData: { address, type: 'rewardToken' }, + })) )]) )); @@ -283,9 +283,9 @@ export default fn(async (gauges) => { rewardRate, periodFinish, ] = [ - rewardDataForContractToken.find(({ metaData: { type } }) => type === 'rewardRate').data, - rewardDataForContractToken.find(({ metaData: { type } }) => type === 'periodFinish').data, - ]; + rewardDataForContractToken.find(({ metaData: { type } }) => type === 'rewardRate').data, + rewardDataForContractToken.find(({ metaData: { type } }) => type === 'periodFinish').data, + ]; rate = rewardRate / 1e18; rewardPeriodFinish = periodFinish; @@ -348,5 +348,7 @@ export default fn(async (gauges) => { return { mainPoolsGaugeRewards: groupBy(mergedRewardsInfo, 'gaugeAddress') }; }, { + name: 'getMainPoolsGaugeRewards', + silenceParamsLog: true, maxAge: 5 * 60, // 5 min }); diff --git a/pages/api/getMainRegistryPools.js b/pages/api/getMainRegistryPools.js index dfb6a133..a99fda39 100644 --- a/pages/api/getMainRegistryPools.js +++ b/pages/api/getMainRegistryPools.js @@ -31,9 +31,10 @@ export default fn(async ({ blockchainId } = {}) => { const poolList = aggcalls[1].map((hex) => web3.eth.abi.decodeParameter('address', hex)); - return { poolList }; + return { poolList }; }, { maxAge: 3600, // 1 hour + name: 'getMainRegistryPools', normalizer: ([{ blockchainId } = {}]) => blockchainId, }); diff --git a/pages/api/getMainRegistryPoolsAndLpTokens.js b/pages/api/getMainRegistryPoolsAndLpTokens.js index 1f14a82c..c1db398e 100644 --- a/pages/api/getMainRegistryPoolsAndLpTokens.js +++ b/pages/api/getMainRegistryPoolsAndLpTokens.js @@ -26,31 +26,32 @@ export default fn(async ({ blockchainId } = {}) => { lpTokenAddress: ( /* [start] Hardcode the lp tokens because their pools don't have an lp_token/similar method */ (blockchainId === 'ethereum' && address.toLowerCase() === '0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7') ? '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490' : // ethereum 3crv - (blockchainId === 'ethereum' && address.toLowerCase() === '0x7fc77b5c7614e1533320ea6ddc2eb61fa00a9714') ? '0x075b1bb99792c9E1041bA13afEf80C91a1e70fB3' : // ethereum renbtc - (blockchainId === 'ethereum' && address.toLowerCase() === '0xa5407eae9ba41422680e2e00537571bcc53efbfd') ? '0xC25a3A3b969415c80451098fa907EC722572917F' : // ethereum susd - (blockchainId === 'ethereum' && address.toLowerCase() === '0x79a8c46dea5ada233abaffd40f3a0a2b1e5a4f27') ? '0x3B3Ac5386837Dc563660FB6a0937DFAa5924333B' : // ethereum busd - (blockchainId === 'ethereum' && address.toLowerCase() === '0xa2b47e3d5c44877cca798226b7b8118f9bfb7a56') ? '0x845838DF265Dcd2c412A1Dc9e959c7d08537f8a2' : // ethereum compound - (blockchainId === 'ethereum' && address.toLowerCase() === '0x4ca9b3063ec5866a4b82e437059d2c43d1be596f') ? '0xb19059ebb43466C323583928285a49f558E572Fd' : // ethereum hbtc - (blockchainId === 'ethereum' && address.toLowerCase() === '0x06364f10b501e868329afbc005b3492902d6c763') ? '0xD905e2eaeBe188fc92179b6350807D8bd91Db0D8' : // ethereum pax - (blockchainId === 'ethereum' && address.toLowerCase() === '0x93054188d876f558f4a66b2ef1d97d16edf0895b') ? '0x49849C98ae39Fff122806C06791Fa73784FB3675' : // ethereum ren - (blockchainId === 'ethereum' && address.toLowerCase() === '0xc5424b857f758e906013f3555dad202e4bdb4567') ? '0xA3D87FffcE63B53E0d54fAa1cc983B7eB0b74A9c' : // ethereum seth - (blockchainId === 'ethereum' && address.toLowerCase() === '0x52ea46506b9cc5ef470c5bf89f17dc28bb35d85c') ? '0x9fC689CCaDa600B6DF723D9E47D84d76664a1F23' : // ethereum usdt - (blockchainId === 'ethereum' && address.toLowerCase() === '0x45f783cce6b7ff23b2ab2d70e416cdb7d6055f51') ? '0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8' : // ethereum y - (blockchainId === 'ethereum' && address.toLowerCase() === '0x8038c01a0390a8c547446a0b2c18fc9aefecc10c') ? '0x3a664Ab939FD8482048609f652f9a0B0677337B9' : // ethereum dusd - (blockchainId === 'ethereum' && address.toLowerCase() === '0x4f062658eaaf2c1ccf8c8e36d6824cdf41167956') ? '0xD2967f45c4f384DEEa880F807Be904762a3DeA07' : // ethereum gusd - (blockchainId === 'ethereum' && address.toLowerCase() === '0x3ef6a01a0f81d6046290f3e2a8c5b843e738e604') ? '0x5B5CFE992AdAC0C9D48E05854B2d91C73a003858' : // ethereum husd - (blockchainId === 'ethereum' && address.toLowerCase() === '0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171') ? '0x6D65b498cb23deAba52db31c93Da9BFFb340FB8F' : // ethereum linkusd - (blockchainId === 'ethereum' && address.toLowerCase() === '0x8474ddbe98f5aa3179b3b3f5942d724afcdec9f6') ? '0x1AEf73d49Dedc4b1778d0706583995958Dc862e6' : // ethereum musd - (blockchainId === 'ethereum' && address.toLowerCase() === '0xc18cc39da8b11da8c3541c598ee022258f9744da') ? '0xC2Ee6b0334C261ED60C72f6054450b61B8f18E35' : // ethereum rsv - (blockchainId === 'ethereum' && address.toLowerCase() === '0x3e01dd8a5e1fb3481f0f589056b428fc308af0fb') ? '0x97E2768e8E73511cA874545DC5Ff8067eB19B787' : // ethereum usdk - (blockchainId === 'ethereum' && address.toLowerCase() === '0x0f9cb53ebe405d49a0bbdbd291a65ff571bc83e1') ? '0x4f3E8F405CF5aFC05D68142F3783bDfE13811522' : // ethereum usdn - /* [end] Hardcode the lp tokens because their pools don't have an lp_token/similar method */ - lpTokenAddresses[i] === ZERO_ADDRESS ? address : - lpTokenAddresses[i] + (blockchainId === 'ethereum' && address.toLowerCase() === '0x7fc77b5c7614e1533320ea6ddc2eb61fa00a9714') ? '0x075b1bb99792c9E1041bA13afEf80C91a1e70fB3' : // ethereum renbtc + (blockchainId === 'ethereum' && address.toLowerCase() === '0xa5407eae9ba41422680e2e00537571bcc53efbfd') ? '0xC25a3A3b969415c80451098fa907EC722572917F' : // ethereum susd + (blockchainId === 'ethereum' && address.toLowerCase() === '0x79a8c46dea5ada233abaffd40f3a0a2b1e5a4f27') ? '0x3B3Ac5386837Dc563660FB6a0937DFAa5924333B' : // ethereum busd + (blockchainId === 'ethereum' && address.toLowerCase() === '0xa2b47e3d5c44877cca798226b7b8118f9bfb7a56') ? '0x845838DF265Dcd2c412A1Dc9e959c7d08537f8a2' : // ethereum compound + (blockchainId === 'ethereum' && address.toLowerCase() === '0x4ca9b3063ec5866a4b82e437059d2c43d1be596f') ? '0xb19059ebb43466C323583928285a49f558E572Fd' : // ethereum hbtc + (blockchainId === 'ethereum' && address.toLowerCase() === '0x06364f10b501e868329afbc005b3492902d6c763') ? '0xD905e2eaeBe188fc92179b6350807D8bd91Db0D8' : // ethereum pax + (blockchainId === 'ethereum' && address.toLowerCase() === '0x93054188d876f558f4a66b2ef1d97d16edf0895b') ? '0x49849C98ae39Fff122806C06791Fa73784FB3675' : // ethereum ren + (blockchainId === 'ethereum' && address.toLowerCase() === '0xc5424b857f758e906013f3555dad202e4bdb4567') ? '0xA3D87FffcE63B53E0d54fAa1cc983B7eB0b74A9c' : // ethereum seth + (blockchainId === 'ethereum' && address.toLowerCase() === '0x52ea46506b9cc5ef470c5bf89f17dc28bb35d85c') ? '0x9fC689CCaDa600B6DF723D9E47D84d76664a1F23' : // ethereum usdt + (blockchainId === 'ethereum' && address.toLowerCase() === '0x45f783cce6b7ff23b2ab2d70e416cdb7d6055f51') ? '0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8' : // ethereum y + (blockchainId === 'ethereum' && address.toLowerCase() === '0x8038c01a0390a8c547446a0b2c18fc9aefecc10c') ? '0x3a664Ab939FD8482048609f652f9a0B0677337B9' : // ethereum dusd + (blockchainId === 'ethereum' && address.toLowerCase() === '0x4f062658eaaf2c1ccf8c8e36d6824cdf41167956') ? '0xD2967f45c4f384DEEa880F807Be904762a3DeA07' : // ethereum gusd + (blockchainId === 'ethereum' && address.toLowerCase() === '0x3ef6a01a0f81d6046290f3e2a8c5b843e738e604') ? '0x5B5CFE992AdAC0C9D48E05854B2d91C73a003858' : // ethereum husd + (blockchainId === 'ethereum' && address.toLowerCase() === '0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171') ? '0x6D65b498cb23deAba52db31c93Da9BFFb340FB8F' : // ethereum linkusd + (blockchainId === 'ethereum' && address.toLowerCase() === '0x8474ddbe98f5aa3179b3b3f5942d724afcdec9f6') ? '0x1AEf73d49Dedc4b1778d0706583995958Dc862e6' : // ethereum musd + (blockchainId === 'ethereum' && address.toLowerCase() === '0xc18cc39da8b11da8c3541c598ee022258f9744da') ? '0xC2Ee6b0334C261ED60C72f6054450b61B8f18E35' : // ethereum rsv + (blockchainId === 'ethereum' && address.toLowerCase() === '0x3e01dd8a5e1fb3481f0f589056b428fc308af0fb') ? '0x97E2768e8E73511cA874545DC5Ff8067eB19B787' : // ethereum usdk + (blockchainId === 'ethereum' && address.toLowerCase() === '0x0f9cb53ebe405d49a0bbdbd291a65ff571bc83e1') ? '0x4f3E8F405CF5aFC05D68142F3783bDfE13811522' : // ethereum usdn + /* [end] Hardcode the lp tokens because their pools don't have an lp_token/similar method */ + lpTokenAddresses[i] === ZERO_ADDRESS ? address : + lpTokenAddresses[i] ), })), }); }, { maxAge: 3600, // 1 hour + name: 'getMainRegistryPoolsAndLpTokens', normalizer: ([{ blockchainId } = {}]) => blockchainId, }); diff --git a/pages/api/getPools/[...params].js b/pages/api/getPools/[...params].js index b0d11f36..273de7bf 100644 --- a/pages/api/getPools/[...params].js +++ b/pages/api/getPools/[...params].js @@ -5,4 +5,5 @@ export default fn(async ({ params: [blockchainId, registryId] }) => ( getPoolsApiFn.straightCall({ blockchainId, registryId }) ), { maxAge: 60, + name: 'getPools[...params]', }); diff --git a/utils/api.js b/utils/api.js index 313c0f7c..8f29cb68 100644 --- a/utils/api.js +++ b/utils/api.js @@ -19,13 +19,16 @@ const addGeneratedTime = async (res) => ({ generatedTimeMs: getNowMs(), }); -const logRuntime = async (fn, name, query) => { +const logRuntime = async (fn, name, query, silenceParamsLog) => { const startMs = getNowMs(); const res = await fn(); const endMs = getNowMs(); - if (IS_DEV) console.log('Run time (ms):', endMs - startMs, name, query); + if (IS_DEV) { + const queryText = silenceParamsLog ? 'QUERY_LOGGING_SILENCED' : query; + console.log('Run time (ms):', endMs - startMs, name, queryText); + } return res; }; @@ -35,15 +38,16 @@ const fn = (cb, options = {}) => { maxAge: maxAgeSec = null, // Caching duration, in seconds name = null, // Name, used for logging purposes returnFlatData = false, + silenceParamsLog = false, // Don't log params (can be used because the fn is passed a huge object that creates noise) } = options; const callback = maxAgeSec !== null ? - memoize(async (query) => logRuntime(() => addGeneratedTime(cb(query)), name, query), { + memoize(async (query) => logRuntime(() => addGeneratedTime(cb(query)), name, query, silenceParamsLog), { promise: true, maxAge: maxAgeSec * 1000, normalizer: ([query]) => JSON.stringify(query), // Separate cache entries for each route & query params, }) : - async (query) => logRuntime(() => addGeneratedTime(cb(query)), name, query); + async (query) => logRuntime(() => addGeneratedTime(cb(query)), name, query, silenceParamsLog); const apiCall = async (req, res) => ( Promise.resolve(callback(req.query)) From d07da7bd540409f8cfa0a38c40419514b6a823a0 Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 14 Jul 2023 15:54:42 +0200 Subject: [PATCH 20/83] Add hidden pool --- pages/api/getHiddenPools.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/api/getHiddenPools.js b/pages/api/getHiddenPools.js index 439b9432..d91d50eb 100644 --- a/pages/api/getHiddenPools.js +++ b/pages/api/getHiddenPools.js @@ -23,6 +23,7 @@ const HIDDEN_POOLS_IDS = { 'factory-crypto-1', // price borked 'factory-crypto-2', // price borked 'factory-crypto-49', // broken + 'factory-crypto-265', // broken ], fantom: [ 'factory-v2-2', // Exact duplicate of another facto pool, with 0 liquidity From 199a914adf5c3fb842e3a714f3d18b1bbd6e69d3 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 15 Jul 2023 13:57:21 +0200 Subject: [PATCH 21/83] Use crvusd price aggregator as price source --- constants/abis/AggregatorStablePrice.json | 272 ++++++++++++++++++++++ pages/api/getPools/index.js | 8 + utils/data/getCrvusdPrice.js | 26 +++ 3 files changed, 306 insertions(+) create mode 100644 constants/abis/AggregatorStablePrice.json create mode 100644 utils/data/getCrvusdPrice.js diff --git a/constants/abis/AggregatorStablePrice.json b/constants/abis/AggregatorStablePrice.json new file mode 100644 index 00000000..3fed7927 --- /dev/null +++ b/constants/abis/AggregatorStablePrice.json @@ -0,0 +1,272 @@ +[ + { + "name": "AddPricePair", + "inputs": [ + { + "name": "n", + "type": "uint256", + "indexed": false + }, + { + "name": "pool", + "type": "address", + "indexed": false + }, + { + "name": "is_inverse", + "type": "bool", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "RemovePricePair", + "inputs": [ + { + "name": "n", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "MovePricePair", + "inputs": [ + { + "name": "n_from", + "type": "uint256", + "indexed": false + }, + { + "name": "n_to", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "SetAdmin", + "inputs": [ + { + "name": "admin", + "type": "address", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "constructor", + "inputs": [ + { + "name": "stablecoin", + "type": "address" + }, + { + "name": "sigma", + "type": "uint256" + }, + { + "name": "admin", + "type": "address" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "set_admin", + "inputs": [ + { + "name": "_admin", + "type": "address" + } + ], + "outputs": [] + }, + { + "stateMutability": "view", + "type": "function", + "name": "sigma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "stablecoin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "add_price_pair", + "inputs": [ + { + "name": "_pool", + "type": "address" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_price_pair", + "inputs": [ + { + "name": "n", + "type": "uint256" + } + ], + "outputs": [] + }, + { + "stateMutability": "view", + "type": "function", + "name": "ema_tvl", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256[]" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "price", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "price_w", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "price_pairs", + "inputs": [ + { + "name": "arg0", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "pool", + "type": "address" + }, + { + "name": "is_inverse", + "type": "bool" + } + ] + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "last_timestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "last_tvl", + "inputs": [ + { + "name": "arg0", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "TVL_MA_TIME", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "last_price", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "admin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + } +] diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 98f65046..abfef676 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -34,6 +34,7 @@ import { getRegistry } from 'utils/getters'; import getAssetsPrices from 'utils/data/assets-prices'; import getTokensPrices from 'utils/data/tokens-prices'; import getYcTokenPrices from 'utils/data/getYcTokenPrices'; +import getCrvusdPrice from 'utils/data/getCrvusdPrice'; import getETHLSDAPYs from 'utils/data/getETHLSDAPYs'; import getTempleTokenPrices from 'utils/data/getTempleTokenPrices'; import getEywaTokenPrices from 'utils/data/getEywaTokenPrices'; @@ -727,6 +728,12 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ...coinAddressesAndPricesMapFallbackFromAddress, }; + const crvusdTokenAddresseAndPriceMapFallback = ( + blockchainId === 'ethereum' ? + await getCrvusdPrice(networkSettingsParam) : + {} + ); + const ycTokensAddressesAndPricesMapFallback = ( (blockchainId === 'ethereum' || blockchainId === 'fantom') ? await getYcTokenPrices(networkSettingsParam, blockchainId, coinAddressesAndPricesMapFallback) : @@ -826,6 +833,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) (IGNORED_COINS[blockchainId] || []).includes(coinAddress.toLowerCase()) ? 0 : ( + crvusdTokenAddresseAndPriceMapFallback[coinAddress.toLowerCase()] || otherRegistryTokensPricesMap[coinAddress.toLowerCase()] || mainRegistryLpTokensPricesMap[coinAddress.toLowerCase()] || coinAddressesAndPricesMapFallback[coinAddress.toLowerCase()] || diff --git a/utils/data/getCrvusdPrice.js b/utils/data/getCrvusdPrice.js new file mode 100644 index 00000000..27b45e14 --- /dev/null +++ b/utils/data/getCrvusdPrice.js @@ -0,0 +1,26 @@ +import memoize from 'memoizee'; +import { multiCall } from 'utils/Calls'; +import AGGREGATOR_STABLE_PRICE_ABI from 'constants/abis/AggregatorStablePrice.json'; + +const CRVUSD_ADDRESS = '0xf939e0a03fb07f59a73314e73794be0e57ac1b4e'; +const AGGREGATOR_STABLE_PRICE_ADDRESS = '0x18672b1b0c623a30089A280Ed9256379fb0E4E62'; + +const getCrvusdPrice = memoize(async ( + networkSettingsParam, +) => { + const [crvusdPrice] = await multiCall([{ + address: AGGREGATOR_STABLE_PRICE_ADDRESS, + abi: AGGREGATOR_STABLE_PRICE_ABI, + methodName: 'price', + ...networkSettingsParam, + }]); + + return { + [CRVUSD_ADDRESS.toLowerCase()]: (crvusdPrice / 1e18), + }; +}, { + promise: true, + maxAge: 1 * 60 * 1000, // 1 min +}); + +export default getCrvusdPrice; From 90c8e0213a165f6d6b400feec7c7d8b38224c08c Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 18 Jul 2023 12:47:36 +0200 Subject: [PATCH 22/83] Don't filter out killed child gauges --- pages/api/getFactoGauges/index.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pages/api/getFactoGauges/index.js b/pages/api/getFactoGauges/index.js index c49201c2..cc4a5634 100644 --- a/pages/api/getFactoGauges/index.js +++ b/pages/api/getFactoGauges/index.js @@ -9,6 +9,7 @@ import sideChainRootGauge from 'constants/abis/sidechain-root-gauge.json'; import gaugeControllerAbi from 'constants/abis/gauge_controller.json'; import factorypool3Abi from 'constants/abis/factory_swap.json'; import { multiCall } from 'utils/Calls'; +import { lc } from 'utils/String'; import { arrayToHashmap, arrayOfIncrements, flattenArray } from 'utils/Array'; import getPools from 'pages/api/getPools'; import configs from 'constants/configs'; @@ -76,10 +77,7 @@ export default fn(async ({ blockchainId }) => { methodName: 'is_killed', }))); - const gaugeList = unfilteredGaugeList.filter((address, index) => { - const isKilled = gaugesKilledInfo[index]; - return !isKilled; - }); + const gaugeList = unfilteredGaugeList; const weekSeconds = 86400 * 7; const nowTs = +Date.now() / 1000; @@ -326,6 +324,7 @@ export default fn(async ({ blockchainId }) => { Number(inflationRate) === 0 && !rewardsNeedNudging ), + isKilled: gaugesKilledInfo[unfilteredGaugeList.findIndex((gaugeAddress) => lc(gaugeAddress) === lc(address))], }; }); From 20caa87c27309379106dfe00837d95f722c33d60 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 18 Jul 2023 12:53:16 +0200 Subject: [PATCH 23/83] Fix --- pages/api/getAllGauges.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pages/api/getAllGauges.js b/pages/api/getAllGauges.js index 981f3b9e..536ec2f3 100644 --- a/pages/api/getAllGauges.js +++ b/pages/api/getAllGauges.js @@ -26,8 +26,8 @@ import GAUGE_ABI from '../../constants/abis/example_gauge_2.json'; import META_REGISTRY_ABI from '../../constants/abis/meta-registry.json'; /* eslint-disable object-curly-spacing, object-curly-newline, quote-props, quotes, key-spacing, comma-spacing */ -const GAUGE_IS_ROOT_GAUGE_ABI = [{"stateMutability":"view","type":"function","name":"bridger","inputs":[],"outputs":[{"name":"","type":"address"}]}]; -const GAUGE_IS_ROOT_GAUGE_2_ABI = [{"stateMutability":"view","type":"function","name":"emissions","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2778}]; +const GAUGE_IS_ROOT_GAUGE_ABI = [{ "stateMutability": "view", "type": "function", "name": "bridger", "inputs": [], "outputs": [{ "name": "", "type": "address" }] }]; +const GAUGE_IS_ROOT_GAUGE_2_ABI = [{ "stateMutability": "view", "type": "function", "name": "emissions", "inputs": [], "outputs": [{ "name": "", "type": "uint256" }], "gas": 2778 }]; /* eslint-enable object-curly-spacing, object-curly-newline, quote-props, quotes, key-spacing, comma-spacing */ const SIDECHAINS_WITH_FACTORY_GAUGES = [ @@ -396,6 +396,7 @@ export default fn(async ({ blockchainId } = {}) => { hasCrv, areCrvRewardsStuckInBridge, rewardsNeedNudging, + isKilled, }) => { const pool = getPoolByLpTokenAddress(swap_token, blockchainId); const name = getPoolName(pool); @@ -422,6 +423,7 @@ export default fn(async ({ blockchainId } = {}) => { inflation_rate, }, hasNoCrv: !hasCrv, + isKilled, lpTokenPrice, ...(blockchainId !== 'ethereum' ? { gaugeStatus: { From 20a46ffd02e0fcc7a889afad8366418f3fc2a487 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 18 Jul 2023 18:25:34 +0200 Subject: [PATCH 24/83] Fix case --- pages/api/getAllGauges.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/api/getAllGauges.js b/pages/api/getAllGauges.js index 536ec2f3..f00063e5 100644 --- a/pages/api/getAllGauges.js +++ b/pages/api/getAllGauges.js @@ -423,7 +423,7 @@ export default fn(async ({ blockchainId } = {}) => { inflation_rate, }, hasNoCrv: !hasCrv, - isKilled, + is_killed: isKilled, lpTokenPrice, ...(blockchainId !== 'ethereum' ? { gaugeStatus: { From 8a26a0cf9b319ddda60471b7fb8f699f628642ad Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 22 Jul 2023 00:39:38 +0200 Subject: [PATCH 25/83] Stop double-counting crvusd pools vol --- .../getSubgraphData/crvusd-mainnet-temp.js | 239 ------------------ pages/api/getSubgraphData/index.js | 31 +-- 2 files changed, 1 insertion(+), 269 deletions(-) delete mode 100644 pages/api/getSubgraphData/crvusd-mainnet-temp.js diff --git a/pages/api/getSubgraphData/crvusd-mainnet-temp.js b/pages/api/getSubgraphData/crvusd-mainnet-temp.js deleted file mode 100644 index 4e50fbff..00000000 --- a/pages/api/getSubgraphData/crvusd-mainnet-temp.js +++ /dev/null @@ -1,239 +0,0 @@ -import Web3 from 'web3'; -import BN from 'bignumber.js'; -import configs from 'constants/configs'; -import { BASE_API_DOMAIN } from 'constants/AppConstants'; -import { runConcurrentlyAtMost } from 'utils/Async'; -import getAllCurvePoolsData from 'utils/data/curve-pools-data'; - -const lc = (str) => str.toLowerCase(); - -// Pools for which volume data on the subgraph is incorrect, and needs -// to be overriden with a manual calculation. -const POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME = { - ethereum: [ - '0x84997FAFC913f1613F51Bb0E2b5854222900514B', - '0x2863a328a0b7fc6040f11614fa0728587db8e353', - ].map(lc), - polygon: [ - '0x7c1aa4989df27970381196d3ef32a7410e3f2748', - '0xB05475d2A99ec4f7fa9ff1Ffb0e65894d2A639f3', - '0x8914B29F7Bea602A183E89D6843EcB251D56D07e', - '0xa7C475FC82422F2E9cEfd6E6C9Ab4Ee9660cB421', - '0x9b3d675FDbe6a0935E8B7d1941bc6f78253549B7', - ].map(lc), -}; - -const crvusdPoolsAddresses = [ - '0x0cd6f267b2086bea681e922e19d40512511be538', - '0x2889302a794da87fbf1d6db415c1492194663d13', - '0x4dece678ceceb27446b35c672dc7d61f30bad69e', - '0x390f3595bca2df7d23783dfd126427cceb997bf4', - '0xca978a0528116dda3cba9acd3e68bc6191ca53d0', - '0x34d655069f4cac1547e4c8ca284ffff5ad4a8db0', - '0x58b94400bdad7b9ac8d5335e12ef96e8b4966b4a', - '0x7f86bf177dd4f3494b841a37e810a34dd56c829b', - '0xf5f5b97624542d72a9e06f04804bf81baa15e2b4', -].map(lc); - -export default async ({ blockchainId } = {}) => { - if (typeof blockchainId === 'undefined') blockchainId = 'ethereum'; // Default value - - const config = configs[blockchainId]; - const web3 = new Web3(config.rpcUrl); - - if (typeof config === 'undefined') { - throw new Error(`No factory data for blockchainId "${blockchainId}"`); - } - - const GRAPH_ENDPOINT = 'https://api.thegraph.com/subgraphs/name/convex-community/volume-mainnet-staging'; - const CURRENT_TIMESTAMP = Math.round(new Date().getTime() / 1000); - const TIMESTAMP_24H_AGO = CURRENT_TIMESTAMP - (25 * 3600); - - let subgraphHasErrors = false; - - const allPools = await getAllCurvePoolsData([blockchainId]); - const getPoolByAddress = (address) => ( - allPools.find((pool) => (lc(pool.address) === lc(address))) - ); - - const poolListData = await (await fetch(`${BASE_API_DOMAIN}/api/getPoolList/${blockchainId}`)).json() - let poolList = poolListData.data.poolList.filter(({ address }) => crvusdPoolsAddresses.includes(lc(address))) - let totalVolume = 0 - let cryptoVolume = 0 - - await runConcurrentlyAtMost(poolList.map((_, i) => async () => { - const poolAddress = lc(poolList[i].address); - - let POOL_QUERY = ` - { - swapVolumeSnapshots( - first: 1000, - orderBy: timestamp, - orderDirection: desc, - where: { - pool: "${poolAddress}" - timestamp_gt: ${TIMESTAMP_24H_AGO} - period: 3600 - } - ) - { - volume - volumeUSD - timestamp - count - } - } - ` - const res = await fetch(GRAPH_ENDPOINT, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query: POOL_QUERY }) - }) - - let data = await res.json() - let rollingDaySummedVolume = 0 - let rollingRawVolume = 0 - - subgraphHasErrors = data.errors?.length > 0; - if (!subgraphHasErrors) { - for (let i = 0; i < data.data.swapVolumeSnapshots.length; i++) { - const hourlyVolUSD = parseFloat(data.data.swapVolumeSnapshots[i].volumeUSD) - rollingDaySummedVolume = rollingDaySummedVolume + hourlyVolUSD - - const hourlyVol = parseFloat(data.data.swapVolumeSnapshots[i].volume) - rollingRawVolume = rollingRawVolume + hourlyVol - } - } - - const hasRawVolumeButNoUsdVolume = (rollingDaySummedVolume === 0 && rollingRawVolume > 0); - const needsFallbackUsdVolume = ( - hasRawVolumeButNoUsdVolume || - (POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME[blockchainId] || []).includes(poolAddress) - ); - - if (needsFallbackUsdVolume) { - const ILLIQUID_THRESHOLD = 100; - const poolData = getPoolByAddress(poolAddress); - const poolLpTokenPrice = ( - poolData.usdTotal > ILLIQUID_THRESHOLD ? - (poolData.usdTotal / (poolData.totalSupply / 1e18)) : - 0 - ); - const usdVolumeRectified = poolLpTokenPrice * rollingRawVolume; - - if (usdVolumeRectified > 0 || poolData.usdTotal <= ILLIQUID_THRESHOLD) { - rollingDaySummedVolume = usdVolumeRectified; - - console.log(`Missing usd volume from subgraph: derived using lp token price from getPools endpoint for pool ${poolAddress} (derived rolling day usd volume: ${usdVolumeRectified})`); - } - } - - if (blockchainId === 'ethereum' && (poolAddress === '0x141ace5fd4435fd341e396d579c91df99fed10d4' || poolAddress === '0x2863a328a0b7fc6040f11614fa0728587db8e353')) { - poolList[i].rawVolume = 0 - poolList[i].volumeUSD = 0 - } else { - poolList[i].rawVolume = rollingRawVolume - poolList[i].volumeUSD = rollingDaySummedVolume - } - - totalVolume += parseFloat(rollingDaySummedVolume) - cryptoVolume += (poolList[i].type.includes('crypto')) ? parseFloat(rollingDaySummedVolume) : 0 - - - const APY_QUERY = ` - { - dailyPoolSnapshots(first: 7, - orderBy: timestamp, - orderDirection: desc, - where: - {pool: "${poolList[i].address.toLowerCase()}"}) - { - baseApr - xcpProfit - xcpProfitA - virtualPrice - timestamp - } - } - `; - - const resAPY = await fetch(GRAPH_ENDPOINT, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ query: APY_QUERY }), - }); - - let dataAPY = await resAPY.json(); - - const snapshots = dataAPY?.data?.dailyPoolSnapshots?.map((a) => ({ - baseApr: +a.baseApr, - virtualPrice: +a.virtualPrice, - xcpProfit: a.xcpProfit ? +a.xcpProfit : undefined, - xcpProfitA: a.xcpProfitA ? +a.xcpProfitA : undefined, - timestamp: a.timestamp, - })) || []; - - let latestDailyApy = 0 - let latestWeeklyApy = 0 - if (snapshots.length >= 2) { - const isCryptoPool = snapshots[0].xcpProfit > 0; - - if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[1].xcpProfit !== 0) { - const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; - const dayOldProfit = ((snapshots[1].xcpProfit / 2) + (snapshots[1].xcpProfitA / 2) + 1e18) / 2; - const rateDaily = (currentProfit - dayOldProfit) / dayOldProfit; - latestDailyApy = ((rateDaily + 1) ** 365 - 1) * 100; - } else if (snapshots[1].virtualPrice !== 0) { - latestDailyApy = ((snapshots[0].baseApr + 1) ** 365 - 1) * 100; - } - } - if (snapshots.length > 6) { - const isCryptoPool = snapshots[0].xcpProfit > 0; - - if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[6].xcpProfit !== 0) { - const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; - const weekOldProfit = ((snapshots[6].xcpProfit / 2) + (snapshots[6].xcpProfitA / 2) + 1e18) / 2; - const rateWeekly = (currentProfit - weekOldProfit) / weekOldProfit; - latestWeeklyApy = ((rateWeekly + 1) ** 52 - 1) * 100; - } else if (snapshots[6].virtualPrice !== 0) { - const latestWeeklyRate = - (snapshots[0].virtualPrice - snapshots[6].virtualPrice) / - snapshots[0].virtualPrice; - latestWeeklyApy = ((latestWeeklyRate + 1) ** 52 - 1) * 100; - } - } - poolList[i].latestDailyApy = Math.min(latestDailyApy, 1e6); - poolList[i].latestWeeklyApy = Math.min(latestWeeklyApy, 1e6); - poolList[i].virtualPrice = snapshots[0] ? snapshots[0].virtualPrice : undefined; - - }), 10); - - // When a crypto pool uses a base pool lp as one of its underlying assets, apy calculations - // using xcp_profit need to add up 1/3rd of the underlying pool's base volume - if (config.CRYPTO_POOLS_WITH_BASE_POOLS) { - poolList = poolList.map((pool) => { - if (config.CRYPTO_POOLS_WITH_BASE_POOLS.has(pool.address)) { - const { latestDailyApy, latestWeeklyApy } = pool; - const underlyingPoolAddress = config.CRYPTO_POOLS_WITH_BASE_POOLS.get(pool.address); - const underlyingPool = poolList.find(({ address }) => address.toLowerCase() === underlyingPoolAddress.toLowerCase()); - if (!underlyingPool) { - console.error(`Couldn't find underlying pool for crypto pool ${pool.address}, hence couldn't add up its base apy`); - return pool; - } - - return { - ...pool, - latestDailyApy: BN(latestDailyApy).plus(BN(underlyingPool.latestDailyApy).div(3)).toFixed(), - latestWeeklyApy: BN(latestWeeklyApy).plus(BN(underlyingPool.latestWeeklyApy).div(3)).toFixed(), - } - } - - return pool; - }) - } - - - const cryptoShare = (cryptoVolume / totalVolume) * 100 - - return { poolList, totalVolume, cryptoVolume, cryptoShare, subgraphHasErrors } -}; diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index 8c0bde5d..1af2e6ef 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -134,6 +134,7 @@ export default fn(async ({ blockchainId }) => { } totalVolume += parseFloat(rollingDaySummedVolume) + console.log('totalVolume', totalVolume, rollingDaySummedVolume, parseFloat(rollingDaySummedVolume), poolAddress) cryptoVolume += (poolList[i].type.includes('crypto')) ? parseFloat(rollingDaySummedVolume) : 0 @@ -229,36 +230,6 @@ export default fn(async ({ blockchainId }) => { }) } - // [start] Temporary addition while main ethereum subgraph syncs new crvusd factory pools - if (blockchainId === 'ethereum') { - const getCrvusdData = (await import('./crvusd-mainnet-temp.js')).default; - const crvusdData = await getCrvusdData(); - - if (!crvusdData.subgraphHasErrors) { - const crvusdPoolsAddresses = [ - '0x0cd6f267b2086bea681e922e19d40512511be538', - '0x2889302a794da87fbf1d6db415c1492194663d13', - '0x4dece678ceceb27446b35c672dc7d61f30bad69e', - '0x390f3595bca2df7d23783dfd126427cceb997bf4', - '0xca978a0528116dda3cba9acd3e68bc6191ca53d0', - '0x34d655069f4cac1547e4c8ca284ffff5ad4a8db0', - '0x58b94400bdad7b9ac8d5335e12ef96e8b4966b4a', - '0x7f86bf177dd4f3494b841a37e810a34dd56c829b', - '0xf5f5b97624542d72a9e06f04804bf81baa15e2b4', - ].map(lc); - - poolList = ( - poolList - .filter(({ address }) => !crvusdPoolsAddresses.includes(lc(address))) - .concat(crvusdData.poolList) - ); - - totalVolume += crvusdData.totalVolume; - } - } - // [end] Temporary addition while main ethereum subgraph syncs latest crvusd factory pools - - /** * Add additional ETH staking APY to pools containing ETH LSDs */ From 6cb734f798b5de8b0f7a3dced05dd768db241335 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 30 Jul 2023 16:44:10 +0200 Subject: [PATCH 26/83] Fix polygon extra rewards defillama platform id --- utils/data/getFactoryV2SidechainGaugeRewards.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/data/getFactoryV2SidechainGaugeRewards.js b/utils/data/getFactoryV2SidechainGaugeRewards.js index 1b73dd46..afc81bfa 100644 --- a/utils/data/getFactoryV2SidechainGaugeRewards.js +++ b/utils/data/getFactoryV2SidechainGaugeRewards.js @@ -69,7 +69,7 @@ export default memoize(async ({ blockchainId, gauges }) => { rewardTokenAddress )); - const coinAddressesAndPricesMap = await getTokensPrices(uniq(rewardTokenAddresses), config.platformCoingeckoId); + const coinAddressesAndPricesMap = await getTokensPrices(uniq(rewardTokenAddresses), blockchainId); const coinsFallbackPrices = ( COIN_ADDRESS_COINGECKO_ID_MAP[blockchainId] ? From c1d95fec1587a93d6ac1bc5d43c578f22881658a Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 31 Jul 2023 12:48:01 +0200 Subject: [PATCH 27/83] Use external oracle for crv price for now --- constants/configs/configs.js | 35 +++++++++++++++++++++-------------- pages/api/getPools/index.js | 14 ++++++++++---- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 8b03a062..65925bed 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -1,5 +1,6 @@ import WEB3_CONSTANTS from 'constants/Web3'; import { CaseInsensitiveMap } from 'utils/Array'; +import { lc } from 'utils/String'; import { ZERO_ADDRESS } from 'utils/Web3'; const configs = { @@ -55,7 +56,13 @@ const configs = { getFactoryCrvusdRegistryAddress: async () => '0x4F8846Ae9380B90d2E71D5e3D042dff3E7ebb40d', getFactoryTricryptoRegistryAddress: async () => '0x0c0e5f2ff0ff18a3be9b835635039256dc4b4963', graphEndpoint: `https://api.thegraph.com/subgraphs/name/convex-community/volume-mainnet`, - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), + BROKEN_POOLS_ADDRESSES: [ + '0x8301ae4fc9c624d1d396cbdaa1ed877821d7c511', + '0xc4c319e2d4d66cca4464c0c2b32c9bd23ebe784e', + '0xc897b98272aa23714464ea2a0bd5180f1b8c0025', + '0x9848482da3ee3076165ce6497eda906e66bb85c5', + ].map(lc), }, polygon: { poolsBaseUrlOld: 'https://polygon.curve.fi/', @@ -108,7 +115,7 @@ const configs = { '0x1197Ae7F43695Be80127365b494E8BF850f4752A', // Broken pool '0x40caB7C05fc1686e198C8d6d6aA4aaCF77BE8590', // Broken pool '0x64FFf0e27c223097c824f9d9278eFD5B55c3430e', // Broken pool - ].map((a) => a.toLowerCase()), + ].map(lc), approxBlocksPerDay: 40000, // https://polygonscan.com/chart/blocks graphEndpoint: 'https://api.thegraph.com/subgraphs/name/convex-community/volume-matic', }, @@ -154,7 +161,7 @@ const configs = { ['0x5B5CFE992AdAC0C9D48E05854B2d91C73a003858', '0x2db0E83599a91b508Ac268a6197b8B14F5e72840'], // meta btc ['0x0fa949783947Bf6c1b171DB13AEACBB488845B3f', '0xD02a30d33153877BC20e5721ee53DeDEE0422B2F'], // meta usd2 ]), - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 95000, // https://ftmscan.com/chart/blocks graphEndpoint: 'https://api.thegraph.com/subgraphs/name/convex-community/volume-fantom' }, @@ -198,7 +205,7 @@ const configs = { ['0x7f90122bf0700f9e7e1f688fe926940e8839f353', '0xbF7E49483881C76487b0989CD7d9A8239B20CA41'], // meta usd ['0x3E01dD8a5E1fb3481F0F589056b428Fc308AF0Fb', '0xC2b1DF84112619D190193E48148000e3990Bf627'], // meta btc ]), - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), graphEndpoint: 'https://api.thegraph.com/subgraphs/name/convex-community/volume-arbitrum', }, avalanche: { @@ -243,7 +250,7 @@ const configs = { CRYPTO_POOLS_WITH_BASE_POOLS: new CaseInsensitiveMap([ ['0xB755B949C126C04e0348DD881a5cF55d424742B2', '0x7f90122BF0700F9E7e1F688fe926940E8839F353'], // atricrypto<>aave ]), - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), graphEndpoint: 'https://api.thegraph.com/subgraphs/name/convex-community/volume-avalanche', approxBlocksPerDay: 43000, }, @@ -282,7 +289,7 @@ const configs = { // BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([ // ['0x1337BedC9D22ecbe766dF105c9623922A27963EC', '0x5b5cfe992adac0c9d48e05854b2d91c73a003858'], // no gauge yet but will need to be added // ]) - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 43000, // https://optimistic.etherscan.io/chart/blocks graphEndpoint: 'https://api.thegraph.com/subgraphs/name/convex-community/volume-optimism', }, @@ -298,7 +305,7 @@ const configs = { rpcUrl: 'https://rpc.gnosis.gateway.fm', multicallAddress: '0xb5b692a88bdfc81ca69dcb1d924f59f0413a602a', multicall2Address: '0xFAa296891cA6CECAF2D86eF5F7590316d0A17dA0', - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 16900, getFactoryRegistryAddress: async () => '0xD19Baeadc667Cf2015e395f2B08668Ef120f41F5', getCryptoRegistryAddress: async () => '0x8A4694401bE8F8FCCbC542a3219aF1591f87CE17', @@ -332,7 +339,7 @@ const configs = { rpcUrl: 'https://mainnet.aurora.dev', multicallAddress: '0xace58a26b8Db90498eF0330fDC9C2655db0C45E2', multicall2Address: '0xace58a26b8Db90498eF0330fDC9C2655db0C45E2', - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 72000, // https://aurorascan.dev/chart/blocks getFactoryRegistryAddress: async () => ZERO_ADDRESS, getCryptoRegistryAddress: async () => ZERO_ADDRESS, @@ -350,7 +357,7 @@ const configs = { rpcUrl: 'https://rpc.s0.t.hmny.io', multicallAddress: '0x3E01dD8a5E1fb3481F0F589056b428Fc308AF0Fb', multicall2Address: '0x3E01dD8a5E1fb3481F0F589056b428Fc308AF0Fb', - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 43200, getCryptoRegistryAddress: async () => '', // Has one crypto pool but no crypto registry }, @@ -382,7 +389,7 @@ const configs = { ['0xe8269B33E47761f552E1a3070119560d5fa8bBD6'.toLowerCase(), 'plain4optimized'], ]), BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 7000, // https://moonscan.io/chart/blocks graphEndpoint: 'https://api.thegraph.com/subgraphs/name/convex-community/volume-moonbeam', }, @@ -414,7 +421,7 @@ const configs = { ['0x509495DFEEc3a53aCb2F60669985d868131Ad9a5'.toLowerCase(), 'plain4optimized'], ]), BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 13500, // https://explorer.kava.io/ }, celo: { @@ -446,7 +453,7 @@ const configs = { ['0xA73b02a97B45604cd9f0BBAA153eCfe01f409350'.toLowerCase(), 'plain4optimized'], ]), BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 17280, // https://celoscan.io/chart/blocks graphEndpoint: 'https://api.thegraph.com/subgraphs/name/convex-community/volume-celo', }, @@ -479,7 +486,7 @@ const configs = { ['0x114C4042B11a2b16F58Fe1BFe847589a122F678a'.toLowerCase(), 'plain4optimized'], ]), BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 50000, // https://zkevm.polygonscan.com/chart/blocks graphEndpoint: undefined, // Not supported by TheGraph's hosted service }, @@ -512,7 +519,7 @@ const configs = { ['0xE80AeF1a4782eA7b7f9Ad9F0c2ed9343861934e3'.toLowerCase(), 'plain4optimized'], ]), BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), - DISABLED_POOLS_ADDRESSES: [].map((a) => a.toLowerCase()), + DISABLED_POOLS_ADDRESSES: [].map(lc), approxBlocksPerDay: 70000, // Very approx from list of blocks on https://explorer.zksync.io/blocks graphEndpoint: undefined, // Not supported by TheGraph's hosted service }, diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index abfef676..bf11e933 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -217,6 +217,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) multicall2Address, BASE_POOL_LP_TO_GAUGE_LP_MAP, DISABLED_POOLS_ADDRESSES, + BROKEN_POOLS_ADDRESSES, } = config; if (registryId !== 'factory' && registryId !== 'main' && registryId !== 'crypto' && registryId !== 'factory-crypto' && registryId !== 'factory-crvusd' && registryId !== 'factory-tricrypto' && registryId !== 'factory-eywa') { @@ -313,6 +314,10 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) undefined ); + const { + [allCoins.crv.coingeckoId]: crvPrice, + } = await getAssetsPrices([allCoins.crv.coingeckoId]); + const poolCount = Number(await registry.methods.pool_count().call()); if (poolCount === 0) return { poolData: [], tvlAll: 0, tvl: 0 }; @@ -985,7 +990,11 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) return { ...mergedCoinData[key], - usdPrice: (mergedCoinData[key]?.usdPrice === 0 ? 0 : (mergedCoinData[key]?.usdPrice || null)), + usdPrice: ( + mergedCoinData[key]?.usdPrice === 0 ? 0 : + (blockchainId === 'ethereum' && lc(coinAddress) === lc(allCoins.crv.address)) ? crvPrice : // Temp: use external crv price oracle + (mergedCoinData[key]?.usdPrice || null) + ), }; }); @@ -1018,9 +1027,6 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) const totalSupply = poolInfo.totalSupply / 1e18; const lpTokenPrice = totalSupply > 0 ? (usdTotal / totalSupply) : undefined; - const { - [allCoins.crv.coingeckoId]: crvPrice, - } = await getAssetsPrices([allCoins.crv.coingeckoId]); const relativeWeightRate = ( blockchainId === 'ethereum' ? From c1e4c7eda5dcc523d668d6f3c4f983a81114bf52 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 31 Jul 2023 15:37:36 +0200 Subject: [PATCH 28/83] Attach gauge apys to pools info only if gauge alive --- pages/api/getPools/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index bf11e933..0812ae15 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -1035,7 +1035,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ); const gaugeCrvBaseApy = ( - (gaugeData && typeof lpTokenPrice !== 'undefined') ? ( + (gaugeData && !gaugeData.is_killed && typeof lpTokenPrice !== 'undefined') ? ( (gaugeData.gauge_controller.inflation_rate / 1e18) * relativeWeightRate * 31536000 / (gaugeData.gauge_data.working_supply / 1e18) * 0.4 * crvPrice / lpTokenPrice * 100 ) : undefined ); @@ -1180,12 +1180,12 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) usdTotalExcludingBasePool, gaugeAddress, gaugeRewards: ( - gaugeAddress ? + (gaugeAddress && !gaugeData.is_killed) ? (gaugeRewards || []) : undefined ), gaugeCrvApy: ( - gaugeAddress ? + (gaugeAddress && !gaugeData.is_killed) ? [gaugeCrvBaseApy, (gaugeCrvBaseApy * 2.5)] : undefined ), From 65b1b8014ea775ba75e5354f86605f43ef5ee6b3 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 31 Jul 2023 17:13:04 +0200 Subject: [PATCH 29/83] Update moonbeam rpc endpoint --- constants/configs/configs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 65925bed..29550247 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -370,7 +370,7 @@ const configs = { nativeCurrencyCoingeckoId: 'moonbeam', platformCoingeckoId: 'moonbeam', nativeAssetErc20WrapperId: 'wGLMR', // Used by crypto facto, since it handles wrapped native as native - rpcUrl: 'https://moonbeam.api.onfinality.io/public', + rpcUrl: 'https://moonbeam.public.blastapi.io', multicallAddress: '0x1337BedC9D22ecbe766dF105c9623922A27963EC', multicall2Address: '0x1337BedC9D22ecbe766dF105c9623922A27963EC', getFactoryRegistryAddress: async () => '0x4244eB811D6e0Ef302326675207A95113dB4E1F8', From 653cff002a97cbd42fe174843ff6e02fcc5d4690 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 31 Jul 2023 17:13:48 +0200 Subject: [PATCH 30/83] Pick active gauge if multiple gauges exist for same pool --- pages/api/getAllGauges.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pages/api/getAllGauges.js b/pages/api/getAllGauges.js index f00063e5..a8aaac64 100644 --- a/pages/api/getAllGauges.js +++ b/pages/api/getAllGauges.js @@ -402,6 +402,14 @@ export default fn(async ({ blockchainId } = {}) => { const name = getPoolName(pool); const shortName = getPoolShortName(pool); + const isSupersededByOtherGauge = blockchainFactoGauges.some((factoGauge) => ( + factoGauge.gauge !== gauge && + !factoGauge.isKilled && + factoGauge.hasCrv && + (isKilled || !hasCrv) + )); + if (isSupersededByOtherGauge) return null; // Ignore this gauge, a prefered one exists + return [ name, { poolUrls: pool.poolUrls, @@ -433,7 +441,7 @@ export default fn(async ({ blockchainId } = {}) => { } : {}), }, ]; - }) + }).filter((o) => o !== null) )))), }; From 330b6f134c64af4a47f5bb1936d3e157668778e8 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 31 Jul 2023 17:46:10 +0200 Subject: [PATCH 31/83] Use gauge address as key to prevent mismatches --- utils/data/getFactoryV2SidechainGaugeRewards.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/data/getFactoryV2SidechainGaugeRewards.js b/utils/data/getFactoryV2SidechainGaugeRewards.js index afc81bfa..fead9d37 100644 --- a/utils/data/getFactoryV2SidechainGaugeRewards.js +++ b/utils/data/getFactoryV2SidechainGaugeRewards.js @@ -134,7 +134,7 @@ export default memoize(async ({ blockchainId, gauges }) => { const effectiveRate = typeof rate !== 'undefined' ? rate : rateFallback; const effectivePeriodFinish = Number(typeof periodFinish !== 'undefined' ? periodFinish : periodFinishFallback); const isRewardStillActive = effectivePeriodFinish > nowTimestamp; - const totalSupply = gaugesTotalSupply.find(({ metaData }) => metaData.name === name).data / 1e18; + const totalSupply = gaugesTotalSupply.find(({ metaData }) => metaData.gauge === gauge).data / 1e18; const tokenName = tokenData.find(({ metaData }) => metaData.rewardTokenAddress === rewardTokenAddress && metaData.name === name && metaData.type === 'name').data; const tokenSymbol = tokenData.find(({ metaData }) => metaData.rewardTokenAddress === rewardTokenAddress && metaData.name === name && metaData.type === 'symbol').data; const tokenDecimals = tokenData.find(({ metaData }) => metaData.rewardTokenAddress === rewardTokenAddress && metaData.name === name && metaData.type === 'decimals').data; From 637bc033a14b1e99c11d9534d5cdbe2785eacba1 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 1 Aug 2023 12:41:01 +0200 Subject: [PATCH 32/83] Update gnosis rpc endpoint --- constants/configs/configs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 29550247..b32908c9 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -302,7 +302,7 @@ const configs = { nativeCurrencyCoingeckoId: 'xdai', platformCoingeckoId: 'xdai', nativeAssetErc20WrapperId: 'wxdai', // Used by crypto facto, since it handles wrapped native as native - rpcUrl: 'https://rpc.gnosis.gateway.fm', + rpcUrl: 'https://rpc.ankr.com/gnosis', multicallAddress: '0xb5b692a88bdfc81ca69dcb1d924f59f0413a602a', multicall2Address: '0xFAa296891cA6CECAF2D86eF5F7590316d0A17dA0', DISABLED_POOLS_ADDRESSES: [].map(lc), From 4894ce8a95bf948d40e91c4c2e85d64c9c0eea91 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 1 Aug 2023 12:41:10 +0200 Subject: [PATCH 33/83] Fix superseded gauge logic --- pages/api/getAllGauges.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/api/getAllGauges.js b/pages/api/getAllGauges.js index a8aaac64..eb57f3c1 100644 --- a/pages/api/getAllGauges.js +++ b/pages/api/getAllGauges.js @@ -404,6 +404,8 @@ export default fn(async ({ blockchainId } = {}) => { const isSupersededByOtherGauge = blockchainFactoGauges.some((factoGauge) => ( factoGauge.gauge !== gauge && + factoGauge.blockchainId === blockchainId && + factoGauge.swap === swap && !factoGauge.isKilled && factoGauge.hasCrv && (isKilled || !hasCrv) From 1f414982f73b4fae4f32920b46e26724fd7d6769 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 5 Aug 2023 12:17:48 +0200 Subject: [PATCH 34/83] Don't count broken pools' tvl --- pages/api/getPools/index.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 0812ae15..2fa05a8b 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -835,8 +835,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) const coinInfo = accu[key]; const coinPrice = ( - (IGNORED_COINS[blockchainId] || []).includes(coinAddress.toLowerCase()) ? - 0 : + (IGNORED_COINS[blockchainId] || []).includes(coinAddress.toLowerCase()) ? 0 : ( crvusdTokenAddresseAndPriceMapFallback[coinAddress.toLowerCase()] || otherRegistryTokensPricesMap[coinAddress.toLowerCase()] || @@ -1009,13 +1008,19 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) otherRegistryTokensPricesMap, }); - const usdTotal = sum(augmentedCoins.map(({ usdPrice, poolBalance, decimals }) => ( - poolBalance / (10 ** decimals) * usdPrice - ))); + const usdTotal = ( + (BROKEN_POOLS_ADDRESSES || []).includes(lc(poolInfo.address)) ? 0 : + sum(augmentedCoins.map(({ usdPrice, poolBalance, decimals }) => ( + poolBalance / (10 ** decimals) * usdPrice + ))) + ); - const usdTotalExcludingBasePool = sum(augmentedCoins.filter(({ isBasePoolLpToken }) => !isBasePoolLpToken).map(({ usdPrice, poolBalance, decimals }) => ( - poolBalance / (10 ** decimals) * usdPrice - ))); + const usdTotalExcludingBasePool = ( + (BROKEN_POOLS_ADDRESSES || []).includes(lc(poolInfo.address)) ? 0 : + sum(augmentedCoins.filter(({ isBasePoolLpToken }) => !isBasePoolLpToken).map(({ usdPrice, poolBalance, decimals }) => ( + poolBalance / (10 ** decimals) * usdPrice + ))) + ); const gaugeData = typeof ethereumOnlyData !== 'undefined' ? ethereumOnlyData.gaugesDataArray.find(({ swap }) => ( From 7a4b6b99f486a0d847c3fc69618eb5c2e79d96e5 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 5 Aug 2023 13:58:30 +0200 Subject: [PATCH 35/83] Remove long-broken endpoint and related utils --- endpoints.md | 36 --------------- pages/api/getApys.js | 42 ------------------ utils/data/getCRVAPY.js | 97 ----------------------------------------- 3 files changed, 175 deletions(-) delete mode 100644 pages/api/getApys.js delete mode 100644 utils/data/getCRVAPY.js diff --git a/endpoints.md b/endpoints.md index 44ee6712..39aad193 100644 --- a/endpoints.md +++ b/endpoints.md @@ -224,39 +224,3 @@ NONE "rawFees": 23928.77840856761 //fees for the week in USD } ``` - -### getApys - -*Note: deprecated on June 11, 2022; data is old and incomplete, please use other endpoints* - -``` -GET /api/getApys -GET /api/getApys?address=0xADDRESS -``` -Returns all types of APYs for all Curve pools (base APY from trading fees, CRV APY from CRV distribution, and any additional rewards the pool may have) - -**View**: -[getApys](https://api.curve.fi/api/getApys) - -**Parameters:** -- `address` (optional): address to use to calculate CRV boosts and APYs; if no address is provided, the baseline boost value (`1`) is used - - -**Response :** - -``` -"data": { - "apys": { - "saave": { - "baseApy": "2.21", - "crvApy": 4.430468225441863, - "crvBoost":1, - "additionalRewards": [ - { "name": "STKAAVE", "apy": 0.6132910288661984 } - ], - "crvPrice": 1.38 - }, - … - } -} -``` diff --git a/pages/api/getApys.js b/pages/api/getApys.js deleted file mode 100644 index db0e5aa2..00000000 --- a/pages/api/getApys.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Note: this endpoint is deprecated, its data is stale and incomplete - */ - -import getAPY from 'utils/data/getAPY'; -import getCRVAPY from 'utils/data/getCRVAPY'; -import getMainPoolsGaugeRewards from 'pages/api/getMainPoolsGaugeRewards'; -import { arrayToHashmap } from 'utils/Array'; -import pools from 'constants/pools'; -import { fn } from '../../utils/api'; - -export default fn(async ({ address }) => { - const getGauges = (await import('pages/api/getAllGauges')).default; - const gaugesData = await getGauges.straightCall({ blockchainId: 'ethereum' }); - - const [ - mainPoolsGaugeRewards, - { weeklyApy: baseApys }, - { CRVAPYs: crvApys, boosts, CRVprice: crvPrice }, - ] = await Promise.all([ - getMainPoolsGaugeRewards.straightCall(gaugesData), - getAPY(), - getCRVAPY(address || '0x0000000000000000000000000000000000000000'), - ]); - - return arrayToHashmap(pools.map((pool, index) => [pool.id, { - baseApy: baseApys[index], - crvApy: crvApys[pool.id], - crvBoost: boosts[pool.id], - additionalRewards: ( - pool.addresses.gauge ? ( - mainPoolsGaugeRewards[pool.addresses.gauge.toLowerCase()]?.map(({ symbol, apy }) => ({ - name: symbol, - apy, - })) || [] - ) : [] - ), - crvPrice, - }])); -}, { - maxAge: 10 * 60, // 10m -}); diff --git a/utils/data/getCRVAPY.js b/utils/data/getCRVAPY.js deleted file mode 100644 index 5562d46e..00000000 --- a/utils/data/getCRVAPY.js +++ /dev/null @@ -1,97 +0,0 @@ -/* eslint-disable no-restricted-syntax */ - -import memoize from 'memoizee'; -import { GraphQLClient, gql } from 'graphql-request'; -import { flattenArray, arrayToHashmap } from 'utils/Array'; -import getAssetsPrices from 'utils/data/assets-prices'; -import getPoolUsdFigure from 'utils/data/getPoolUsdFigure'; -import pools, { poolGauges } from 'constants/pools'; -import Web3 from 'web3'; -import WEB3_CONSTANTS from 'constants/Web3'; -import Multicall from 'constants/abis/multicall.json'; - -const web3 = new Web3(WEB3_CONSTANTS.RPC_URL); -const MulticallContract = new web3.eth.Contract(Multicall, '0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441'); - -const getCRVAPY = memoize(async (userAddress) => { - const GAUGE_CONTROLLER_ADDRESS = '0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB'; - const GAUGE_RELATIVE_WEIGHT = '0x6207d866000000000000000000000000'; - const { 'curve-dao-token': CRVprice } = await getAssetsPrices(['curve-dao-token']); - const weightCalls = poolGauges.map((gauge) => [GAUGE_CONTROLLER_ADDRESS, GAUGE_RELATIVE_WEIGHT + gauge.slice(2)]); - const aggCallsWeights = await MulticallContract.methods.aggregate(weightCalls).call(); - const decodedWeights = aggCallsWeights[1].map((hex, i) => [weightCalls[i][0], web3.eth.abi.decodeParameter('uint256', hex) / 1e18]); - const ratesCalls = flattenArray(poolGauges.map((gauge) => [ - [gauge, '0x180692d0'], - [gauge, '0x17e28089'], - [gauge, '0x18160ddd'], - ])); - const aggRates = await MulticallContract.methods.aggregate(ratesCalls).call(); - const decodedRate = aggRates[1].map((hex) => web3.eth.abi.decodeParameter('uint256', hex)); - const gaugeRates = decodedRate.filter((_, i) => i % 3 === 0).map((v) => v / 1e18); - const workingSupplies = decodedRate.filter((_, i) => i % 3 === 1).map((v) => v / 1e18); - const virtualPriceCalls = pools.filter(({ addresses: { swap } }) => !!swap).map(({ addresses: { swap } }) => [swap, '0xbb7b8b80']); - const aggVirtualPrices = await MulticallContract.methods.aggregate(virtualPriceCalls).call(); - const decodedVirtualPrices = aggVirtualPrices[1].map((hex, i) => [virtualPriceCalls[i][0], web3.eth.abi.decodeParameter('uint256', hex) / 1e18]); - const CRVAPYs = {}; - - let i = 0; - for (const w of decodedWeights) { - const pool = pools.find(({ addresses: { gauge } }) => gauge && gauge.toLowerCase() === '0x' + weightCalls[i][1].slice(34).toLowerCase()); - const { id: poolId, addresses: { swap: swapAddress } } = pool; - - const virtualPrice = decodedVirtualPrices.find((v) => v[0].toLowerCase() === swapAddress.toLowerCase())[1]; - // eslint-disable-next-line no-await-in-loop - const workingSupply = await getPoolUsdFigure(workingSupplies[i], pool, web3); - - const rate = (gaugeRates[i] * w[1] * 31536000 / workingSupply * 0.4) / virtualPrice; - let apy = rate * CRVprice * 100; - if (isNaN(apy)) apy = 0; - - CRVAPYs[poolId] = apy; - - i += 1; - } - - const boosts = arrayToHashmap(pools.map(({ id }) => [id, 1])); - if (userAddress) { - const wrapper = new GraphQLClient('https://api.thegraph.com/subgraphs/name/sistemico/curve'); - - const QUERY = gql` - { - account(id: "${userAddress.toLowerCase()}") { - gauges { - gauge { - id - } - originalBalance - originalSupply - workingBalance - workingSupply - } - } - } - `; - - let results = await wrapper.request(QUERY, {}); - results = results.account ? results.account.gauges : []; - - for (const gaugeBoost of results) { - const pool = pools.find((pool) => pool.addresses.gauge && pool.addresses.gauge.toLowerCase() === gaugeBoost.gauge.id.toLowerCase()) - if (!pool) continue; // If the gauge has been retired - - boosts[pool.id] = gaugeBoost.workingBalance / (0.4 * gaugeBoost.originalBalance); - CRVAPYs[pool.id] *= boosts[pool.id]; - } - } - - return { - CRVprice, - CRVAPYs, - boosts, - }; -}, { - promise: true, - maxAge: 10 * 60 * 1000, // 10m -}); - -export default getCRVAPY; From 63f32113213848f2441c23b5c91aec09b08a5a11 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 8 Aug 2023 14:47:31 +0200 Subject: [PATCH 36/83] Add fallback data for individual graphql requests --- constants/AppConstants.js | 16 ++++ package-lock.json | 81 ++++++----------- package.json | 2 +- pages/api/getVolumes/ethereum/crvusd-amms.js | 9 +- utils/Graphql/fallback-data/crvusd-amms.json | 40 +++++++++ utils/Graphql/index.js | 95 ++++++++++++++++++++ 6 files changed, 181 insertions(+), 62 deletions(-) create mode 100644 utils/Graphql/fallback-data/crvusd-amms.json create mode 100644 utils/Graphql/index.js diff --git a/constants/AppConstants.js b/constants/AppConstants.js index 4e627887..babc186d 100644 --- a/constants/AppConstants.js +++ b/constants/AppConstants.js @@ -5,8 +5,24 @@ const BASE_API_DOMAIN = IS_DEV ? 'http://localhost:3000' : 'https://api.curve.fi const REWARD_TOKENS_REPLACE_MAP = { }; +/** + * Flip to true to force using fallback data for thegraph (fallback data ideally + * needs to be updated ahead of time if issues are predictable, e.g. planned maintenance). + * Fallback data will already be used automatically if any thegraph request is failing, + * so using that flip shouldn't be necessary at all. + */ +const USE_FALLBACK_THEGRAPH_DATA = false; + +// Flip to true in order to easily populate thegraph fallback data: each +// place that's querying thegraph will dump its output, prefixed with +// "FALLBACK_THEGRAPH_DATA_POPULATE_MODE" and the filename where to store +// this data, in order to update that filename easily. +const FALLBACK_THEGRAPH_DATA_POPULATE_MODE = true; + module.exports = { IS_DEV, REWARD_TOKENS_REPLACE_MAP, BASE_API_DOMAIN, + USE_FALLBACK_THEGRAPH_DATA, + FALLBACK_THEGRAPH_DATA_POPULATE_MODE, }; diff --git a/package-lock.json b/package-lock.json index 12d20d2a..bbdf149a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "exponential-backoff": "^3.1.0", "form-urlencoded": "^6.0.4", "graphql": "^15.5.1", - "graphql-request": "^3.4.0", + "graphql-request": "^6.1.0", "lodash.groupby": "^4.6.0", "lodash.partition": "^4.6.0", "lodash.uniq": "^4.5.0", @@ -999,6 +999,14 @@ "@ethersproject/strings": "^5.0.8" } }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -3345,17 +3353,6 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/extract-files": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", - "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", - "engines": { - "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/jaydenseric" - } - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -3670,29 +3667,15 @@ } }, "node_modules/graphql-request": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-3.4.0.tgz", - "integrity": "sha512-acrTzidSlwAj8wBNO7Q/UQHS8T+z5qRGquCQRv9J1InwR01BBWV9ObnoE+JS5nCCEj8wSGS0yrDXVDoRiKZuOg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz", + "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", "dependencies": { - "cross-fetch": "^3.0.6", - "extract-files": "^9.0.0", - "form-data": "^3.0.0" + "@graphql-typed-document-node/core": "^3.2.0", + "cross-fetch": "^3.1.5" }, "peerDependencies": { - "graphql": "14.x || 15.x" - } - }, - "node_modules/graphql-request/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "graphql": "14 - 16" } }, "node_modules/har-schema": { @@ -7792,6 +7775,12 @@ "@ethersproject/strings": "^5.0.8" } }, + "@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "requires": {} + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -9655,11 +9644,6 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "extract-files": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", - "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==" - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -9905,25 +9889,12 @@ "integrity": "sha512-FeTRX67T3LoE3LWAxxOlW2K3Bz+rMYAC18rRguK4wgXaTZMiJwSUwDmPFo3UadAKbzirKIg5Qy+sNJXbpPRnQw==" }, "graphql-request": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-3.4.0.tgz", - "integrity": "sha512-acrTzidSlwAj8wBNO7Q/UQHS8T+z5qRGquCQRv9J1InwR01BBWV9ObnoE+JS5nCCEj8wSGS0yrDXVDoRiKZuOg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz", + "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", "requires": { - "cross-fetch": "^3.0.6", - "extract-files": "^9.0.0", - "form-data": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } + "@graphql-typed-document-node/core": "^3.2.0", + "cross-fetch": "^3.1.5" } }, "har-schema": { diff --git a/package.json b/package.json index 10271c70..bd21b11e 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "exponential-backoff": "^3.1.0", "form-urlencoded": "^6.0.4", "graphql": "^15.5.1", - "graphql-request": "^3.4.0", + "graphql-request": "^6.1.0", "lodash.groupby": "^4.6.0", "lodash.partition": "^4.6.0", "lodash.uniq": "^4.5.0", diff --git a/pages/api/getVolumes/ethereum/crvusd-amms.js b/pages/api/getVolumes/ethereum/crvusd-amms.js index 59c71768..069add3c 100644 --- a/pages/api/getVolumes/ethereum/crvusd-amms.js +++ b/pages/api/getVolumes/ethereum/crvusd-amms.js @@ -1,5 +1,6 @@ import { fn } from 'utils/api'; import { sum } from 'utils/Array'; +import { request } from 'utils/Graphql'; const GRAPH_ENDPOINT = 'https://api.thegraph.com/subgraphs/name/convex-community/crvusd'; @@ -16,11 +17,7 @@ export default fn(async () => { } `; - const { data } = await (await fetch(GRAPH_ENDPOINT, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query }), - })).json(); + const data = await request(GRAPH_ENDPOINT, query, undefined, 'crvusd-amms'); const amms = data.amms.map(({ id, volumeSnapshots }) => ({ address: id, @@ -32,5 +29,5 @@ export default fn(async () => { totalVolume: sum(amms.map(({ volumeUSD }) => volumeUSD)), }; }, { - maxAge: 5 * 60, // 15 min + maxAge: 5 * 60, // 5 min }); diff --git a/utils/Graphql/fallback-data/crvusd-amms.json b/utils/Graphql/fallback-data/crvusd-amms.json new file mode 100644 index 00000000..4c34a3cc --- /dev/null +++ b/utils/Graphql/fallback-data/crvusd-amms.json @@ -0,0 +1,40 @@ +{ + "amms": [ + { + "id": "0x136e783846ef68c8bd00a3369f787df8d683a696", + "volumeSnapshots": [ + { + "swapVolumeUSD": "0", + "timestamp": "1691476559" + } + ] + }, + { + "id": "0x1681195c176239ac5e72d9aebacf5b2492e0c4ee", + "volumeSnapshots": [ + { + "swapVolumeUSD": "3675.0859970584274511115", + "timestamp": "1691497067" + } + ] + }, + { + "id": "0x37417b2238aa52d0dd2d6252d989e728e8f706e4", + "volumeSnapshots": [ + { + "swapVolumeUSD": "303776.7785467005902638459163771944", + "timestamp": "1691496155" + } + ] + }, + { + "id": "0xe0438eb3703bf871e31ce639bd351109c88666ea", + "volumeSnapshots": [ + { + "swapVolumeUSD": "29312.9854099574707838522285672", + "timestamp": "1691496263" + } + ] + } + ] +} diff --git a/utils/Graphql/index.js b/utils/Graphql/index.js new file mode 100644 index 00000000..399464b2 --- /dev/null +++ b/utils/Graphql/index.js @@ -0,0 +1,95 @@ +/** + * Graphql wrapper that queries graphql as we normally would, + * or falls back to simply returning fallback data if the + * USE_FALLBACK_THEGRAPH_DATA flag is set to true. + * + * Signature: `request(endpoint, queryString, variables, fallbackDataFileName)` + * If the third arg is omitted, will behave like it does w/o the wrapper. + * + * Use the flag FALLBACK_THEGRAPH_DATA_POPULATE_MODE to easily update + * fallback data files’ contents by copy/pasting the latest json output. + */ + +import { request, batchRequests, gql } from 'graphql-request'; +import { + USE_FALLBACK_THEGRAPH_DATA, + FALLBACK_THEGRAPH_DATA_POPULATE_MODE, +} from 'constants/AppConstants'; + +const getFallbackData = async (fallbackDataFileName) => ( + (await import(`./fallback-data/${fallbackDataFileName}.json`)).default +); + +const wrappedRequest = async (endpoint, queryString, variables, fallbackDataFileName) => { + let data; + + if (USE_FALLBACK_THEGRAPH_DATA && typeof fallbackDataFileName !== 'undefined') { + return getFallbackData(fallbackDataFileName); + } + + try { + data = await request(endpoint, gql`${queryString}`, variables); + } catch (err) { + if (typeof fallbackDataFileName !== 'undefined') { + console.log(`CAUGHT AND HANDLED GRAPHQL ERROR: There was an error querying the following graphql endpoint: "${endpoint}". Fallback data was returned instead of fresh data. The caught error is logged below ↓`); + console.log(err); + + data = await getFallbackData(fallbackDataFileName); + } else { + throw err; + } + } + + if (FALLBACK_THEGRAPH_DATA_POPULATE_MODE) { + console.log(`FALLBACK_THEGRAPH_DATA_POPULATE_MODE for /fallback-data/${fallbackDataFileName}.json`, JSON.stringify(data)); + } + + return data; +}; + +const wrappedRequests = async (endpoint, queryStringAndVarArray, fallbackDataFileName) => { + let data; + + if (USE_FALLBACK_THEGRAPH_DATA && typeof fallbackDataFileName !== 'undefined') { + return getFallbackData(fallbackDataFileName); + } + + console.log('queryStringAndVarArray', queryStringAndVarArray) + console.log('queryStringAndVarArray.gql', queryStringAndVarArray.map(({ + document, + variables, + }) => ({ + document: gql`${document}`, + variables, + }))) + + try { + data = await batchRequests(endpoint, queryStringAndVarArray.map(({ + query, + variables, + }) => ({ + query: gql`${query}`, + variables, + })), fallbackDataFileName); + } catch (err) { + if (typeof fallbackDataFileName !== 'undefined') { + console.log(`CAUGHT AND HANDLED GRAPHQL ERROR: There was an error querying the following graphql endpoint (batch query): "${endpoint}". Fallback data was returned instead of fresh data. The caught error is logged below ↓`); + console.log(err); + + data = await getFallbackData(fallbackDataFileName); + } else { + throw err; + } + } + + if (FALLBACK_THEGRAPH_DATA_POPULATE_MODE) { + console.log(`FALLBACK_THEGRAPH_DATA_POPULATE_MODE for /fallback-data/${fallbackDataFileName}.json`, JSON.stringify(data)); + } + + return data; +}; + +export { + wrappedRequest as request, + wrappedRequests as requests, +}; From 741e4811618a66ce78f26585426c3b1627c2808f Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 8 Aug 2023 16:58:33 +0200 Subject: [PATCH 37/83] Add fallback data for getSubgraphData endpoints --- .../getSubgraphData-arbitrum.json | 1168 +++ .../getSubgraphData-aurora.json | 17 + .../getSubgraphData-avalanche.json | 1016 +++ .../_fallback-data/getSubgraphData-celo.json | 350 + .../getSubgraphData-ethereum.json | 6308 +++++++++++++++++ .../getSubgraphData-fantom.json | 1695 +++++ .../getSubgraphData-harmony.json | 7 + .../getSubgraphData-moonbeam.json | 260 + .../getSubgraphData-optimism.json | 674 ++ .../getSubgraphData-polygon.json | 5957 ++++++++++++++++ .../_fallback-data/getSubgraphData-xdai.json | 458 ++ pages/api/getSubgraphData/index.js | 429 +- 12 files changed, 18132 insertions(+), 207 deletions(-) create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-arbitrum.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-aurora.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-avalanche.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-celo.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-ethereum.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-fantom.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-harmony.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-moonbeam.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-optimism.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-polygon.json create mode 100644 pages/api/getSubgraphData/_fallback-data/getSubgraphData-xdai.json diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-arbitrum.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-arbitrum.json new file mode 100644 index 00000000..1a2376af --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-arbitrum.json @@ -0,0 +1,1168 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0x7f90122BF0700F9E7e1F688fe926940E8839F353", + "rawVolume": 2030543.1105809999, + "volumeUSD": 2031704.66233897, + "latestDailyApy": 0.8287511963349203, + "latestWeeklyApy": 0.6439571150783863, + "virtualPrice": 1013593546432499300 + }, + { + "type": "main", + "address": "0x3E01dD8a5E1fb3481F0F589056b428Fc308AF0Fb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001649240475598100 + }, + { + "type": "crypto", + "address": "0x960ea3e3C7FB317332d990873d354E18d7645590", + "rawVolume": 439897.60474238044, + "volumeUSD": 941704.8831076233, + "latestDailyApy": 0.8007386336145839, + "latestWeeklyApy": 0.5581509988462185, + "virtualPrice": 1036464917128788600 + }, + { + "type": "stable-factory", + "address": "0x30dF229cefa463e991e29D42DB0bae2e122B2AC7", + "rawVolume": 414460.4363410193, + "volumeUSD": 414895.40075340425, + "latestDailyApy": 0.29906108692172584, + "latestWeeklyApy": 2.169858364423427, + "virtualPrice": 1015900306147001700 + }, + { + "type": "stable-factory", + "address": "0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5", + "rawVolume": 36229.37370986545, + "volumeUSD": 36214.339556465806, + "latestDailyApy": 0.126851913251258, + "latestWeeklyApy": 0.8165544235831934, + "virtualPrice": 1009006688114640500 + }, + { + "type": "main", + "address": "0x6eB2dc694eB516B16Dc9FBc678C60052BbdD7d80", + "rawVolume": 1.559023790692889, + "volumeUSD": 2854.0893375442765, + "latestDailyApy": 2.0628697088173498, + "latestWeeklyApy": 1.7704628776427533, + "virtualPrice": 1024422978083323500 + }, + { + "type": "stable-factory", + "address": "0xE9dcF2d2A17eAD11fab8b198578B20535370Be6a", + "rawVolume": 10.998030542143132, + "volumeUSD": 10.954279159628229, + "latestDailyApy": 1.0824525776492289, + "latestWeeklyApy": 0.830161641082694, + "virtualPrice": 1233290250178020600 + }, + { + "type": "stable-factory", + "address": "0xF92C2A3C91bf869F77f9cB221C5AB1B1ada8a586", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8437863967553083, + "latestWeeklyApy": 0.4343886167728295, + "virtualPrice": 27799601537426915000 + }, + { + "type": "stable-factory", + "address": "0x6041631c566Eb8dc6258A75Fa5370761d4873990", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAEA2E71b631fA93683BCF256A8689dFa0e094fcD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x850c7cC8757CE1fa8CeD709f297D842E12E61759", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x065f44Cd602Cc6680E82E516125839b9BbbbE57e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb0D2EB3C2cA3c6916FAb8DCbf9d9c165649231AE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001095896563339800 + }, + { + "type": "stable-factory", + "address": "0xF72beaCc6fD334E14a7DDAC25c3ce1Eb8a827E10", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf07d553B195080F84F582e88ecdD54bAa122b279", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3125881189343316, + "latestWeeklyApy": 0.24303745419207434, + "virtualPrice": 32808742716637135000 + }, + { + "type": "stable-factory", + "address": "0xC120Ef573752aAD82484eBc9A752daD6f3FEC54B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf31BFaA54b3b5E57e602686320Da7F1eE295A6eE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd0DD5D76cF0fC06DaBC48632735566DCa241a35e", + "rawVolume": 469.114845715946, + "volumeUSD": 464.49209571761224, + "latestDailyApy": 0.4438836319140327, + "latestWeeklyApy": 0.44988518625106444, + "virtualPrice": 1015575060358346400 + }, + { + "type": "stable-factory", + "address": "0x2ce5Fd6f6F4a159987eac99FF5158B7B62189Acf", + "rawVolume": 5886.0871289832085, + "volumeUSD": 5878.594630609188, + "latestDailyApy": 0.9233155395621084, + "latestWeeklyApy": 0.4100129881812409, + "virtualPrice": 1006607509908645900 + }, + { + "type": "stable-factory", + "address": "0xf3b9DDB3132543E06349AFF9A12f8503D4ca5b47", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0a824B5d4C96EA0EC46306Efbd34Bf88fE1277e0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 68020382983659430000 + }, + { + "type": "stable-factory", + "address": "0x667A881B28dC2d464d6Ede7f8b13F6a7ffe71659", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x76b44e0Cf9bD024dbEd09E1785DF295D59770138", + "rawVolume": 7.987943488231708, + "volumeUSD": 7.937067612322553, + "latestDailyApy": 0.49312616812029475, + "latestWeeklyApy": 0.7873542774498254, + "virtualPrice": 1014149108247612400 + }, + { + "type": "stable-factory", + "address": "0xc1796710a28f1cBbFE1e8a79A65eE96446607a47", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4", + "rawVolume": 20655.468790067192, + "volumeUSD": 20647.12349848352, + "latestDailyApy": 0.07844479783711833, + "latestWeeklyApy": 0.12173742173720026, + "virtualPrice": 1005234326214976600 + }, + { + "type": "stable-factory", + "address": "0x298D15d9208ab16a59f45FC37133252F1Cf68991", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xaa9dFbf31d2f807cA4d9f7BE281D75cA7BDCE64D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5f16C819c22009746b79d3170D8c214C7C950B4E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x27c60A5a3F6D69b88B46Ab55924ECA5778f8BC88", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB1f0Ca2e34912a093e89c5615C4f61b196e4D8D0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8c0E0cC1D66a1b1fF10EBB1D99Bb9779311d6dE6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1C5ffa4FB4907B681c61B8c82b28C4672ceb1974", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xbcda256079372C6FE5d1b813AB9DeF5C9D78Ab8F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE013593CEA239E445d2271106836b00C9E7356ae", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 4.749699785628514, + "latestWeeklyApy": 4.214916298260873, + "virtualPrice": 1031296596936520800 + }, + { + "type": "stable-factory", + "address": "0x37C9Be6C81990398e9B87494484Afc6a4608C25d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 4.411582066040576, + "latestWeeklyApy": 4.277241473647053, + "virtualPrice": 1028117383783614500 + }, + { + "type": "stable-factory", + "address": "0x3a43A5851A3e3E0e25A3c1089670269786be1577", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa852739519fd46387e2163fc0FB0EfaA94Aa83c4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x943F3B750447AbDd61cdF68AE6c3912cd3bedA04", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x445109BcF194c538B73EA60C71bb773849bc9b79", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x428663216f2Ec5d4180e89B187664d2333EfE229", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x93004D8477f117eA359b71ec02f2706c8175c55c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8a5b8058C1523111768E5F2DEF3b11644F0e165b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfC78eAFf2E8290D3d608B689e93ec6954E21B6C2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000455637256006100 + }, + { + "type": "stable-factory", + "address": "0xdC6eBB38Be3FDBA42Ff65da6Aafb9eDE6443DFDB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb3F21Fc59Bc06209D5fb82c474F21582AEf09a20", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1cDAEf9e69aDa311bDe095fD3be6752b6a626bC8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe5042bbac35056f3f95bF0a79D9eB64dc0daFDb8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe413f1611781f66B25aF566276Ee562D050E5Fc4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4b043CDd981dBD9a0c229d23b80Cc1EB3c50b05B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3d49594Ed8c108F817512829C102E4059c76a220", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc5536d59D026BE19b4267810f43aC083cD607b64", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.10297536537282603, + "latestWeeklyApy": 0.08008359866169545, + "virtualPrice": 1539904400011552500 + }, + { + "type": "stable-factory", + "address": "0x5Aa2a79293424bf39171d704A364FDE3B641DB25", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5CCaeDc2A2C19aB773D75Dd55071680636C242FA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x00E3852AEdBFA153629BeFc870fa45c4d859652c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x07094aB16Ad163F21C76adcEDC36aD8E494fAb74", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x661cf823583e7BdE97954e98fAc2Ef777493a8dc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7F2d1C7b8911901de7c9785d6E7A7A10d8dEff66", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdb721E854aC98d1782dd80fD60d9c73ef7C4707F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x92926170cc85A4BA573bd86d61348bE650E3Eae5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD79138c49c49200a1Afc935171D1bDAd084FDc95", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8177ae5A1e32Ec91E62a3d118fC0B36C82CA84Ce", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB89B080Bb9fb489516FC7Fc98bC4eb3f5A92c54E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2CB445366FbE025569D6883Aa931E79deF202802", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": -100, + "latestWeeklyApy": 1000000, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xbb8a6436e0E9A22bb7F1dC76aFB4421D8195620E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.1611211350150077, + "latestWeeklyApy": 0.12530077074555113, + "virtualPrice": 1002756163698034800 + }, + { + "type": "stable-factory", + "address": "0x48E8DCb9fbE51899Df8960415fB11dfb8745C2DB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.2569004774032768, + "latestWeeklyApy": 0.19976075856742437, + "virtualPrice": 1003968706937117600 + }, + { + "type": "stable-factory", + "address": "0xd39016475200ab8957e9C772C949Ef54bDA69111", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x305fC0A3EEd959a3bBDC54300a1A140925B4b058", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000069418942953900 + }, + { + "type": "stable-factory", + "address": "0xcb11EE4B70d73e38a383b8691cAFb221059669cC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x15a1C069Fcf6F79a3D5Bb5d4A8ba004FbF4fABAc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0008330224610997305, + "latestWeeklyApy": 0.01772945594871178, + "virtualPrice": 6118457813213390000 + }, + { + "type": "stable-factory", + "address": "0x5c999Df25df87A8DfbDD4730c3467de69482bfa8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6BF6fc7EaF84174bb7e1610Efd865f0eBD2AA96D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.4210133399650928, + "latestWeeklyApy": 0.32729563608870915, + "virtualPrice": 1238849172475349200 + }, + { + "type": "stable-factory", + "address": "0x0F24131384044A9D1670fa135CefD3f25870446e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x268C6c52B84A484Fe4A8f36311BF418d22036A86", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1da20Ac34187b2d9c74F729B85acB225D3341b25", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7C01B05DDE0FbB38e2902a9fC3447BEb877d9455", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb6C7Af9a5703B8E03358dE0A6c07e3208B0CD6A4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x63171ae9A9886e49547dd40aDB70F04EABA39D6b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.03201220123436599, + "latestWeeklyApy": 0.2055486472889001, + "virtualPrice": 1011790238990379000 + }, + { + "type": "stable-factory", + "address": "0x9C907Ee3bC1da92095a81B806Ae8cBA6c597703c", + "rawVolume": 9.962399598126838, + "volumeUSD": 9.952321119906427, + "latestDailyApy": 1.0344934358866409, + "latestWeeklyApy": 0.3392719291967383, + "virtualPrice": 1006901186797482100 + }, + { + "type": "stable-factory", + "address": "0xd92Be5A1c565Db5256cDD537B875ED46111Bd8b0", + "rawVolume": 147.3323265681999, + "volumeUSD": 147.18450150371783, + "latestDailyApy": 0.2814911986419366, + "latestWeeklyApy": 0.22595741167990013, + "virtualPrice": 1006042079455196500 + }, + { + "type": "stable-factory", + "address": "0xaB174fFA530C888649C44C4d21C849BBAaBc723F", + "rawVolume": 74.24241561663356, + "volumeUSD": 74.20495751107558, + "latestDailyApy": 0.02268332102228765, + "latestWeeklyApy": 0.14144242354523495, + "virtualPrice": 1001409568044291800 + }, + { + "type": "stable-factory", + "address": "0x75183Ba0a9D7f0b006FBD2F130ED7DdBcb3c5907", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6856860ce8913e98A2baC1A922F309D9a16651fA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x90D5233b53436767fecACD1a783D3dA8Cc7395ED", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x39BA6943D7C0F415bce7A8c42A8C601eaD6Ee426", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0149123760957395f283AF81fE8c904348aA33FC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003573465594363800 + }, + { + "type": "stable-factory", + "address": "0x17459b66F9f7b34703eDfeaB4902522c77c23103", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xd7bB79aeE866672419999a0496D99c54741D67B5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3068879929845503, + "latestWeeklyApy": 0.23860738534016157, + "virtualPrice": 1001419730833622400 + }, + { + "type": "stable-factory", + "address": "0x741aEa6c7707b39Bd950da945f84D6b8bA455D48", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x357547528d53C04420bc43Bc4f97252A4B860D9A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5483e0F934f5d3964A2C4d0eC423353cF4a57ba2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.4138240268865001, + "latestWeeklyApy": 0.32170943364462357, + "virtualPrice": 1000674975070775800 + }, + { + "type": "stable-factory", + "address": "0x0Bd1e9CC4837f6F97323f21b9db039ccb6951668", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x58471208f900da54156e78F23c81fb943Da4a42e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7A56266db1CF99F26a3E737ba36C4004a66bD5b3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.06182295522203507, + "latestWeeklyApy": 0.39727475840329873, + "virtualPrice": 1000896123282944400 + }, + { + "type": "stable-factory", + "address": "0x59a3eF790bE58413471267b8D02993bc0ea2F669", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB54914d2246cCfCE19c5114731EC03Da94061daF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC00938fb7496536DaF6A0960A1568c4C630d3575", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4431216E70D24a593481FCec3702c9c1eA2921A8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF0f89e16c2a86fB81675A0A39701A8B688025146", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.4136531787609421, + "latestWeeklyApy": 0.32157679974496034, + "virtualPrice": 1000398389964382300 + }, + { + "type": "stable-factory", + "address": "0xae0babD1483ed944BeEd2e112021Ed01301A83aC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.45653378133874156, + "latestWeeklyApy": 0.33299435736204863, + "virtualPrice": 1000492860989178100 + }, + { + "type": "stable-factory", + "address": "0x8Cb640A9Ce064Efae27BA7374c3765CB8f53503f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE847E4586afB047d651d11099758bA8E3d79b2ba", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8B82FFd12ccEBe325D8986444e9C46dE6356f963", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x755D6688AD74661Add2FB29212ef9153D40fcA46", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.030586086216133346, + "latestWeeklyApy": 0.11912591754719148, + "virtualPrice": 1000779765970336800 + }, + { + "type": "stable-factory", + "address": "0x0974D9d3bc463Fa17497aAFc3a87535553298FbE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5ff0D82C7Abf63C4f125004D8419f3D1e0cffFa7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x533AB814e08087eB16f77eE9E7588c2Ec3d0e916", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xddB472a84347F56aDf00a9271cBB6D1dD6c75138", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8ccAF5828bc8D5AD8925Be26Da384e226382D115", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA8347B61Fb6c75e726DeFf9B9D8752257669f29D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xa1B19f233Df60fe36d41C8afdf5be495511eac45", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x08135fcac68e8ABD7421d1FB3FDF1bcd176e1Ce0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x469303308b809b031b761e85DF9a39A08d01B979", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd7AdfCa7280234aeC2fFceD9c9d4F8FdF301E32E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5C10886c032ED7b39598e6Ab3f3A64E296B735B4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xedCe214e7a52c77914342B072230ac971149Eb00", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x660772200743Ec64B0cFe9D584c5dAB96a56AB66", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002537504861795100 + }, + { + "type": "stable-factory", + "address": "0xfcc0F0f7584De34D8bF04eC930e6AF1caa06B58B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9B4d147C24Fd59BE935a78DaE5189A04DEE03726", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9b29859932e02F6Ce6BF36AAA2a2AF8498103A3F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9A67b37895fa7CAbC0cC2A03AAebd117023a58C5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2C41b772253C8E0d73F077cdc0cE93b17674C8B5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb34a7d1444a707349Bc7b981B7F2E1f20F81F013", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.06350031647914811, + "latestWeeklyApy": 2.3296294818429653, + "virtualPrice": 1001367351310067100 + }, + { + "type": "stable-factory", + "address": "0x6dbdb4981ed1A7c9B1374273DC363900d81f09C9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x34e3f77067C2B69fc1001b501B614ef4829b075B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD7675eFb027CE7EA3dea03Ba976B047a8c3227a2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1bEa5606fb0b7A820916f56b0db7Fb1F282f0346", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x95833db96D72585f1b4dB41246B3Fd1fbb41911A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000501300464280700 + }, + { + "type": "crypto", + "address": "0xA827a652Ead76c6B0b3D19dba05452E06e25c27e", + "rawVolume": 1524.499930244128, + "volumeUSD": 1586.480610954128, + "latestDailyApy": 0.6744695611825335, + "latestWeeklyApy": 0.7292479166341792, + "virtualPrice": 1008476283569247000 + }, + { + "type": "crypto-factory", + "address": "0x7706128aFAC8875981b2412faC6C4f3053EA705f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + } + ], + "totalVolume": 3456200.299056679, + "cryptoVolume": 943291.3637185774, + "cryptoShare": 27.29272849076587, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-aurora.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-aurora.json new file mode 100644 index 00000000..7a6de9a6 --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-aurora.json @@ -0,0 +1,17 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0xbF7E49483881C76487b0989CD7d9A8239B20CA41", + "rawVolume": 777.0105287738036, + "volumeUSD": 777.1866322907638, + "latestDailyApy": 0.5196139350562623, + "latestWeeklyApy": 0.29471108784029365, + "virtualPrice": 1028593821776579000 + } + ], + "totalVolume": 777.1866322907638, + "cryptoVolume": 0, + "cryptoShare": 0, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-avalanche.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-avalanche.json new file mode 100644 index 00000000..bde27de9 --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-avalanche.json @@ -0,0 +1,1016 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0x7f90122BF0700F9E7e1F688fe926940E8839F353", + "rawVolume": 51362.47726799021, + "volumeUSD": 51362.47726799021, + "latestDailyApy": 2.988700582654902, + "latestWeeklyApy": 3.156779118433106, + "virtualPrice": 1047884204961998700 + }, + { + "type": "main", + "address": "0x16a7DA911A4DD1d83F3fF066fE28F3C792C50d90", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.006905803201973093, + "latestWeeklyApy": 0.0059030092578238325, + "virtualPrice": 1008243787112545500 + }, + { + "type": "stable-factory", + "address": "0xAEA2E71b631fA93683BCF256A8689dFa0e094fcD", + "rawVolume": 31009.346650057196, + "volumeUSD": 31009.689929244218, + "latestDailyApy": 0.8768740863140057, + "latestWeeklyApy": 1.3431128887276822, + "virtualPrice": 1109432931051837000 + }, + { + "type": "stable-factory", + "address": "0x0149123760957395f283AF81fE8c904348aA33FC", + "rawVolume": 35956.835540269145, + "volumeUSD": 35885.097472537345, + "latestDailyApy": 3.87665513449138, + "latestWeeklyApy": 8.568646211309172, + "virtualPrice": 20414451840923197000 + }, + { + "type": "main", + "address": "0xD2AcAe14ae2ee0f6557aC6C6D0e407a92C36214b", + "rawVolume": 18.086863739924617, + "volumeUSD": 18.086863739924617, + "latestDailyApy": 8.715071830718667, + "latestWeeklyApy": 9.524107667833892, + "virtualPrice": 1061582878964874900 + }, + { + "type": "stable-factory", + "address": "0x30dF229cefa463e991e29D42DB0bae2e122B2AC7", + "rawVolume": 54.339483158664, + "volumeUSD": 53.00481823746911, + "latestDailyApy": 1.5806102394184895, + "latestWeeklyApy": 10483.115307808288, + "virtualPrice": 1178652381302240800 + }, + { + "type": "stable-factory", + "address": "0xE9dcF2d2A17eAD11fab8b198578B20535370Be6a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF92C2A3C91bf869F77f9cB221C5AB1B1ada8a586", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6041631c566Eb8dc6258A75Fa5370761d4873990", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x850c7cC8757CE1fa8CeD709f297D842E12E61759", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x065f44Cd602Cc6680E82E516125839b9BbbbE57e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb0D2EB3C2cA3c6916FAb8DCbf9d9c165649231AE", + "rawVolume": 1991.491438099142, + "volumeUSD": 1942.0961688943084, + "latestDailyApy": 0.6206159653112664, + "latestWeeklyApy": 0.6487500563674864, + "virtualPrice": 1020774934895520600 + }, + { + "type": "stable-factory", + "address": "0xF72beaCc6fD334E14a7DDAC25c3ce1Eb8a827E10", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8375939809594168, + "latestWeeklyApy": 0.8845739487988613, + "virtualPrice": 2755814185605682700 + }, + { + "type": "stable-factory", + "address": "0xf07d553B195080F84F582e88ecdD54bAa122b279", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC120Ef573752aAD82484eBc9A752daD6f3FEC54B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf31BFaA54b3b5E57e602686320Da7F1eE295A6eE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd0DD5D76cF0fC06DaBC48632735566DCa241a35e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0x2ce5Fd6f6F4a159987eac99FF5158B7B62189Acf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf3b9DDB3132543E06349AFF9A12f8503D4ca5b47", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0a824B5d4C96EA0EC46306Efbd34Bf88fE1277e0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x667A881B28dC2d464d6Ede7f8b13F6a7ffe71659", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x76b44e0Cf9bD024dbEd09E1785DF295D59770138", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc1796710a28f1cBbFE1e8a79A65eE96446607a47", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x298D15d9208ab16a59f45FC37133252F1Cf68991", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xaa9dFbf31d2f807cA4d9f7BE281D75cA7BDCE64D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001142614501224200 + }, + { + "type": "stable-factory", + "address": "0x5f16C819c22009746b79d3170D8c214C7C950B4E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x27c60A5a3F6D69b88B46Ab55924ECA5778f8BC88", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB1f0Ca2e34912a093e89c5615C4f61b196e4D8D0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8c0E0cC1D66a1b1fF10EBB1D99Bb9779311d6dE6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1C5ffa4FB4907B681c61B8c82b28C4672ceb1974", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000637366193200 + }, + { + "type": "stable-factory", + "address": "0xbcda256079372C6FE5d1b813AB9DeF5C9D78Ab8F", + "rawVolume": 37.74920271952299, + "volumeUSD": 36.78900186750213, + "latestDailyApy": 2.4762127784413224, + "latestWeeklyApy": 1.4593648672009518, + "virtualPrice": 1018844431813110900 + }, + { + "type": "stable-factory", + "address": "0xE013593CEA239E445d2271106836b00C9E7356ae", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x37C9Be6C81990398e9B87494484Afc6a4608C25d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.5351372659819118, + "latestWeeklyApy": 22.720679131893018, + "virtualPrice": 1440674438926828800 + }, + { + "type": "stable-factory", + "address": "0x3a43A5851A3e3E0e25A3c1089670269786be1577", + "rawVolume": 7971.349419, + "volumeUSD": 7968.039404661492, + "latestDailyApy": 0.5116461602466815, + "latestWeeklyApy": 1.641860601542522, + "virtualPrice": 1077370233127679600 + }, + { + "type": "stable-factory", + "address": "0xa852739519fd46387e2163fc0FB0EfaA94Aa83c4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.7162379173234488, + "latestWeeklyApy": 1.8123898109336345, + "virtualPrice": 1020996843559696400 + }, + { + "type": "stable-factory", + "address": "0x943F3B750447AbDd61cdF68AE6c3912cd3bedA04", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.736257226567207, + "latestWeeklyApy": 2.890046802546564, + "virtualPrice": 1037207699624482700 + }, + { + "type": "stable-factory", + "address": "0x445109BcF194c538B73EA60C71bb773849bc9b79", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1007327433606236800 + }, + { + "type": "stable-factory", + "address": "0x428663216f2Ec5d4180e89B187664d2333EfE229", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x93004D8477f117eA359b71ec02f2706c8175c55c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1020979332883706800 + }, + { + "type": "stable-factory", + "address": "0x8a5b8058C1523111768E5F2DEF3b11644F0e165b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8039040035388689, + "latestWeeklyApy": 23.297283549937408, + "virtualPrice": 2052251266947011600 + }, + { + "type": "stable-factory", + "address": "0xfC78eAFf2E8290D3d608B689e93ec6954E21B6C2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdC6eBB38Be3FDBA42Ff65da6Aafb9eDE6443DFDB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.9373133886648732, + "latestWeeklyApy": 0.9898818918220975, + "virtualPrice": 1011573942018109400 + }, + { + "type": "stable-factory", + "address": "0xb3F21Fc59Bc06209D5fb82c474F21582AEf09a20", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.4370392711835267, + "latestWeeklyApy": 1.661650058174935, + "virtualPrice": 1021274989469550800 + }, + { + "type": "stable-factory", + "address": "0x1cDAEf9e69aDa311bDe095fD3be6752b6a626bC8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.7346518808558855, + "latestWeeklyApy": 0.7757311051511895, + "virtualPrice": 1008900059567242500 + }, + { + "type": "stable-factory", + "address": "0xe5042bbac35056f3f95bF0a79D9eB64dc0daFDb8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe413f1611781f66B25aF566276Ee562D050E5Fc4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4b043CDd981dBD9a0c229d23b80Cc1EB3c50b05B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 7.514390140682936, + "latestWeeklyApy": 6.381471060305666, + "virtualPrice": 1108817041096731900 + }, + { + "type": "stable-factory", + "address": "0x3d49594Ed8c108F817512829C102E4059c76a220", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.1507302839911526, + "latestWeeklyApy": 1.2151108051553283, + "virtualPrice": 1013470605551069600 + }, + { + "type": "stable-factory", + "address": "0xc5536d59D026BE19b4267810f43aC083cD607b64", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": -100, + "latestWeeklyApy": 1000000, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5Aa2a79293424bf39171d704A364FDE3B641DB25", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5CCaeDc2A2C19aB773D75Dd55071680636C242FA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x00E3852AEdBFA153629BeFc870fa45c4d859652c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x07094aB16Ad163F21C76adcEDC36aD8E494fAb74", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x661cf823583e7BdE97954e98fAc2Ef777493a8dc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7F2d1C7b8911901de7c9785d6E7A7A10d8dEff66", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.293595759508448, + "latestWeeklyApy": 1.365977761221293, + "virtualPrice": 1014521611205043800 + }, + { + "type": "stable-factory", + "address": "0xdb721E854aC98d1782dd80fD60d9c73ef7C4707F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x92926170cc85A4BA573bd86d61348bE650E3Eae5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD79138c49c49200a1Afc935171D1bDAd084FDc95", + "rawVolume": 30937.705821000003, + "volumeUSD": 50823.90432664053, + "latestDailyApy": 0.025557893953975785, + "latestWeeklyApy": 0.053546728373898844, + "virtualPrice": 1018470737704180000 + }, + { + "type": "stable-factory", + "address": "0x8177ae5A1e32Ec91E62a3d118fC0B36C82CA84Ce", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB89B080Bb9fb489516FC7Fc98bC4eb3f5A92c54E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2CB445366FbE025569D6883Aa931E79deF202802", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xbb8a6436e0E9A22bb7F1dC76aFB4421D8195620E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.4628653421833828, + "virtualPrice": 6813082515988470000 + }, + { + "type": "stable-factory", + "address": "0x48E8DCb9fbE51899Df8960415fB11dfb8745C2DB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd39016475200ab8957e9C772C949Ef54bDA69111", + "rawVolume": 86.42607563659278, + "volumeUSD": 86.49406822690023, + "latestDailyApy": 1.594602460207173, + "latestWeeklyApy": 2.03228958113002, + "virtualPrice": 1021485491225188600 + }, + { + "type": "stable-factory", + "address": "0x305fC0A3EEd959a3bBDC54300a1A140925B4b058", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xcb11EE4B70d73e38a383b8691cAFb221059669cC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 2237268404886404900 + }, + { + "type": "stable-factory", + "address": "0x15a1C069Fcf6F79a3D5Bb5d4A8ba004FbF4fABAc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5c999Df25df87A8DfbDD4730c3467de69482bfa8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6BF6fc7EaF84174bb7e1610Efd865f0eBD2AA96D", + "rawVolume": 20987.44813283531, + "volumeUSD": 20656.79533713544, + "latestDailyApy": 0.8050109589555543, + "latestWeeklyApy": 0.7747264968011702, + "virtualPrice": 1013522531215146200 + }, + { + "type": "stable-factory", + "address": "0x0F24131384044A9D1670fa135CefD3f25870446e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x268C6c52B84A484Fe4A8f36311BF418d22036A86", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1da20Ac34187b2d9c74F729B85acB225D3341b25", + "rawVolume": 63352.577069000006, + "volumeUSD": 63305.15924017529, + "latestDailyApy": 0.2115348107784465, + "latestWeeklyApy": 0.08150762005396661, + "virtualPrice": 1008938032235884400 + }, + { + "type": "stable-factory", + "address": "0x7C01B05DDE0FbB38e2902a9fC3447BEb877d9455", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb6C7Af9a5703B8E03358dE0A6c07e3208B0CD6A4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x63171ae9A9886e49547dd40aDB70F04EABA39D6b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9C907Ee3bC1da92095a81B806Ae8cBA6c597703c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd92Be5A1c565Db5256cDD537B875ED46111Bd8b0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xaB174fFA530C888649C44C4d21C849BBAaBc723F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x75183Ba0a9D7f0b006FBD2F130ED7DdBcb3c5907", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6856860ce8913e98A2baC1A922F309D9a16651fA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.1130011216954347, + "latestWeeklyApy": 2.2315236961691687, + "virtualPrice": 1019847105030836900 + }, + { + "type": "stable-factory", + "address": "0x90D5233b53436767fecACD1a783D3dA8Cc7395ED", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.07460042055993377, + "latestWeeklyApy": 0.07879324436199653, + "virtualPrice": 1008504569974049200 + }, + { + "type": "stable-factory", + "address": "0x39BA6943D7C0F415bce7A8c42A8C601eaD6Ee426", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.160167807964064, + "latestWeeklyApy": 2.2813891197698055, + "virtualPrice": 1019398920108960300 + }, + { + "type": "stable-factory", + "address": "0x17459b66F9f7b34703eDfeaB4902522c77c23103", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd7bB79aeE866672419999a0496D99c54741D67B5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.8941400186724069, + "virtualPrice": 1012904287254151600 + }, + { + "type": "stable-factory", + "address": "0x741aEa6c7707b39Bd950da945f84D6b8bA455D48", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x357547528d53C04420bc43Bc4f97252A4B860D9A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5483e0F934f5d3964A2C4d0eC423353cF4a57ba2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0Bd1e9CC4837f6F97323f21b9db039ccb6951668", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1005656395069212800 + }, + { + "type": "stable-factory", + "address": "0x58471208f900da54156e78F23c81fb943Da4a42e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7A56266db1CF99F26a3E737ba36C4004a66bD5b3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x59a3eF790bE58413471267b8D02993bc0ea2F669", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB54914d2246cCfCE19c5114731EC03Da94061daF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC00938fb7496536DaF6A0960A1568c4C630d3575", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4431216E70D24a593481FCec3702c9c1eA2921A8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF0f89e16c2a86fB81675A0A39701A8B688025146", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xae0babD1483ed944BeEd2e112021Ed01301A83aC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8Cb640A9Ce064Efae27BA7374c3765CB8f53503f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE847E4586afB047d651d11099758bA8E3d79b2ba", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8B82FFd12ccEBe325D8986444e9C46dE6356f963", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000242469699744500 + }, + { + "type": "stable-factory", + "address": "0x755D6688AD74661Add2FB29212ef9153D40fcA46", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0974D9d3bc463Fa17497aAFc3a87535553298FbE", + "rawVolume": 1037.865029, + "volumeUSD": 1037.4741262276998, + "latestDailyApy": 0.4922841546360468, + "latestWeeklyApy": 0.18748401293764427, + "virtualPrice": 1001588683004650100 + }, + { + "type": "stable-factory", + "address": "0x5ff0D82C7Abf63C4f125004D8419f3D1e0cffFa7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x533AB814e08087eB16f77eE9E7588c2Ec3d0e916", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xddB472a84347F56aDf00a9271cBB6D1dD6c75138", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8ccAF5828bc8D5AD8925Be26Da384e226382D115", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA8347B61Fb6c75e726DeFf9B9D8752257669f29D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa1B19f233Df60fe36d41C8afdf5be495511eac45", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x08135fcac68e8ABD7421d1FB3FDF1bcd176e1Ce0", + "rawVolume": 0.24827125844530157, + "volumeUSD": 0.3417952674880711, + "latestDailyApy": 4.326330818708279, + "latestWeeklyApy": 42.669945706742986, + "virtualPrice": 1009178506701836800 + }, + { + "type": "crypto", + "address": "0xB755B949C126C04e0348DD881a5cF55d424742B2", + "rawVolume": 37241.857894912464, + "volumeUSD": 62961.8732064957, + "latestDailyApy": 1.2680628248835943, + "latestWeeklyApy": 1.4093143313036607, + "virtualPrice": 1031429982171095600 + }, + { + "type": "crypto", + "address": "0x204f0620E7E7f07B780535711884835977679bba", + "rawVolume": 2110.4324559822016, + "volumeUSD": 1726.9936931242598, + "latestDailyApy": 0.20297151277341996, + "latestWeeklyApy": 0.10457554123075585, + "virtualPrice": 1001260982311236900 + } + ], + "totalVolume": 328874.3167204658, + "cryptoVolume": 64688.86689961996, + "cryptoShare": 19.669783747389353, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-celo.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-celo.json new file mode 100644 index 00000000..9939d767 --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-celo.json @@ -0,0 +1,350 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0x998395fEd908d33CF27115A1D9Ab6555def6cd45", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x32fD7e563c6521Ab4D59CE3277bcfBe3317CFd63", + "rawVolume": 14200.571426105269, + "volumeUSD": 14192.871872008627, + "latestDailyApy": 0.2583077597797079, + "latestWeeklyApy": 1.103695574606034, + "virtualPrice": 1002649605186608900 + }, + { + "type": "main", + "address": "0xAF7Ee5Ba02dC9879D24cb16597cd854e13f3aDa8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 122.47326212745926, + "virtualPrice": 17378027136750615000 + }, + { + "type": "main", + "address": "0x9Be5da31c7A42d7e045189ac1822D1fA5838e635", + "rawVolume": 6721.011078895062, + "volumeUSD": 6717.889468744192, + "latestDailyApy": 5.656443738854833, + "latestWeeklyApy": 3.8630884361038564, + "virtualPrice": 1004140904008910700 + }, + { + "type": "main", + "address": "0x3aE6Db8cE92335E9000EF5813c55B7fC5B578821", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.04758712131596177, + "virtualPrice": 1000680898476842100 + }, + { + "type": "main", + "address": "0x97aCA58d273725B261EaBD4F72343fFa96f83b76", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xf2E7eCaD15C1aEDD0B345583913348C2847e4509", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x51b4579200A338B093A838875b76cDb8A527e61f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x71487E7824c1f9c1d3430729B954DeE3bD87654d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x5f193a477230D377EFD1cf4acECA5582ce82aA2a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xA956Ee8B3cE716BdCdcA1Ef19B40301bf1B98EF2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x5f14d2A66d42EdC839966148801c256a43CFA16e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x48567Eb65AcC3bc8549B35d18247F4032480bB72", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x61EB31E505fdB48EBBB0A310be5f0b32aCeDE2cA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x0BCc11dFD335e4602994ff5A4B92766686Bebfff", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x9BE1ACc9b603aAd48ABf2490bD650b61CF52a99c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xF0C992185505CC0ba720B958b8a5B7E4e8e0E7F5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xd43D4aE8E09960F52dBfA217d7d2AEFb20d005f9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x7C230eDEc6fB0A4dC412a831b859dDcC469abC89", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xAe2243B353dBD4b68Af044cFDB02b8a9412D98f2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x6016a8F0B1265999902a731dC3d1Ad614D5C129c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xaaFFD0Bba2A3dF31Af17e32Bc50cEEb18bB7b930", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xb9285ae3c580258A145CBD5f63de7E7A3e9E7d5d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x709a67B0Ea6c491b8AEB35b20f92217113932263", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x287515E2EEF1A1Ec621aD5988387CEe33567Dc38", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x8739bdA99Fa342A90948534d70dB307FD9b0FBAe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x370e7A2b8301C5604AEc86b78D06DD1104F8e918", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x0ed6746DaB14Ffb24A01C6DAe52E8F552226D911", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x60aCCf072735f6A150943D5Cf9925ac9CC5e968e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xA85B3284Eb1437e205595388EFfa73d166e31515", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x405179921fb7350AC8853332dd3b77d617dBcFDf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x1db261CbCC9948492E836Ef69e9eD42a5e98c6fB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x90599e6176932349Aff8a38c2Ec7F989E8Cf31a1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xD668697230dcfDdd50F3d7eD6f213A0D007a119C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xD6fCA2050485AaE47364554cD4D82EA8030428D6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0xf4cab10dC19695AaCe14b7A16d7705b600ad5F73", + "rawVolume": 23809.423923519695, + "volumeUSD": 23799.84101630818, + "latestDailyApy": 0.009314437669183384, + "latestWeeklyApy": 0.16150354362052255, + "virtualPrice": 1000423457885664400 + }, + { + "type": "main", + "address": "0x619E2D2FcBBeFe346db03301B1aEaED4e6BE66CA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "main", + "address": "0x8eD88E3EB07a67459E7B99697d1f99094C9F7E6a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + } + ], + "totalVolume": 44710.602357061, + "cryptoVolume": 0, + "cryptoShare": 0, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-ethereum.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-ethereum.json new file mode 100644 index 00000000..c3c2bf2e --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-ethereum.json @@ -0,0 +1,6308 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7", + "rawVolume": 146867520.14877743, + "volumeUSD": 146858133.21885195, + "latestDailyApy": 1.6020937866985996, + "latestWeeklyApy": 0.6393800101247793, + "virtualPrice": 1026840870404025300 + }, + { + "type": "main", + "address": "0xDeBF20617708857ebe4F679508E7b7863a8A8EeE", + "rawVolume": 308938.3916985955, + "volumeUSD": 308938.3916985955, + "latestDailyApy": 6.453800195422277, + "latestWeeklyApy": 7.192182701890015, + "virtualPrice": 1120126501088206200 + }, + { + "type": "main", + "address": "0xA96A65c051bF88B4095Ee1f2451C2A9d43F53Ae2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.9091648995247839, + "latestWeeklyApy": 0.681866285123111, + "virtualPrice": 1075732942930917900 + }, + { + "type": "main", + "address": "0x79a8C46DeA5aDa233ABaFFD40F3A0A2B1e5A4F27", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.2303437636173475, + "latestWeeklyApy": 1.3673269821396605, + "virtualPrice": 21858966583397870 + }, + { + "type": "main", + "address": "0xA2B47E3D5c44877cca798226B7B8118F9BFb7A56", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 5.287646615539332, + "latestWeeklyApy": 3.3689125192412517, + "virtualPrice": 1124712273804368800 + }, + { + "type": "main", + "address": "0x0Ce6a5fF5217e38315f87032CF90686C96627CAA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0008746937909309693, + "virtualPrice": 1005952635274406900 + }, + { + "type": "main", + "address": "0x4CA9b3063Ec5866A4B82E437059D2C43d1be596F", + "rawVolume": 1.009381145, + "volumeUSD": 29455.370874310756, + "latestDailyApy": 0.005563883448767015, + "latestWeeklyApy": 0.03973372492009908, + "virtualPrice": 1011573714321013800 + }, + { + "type": "main", + "address": "0x2dded6Da1BF5DBdF597C45fcFaa3194e53EcfeAF", + "rawVolume": 732.94965732, + "volumeUSD": 8.328783344528464, + "latestDailyApy": 13.736670594468992, + "latestWeeklyApy": 13.116222253473264, + "virtualPrice": 1113259980998622100 + }, + { + "type": "main", + "address": "0xF178C0b5Bb7e7aBF4e12A4838C7b7c5bA2C623c0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0007395979780833173, + "virtualPrice": 1002864528036528600 + }, + { + "type": "main", + "address": "0x06364f10B501e868329afBc005b3492902d6C763", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.28827095711310147, + "virtualPrice": 75340736332388930 + }, + { + "type": "main", + "address": "0x93054188d876f558f4a66B2EF1d97d16eDf0895B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0005505491095014747, + "virtualPrice": 1024784940066115100 + }, + { + "type": "main", + "address": "0xEB16Ae0052ed37f479f7fe63849198Df1765a733", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 3.8764429310499615, + "latestWeeklyApy": 4.916143281404883, + "virtualPrice": 1097641974811201200 + }, + { + "type": "main", + "address": "0x7fC77b5c7614E1533320Ea6DDc2Eb61fa00A9714", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.005980154793494563, + "latestWeeklyApy": 0.017301907582956133, + "virtualPrice": 1020048466519858200 + }, + { + "type": "main", + "address": "0xc5424B857f758E906013F3555Dad202e4bdB4567", + "rawVolume": 275.6981460270223, + "volumeUSD": 505298.8830841823, + "latestDailyApy": 0.14243237570736866, + "latestWeeklyApy": 0.12206371738503474, + "virtualPrice": 1018470963578326900 + }, + { + "type": "main", + "address": "0xDC24316b9AE028F1497c275EB9192a3Ea0f67022", + "rawVolume": 25277.994756301192, + "volumeUSD": 46361815.6675939, + "latestDailyApy": 2.0494675775561078, + "latestWeeklyApy": 1.7656584803144915, + "virtualPrice": 1077870506784250800 + }, + { + "type": "main", + "address": "0xA5407eAE9Ba41422680e2e00537571bcC53efBfD", + "rawVolume": 6921181.371819259, + "volumeUSD": 6919767.096470159, + "latestDailyApy": 1.136854803469367, + "latestWeeklyApy": 0.3396969737973654, + "virtualPrice": 1064973612881342700 + }, + { + "type": "main", + "address": "0x52EA46506B9CC5Ef470C5bf89f17Dc28bB35D85C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.7909366651576608, + "latestWeeklyApy": 1.8160133848532878, + "virtualPrice": 2958801009994086400 + }, + { + "type": "main", + "address": "0x45F783CCE6B7FF23B2ab2D70e416cdb7D6055f51", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 12.460644226966622, + "latestWeeklyApy": 6.785517963337573, + "virtualPrice": 11992792962699596 + }, + { + "type": "main", + "address": "0x8038C01A0390a8c547446a0b2c18fc9aEFEcc10c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.48278445543867843, + "latestWeeklyApy": 0.19332769153370677, + "virtualPrice": 1025222789439724200 + }, + { + "type": "main", + "address": "0x4f062658EaAF2C1ccf8C8e36D6824CDf41167956", + "rawVolume": 169766.612082, + "volumeUSD": 167602.21196865826, + "latestDailyApy": 3.662305149687617, + "latestWeeklyApy": 1.2795340457195659, + "virtualPrice": 1038289282520471300 + }, + { + "type": "main", + "address": "0x3eF6A01A0f81D6046290f3e2A8c5b843e738E604", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.15451048932124678, + "latestWeeklyApy": 0.06193790339816818, + "virtualPrice": 1055142697887715000 + }, + { + "type": "main", + "address": "0xE7a24EF0C5e95Ffb0f6684b813A78F2a3AD7D171", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6706426353569661, + "latestWeeklyApy": 0.26840227242035386, + "virtualPrice": 1013285644126182000 + }, + { + "type": "main", + "address": "0x8474DdbE98F5aA3179B3B3F5942D724aFcdec9f6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.863990161641004, + "latestWeeklyApy": 0.32141973109418576, + "virtualPrice": 1022264376101449000 + }, + { + "type": "main", + "address": "0xC18cC39da8b11dA8c3541C598eE022258F9744da", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.5960801207041344, + "latestWeeklyApy": 0.23861407728478223, + "virtualPrice": 1032187381709992200 + }, + { + "type": "main", + "address": "0x3E01dD8a5E1fb3481F0F589056b428Fc308AF0Fb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.0741514605891123, + "latestWeeklyApy": 0.4293666199468804, + "virtualPrice": 2084361265700746200 + }, + { + "type": "main", + "address": "0x0f9cb53Ebe405d49A0bbdBD291A65Ff571bC83e1", + "rawVolume": 277.366857436722, + "volumeUSD": 275.3563971207569, + "latestDailyApy": 0.1884538091276644, + "latestWeeklyApy": 0.13685192912797906, + "virtualPrice": 1066668333248525300 + }, + { + "type": "main", + "address": "0x42d7025938bEc20B69cBae5A77421082407f053A", + "rawVolume": 735.1619279407862, + "volumeUSD": 726.0071611586786, + "latestDailyApy": 0.33718631990606873, + "latestWeeklyApy": 0.13557802616859238, + "virtualPrice": 1010983306222412400 + }, + { + "type": "main", + "address": "0x890f4e345B1dAED0367A877a1612f86A1f86985f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.2468147457620029, + "latestWeeklyApy": 0.11408011481472968, + "virtualPrice": 1068907813191306200 + }, + { + "type": "main", + "address": "0x071c661B4DeefB59E2a3DdB20Db036821eeE8F4b", + "rawVolume": 0.072914335, + "volumeUSD": 2074.329998466917, + "latestDailyApy": 0.06914970017670719, + "latestWeeklyApy": 0.3115706746481539, + "virtualPrice": 1023334558788405500 + }, + { + "type": "main", + "address": "0xd81dA8D904b52208541Bade1bD6595D8a251F8dd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0014800487394550643, + "latestWeeklyApy": 0.004281930960470248, + "virtualPrice": 1009113986178807200 + }, + { + "type": "main", + "address": "0x7F55DDe206dbAD629C080068923b36fe9D6bDBeF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.08628498675276042, + "latestWeeklyApy": 0.039020945624401726, + "virtualPrice": 1012336961052726800 + }, + { + "type": "main", + "address": "0xC25099792E9349C7DD09759744ea681C7de2cb66", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.005374503978905487, + "latestWeeklyApy": 0.016959872258004438, + "virtualPrice": 1014608403858369000 + }, + { + "type": "main", + "address": "0xEcd5e75AFb02eFa118AF914515D6521aaBd189F1", + "rawVolume": 55918.80702912893, + "volumeUSD": 55170.69383894955, + "latestDailyApy": 0.9146953006444747, + "latestWeeklyApy": 1.2609245699097382, + "virtualPrice": 1013253279876492900 + }, + { + "type": "stable-factory", + "address": "0xEd279fDD11cA84bEef15AF5D39BB4d4bEE23F0cA", + "rawVolume": 1990505.894462074, + "volumeUSD": 1964062.8889930346, + "latestDailyApy": 1.5416080034034385, + "latestWeeklyApy": 0.6179810928701679, + "virtualPrice": 1025275378509612400 + }, + { + "type": "stable-factory", + "address": "0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B", + "rawVolume": 314225.50858391414, + "volumeUSD": 310670.7437908164, + "latestDailyApy": 0.6950868790650766, + "latestWeeklyApy": 0.374655591861317, + "virtualPrice": 1011068575633077800 + }, + { + "type": "main", + "address": "0x4807862AA8b2bF68830e4C8dc86D0e9A998e085a", + "rawVolume": 849933.0022212055, + "volumeUSD": 838650.4634113406, + "latestDailyApy": 1.250577706676026, + "latestWeeklyApy": 1.9816377629207294, + "virtualPrice": 1021192530432490800 + }, + { + "type": "main", + "address": "0xF9440930043eb3997fc70e1339dBb11F341de7A8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.892135241646109, + "latestWeeklyApy": 1.6092321029003154, + "virtualPrice": 1037839092989410700 + }, + { + "type": "stable-factory", + "address": "0x43b4FdFD4Ff969587185cDB6f0BD875c5Fc83f8c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.5388548101716406, + "latestWeeklyApy": 0.20779308129805774, + "virtualPrice": 1012076870270759200 + }, + { + "type": "main", + "address": "0x80466c64868E1ab14a1Ddf27A676C3fcBE638Fe5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 3.628939717330648, + "virtualPrice": 1024231379142217000 + }, + { + "type": "main", + "address": "0x618788357D0EBd8A37e763ADab3bc575D54c2C7d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6951850092311362, + "latestWeeklyApy": 0.39474746068639543, + "virtualPrice": 978282796171557100 + }, + { + "type": "stable-factory", + "address": "0x5a6A4D54456819380173272A5E8E9B9904BdF41B", + "rawVolume": 1429165.4895196618, + "volumeUSD": 1409806.424860551, + "latestDailyApy": 0.46998692290241006, + "latestWeeklyApy": 0.9310813757702041, + "virtualPrice": 1011384053261371600 + }, + { + "type": "stable-factory", + "address": "0xFD5dB7463a3aB53fD211b4af195c5BCCC1A03890", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1009600535958499300 + }, + { + "type": "main", + "address": "0x4e0915C88bC70750D68C481540F081fEFaF22273", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.020851778008390554, + "virtualPrice": 1007534375600997400 + }, + { + "type": "main", + "address": "0x1005F7406f32a61BD760CfA14aCCd2737913d546", + "rawVolume": 8.164184, + "volumeUSD": 8.162729696738758, + "latestDailyApy": 0.21381156982642757, + "latestWeeklyApy": 0.1870020502553249, + "virtualPrice": 1006799568309908200 + }, + { + "type": "main", + "address": "0xDcEF968d416a41Cdac0ED8702fAC8128A64241A2", + "rawVolume": 2180894.406167563, + "volumeUSD": 2180670.4684152897, + "latestDailyApy": 0.04123254285068878, + "latestWeeklyApy": 0.07505587007352599, + "virtualPrice": 1001337338058810000 + }, + { + "type": "main", + "address": "0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577", + "rawVolume": 1347.2839458920218, + "volumeUSD": 2468430.188299284, + "latestDailyApy": 0.06546133185207914, + "latestWeeklyApy": 0.12994698559232187, + "virtualPrice": 1001267467771013100 + }, + { + "type": "main", + "address": "0xf253f83AcA21aAbD2A20553AE0BF7F65C755A07F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.04211775119147276, + "latestWeeklyApy": 0.14132977679759406, + "virtualPrice": 1002159683433236700 + }, + { + "type": "main", + "address": "0xaE34574AC03A15cd58A92DC79De7B1A0800F1CE3", + "rawVolume": 743815.8726175368, + "volumeUSD": 743739.6237709124, + "latestDailyApy": 0.051203112160758124, + "latestWeeklyApy": 0.305111272484182, + "virtualPrice": 1000288957359861000 + }, + { + "type": "main", + "address": "0xBfAb6FA95E0091ed66058ad493189D2cB29385E6", + "rawVolume": 33.833621724558476, + "volumeUSD": 62162.22413401627, + "latestDailyApy": 2.8069496515027437, + "latestWeeklyApy": 3.495303909399672, + "virtualPrice": 1008099227528094600 + }, + { + "type": "stable-factory", + "address": "0x1F71f05CF491595652378Fe94B7820344A551B8E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8461A004b50d321CB22B7d034969cE6803911899", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1004513099702841500 + }, + { + "type": "stable-factory", + "address": "0x19b080FE1ffA0553469D20Ca36219F17Fcf03859", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.03749763723888133, + "virtualPrice": 1013472471603086600 + }, + { + "type": "stable-factory", + "address": "0x621F13Bf667207335C601F8C89eA5eC260bAdA9A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xED24FE718EFFC6B2Fc59eeaA5C5f51dD079AB6ED", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6c7Fc04FEE277eABDd387C5B498A8D0f4CB9C6A6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDa5B670CcD418a187a3066674A8002Adc9356Ad1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000214883452329000 + }, + { + "type": "stable-factory", + "address": "0x99AE07e7Ab61DCCE4383A86d14F61C68CdCCbf27", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x87650D7bbfC3A9F10587d7778206671719d9910D", + "rawVolume": 139359.78853156161, + "volumeUSD": 137548.037534343, + "latestDailyApy": 1.0977850656544774, + "latestWeeklyApy": 0.43707702848483354, + "virtualPrice": 1008359819267009400 + }, + { + "type": "stable-factory", + "address": "0x6A274dE3e2462c7614702474D64d376729831dCa", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 5.9261400099645645, + "latestWeeklyApy": 7.057370803226259, + "virtualPrice": 1045844527194751000 + }, + { + "type": "stable-factory", + "address": "0x06cb22615BA53E60D67Bf6C341a0fD5E718E1655", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.812209347809989, + "latestWeeklyApy": 0.37473826617160366, + "virtualPrice": 1008371986968898600 + }, + { + "type": "stable-factory", + "address": "0xf5A95ccDe486B5fE98852bB02d8eC80a4b9422BD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.07391548203241616, + "latestWeeklyApy": 0.029636910240804504, + "virtualPrice": 17764104972985127000 + }, + { + "type": "stable-factory", + "address": "0x2009f19A8B46642E92Ea19adCdFB23ab05fC20A6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x883F7d4B6B24F8BF1dB980951Ad08930D9AEC6Bc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x46f5ab27914A670CFE260A2DEDb87f84c264835f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2206cF41E7Db9393a3BcbB6Ad35d344811523b46", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x67d9eAe741944D4402eB0D1cB3bC3a168EC1764c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3299542779270581, + "latestWeeklyApy": 0.13219106589930085, + "virtualPrice": 1137019040606397000 + }, + { + "type": "stable-factory", + "address": "0x9D0464996170c6B9e75eED71c68B99dDEDf279e8", + "rawVolume": 484058.3153271568, + "volumeUSD": 292223.09464639577, + "latestDailyApy": 1.108502417164825, + "latestWeeklyApy": 2.497477311677865, + "virtualPrice": 1026973607602793200 + }, + { + "type": "stable-factory", + "address": "0x5B3b5DF2BF2B6543f78e053bD91C4Bdd820929f1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.15879704183021648, + "latestWeeklyApy": 0.06365525724141285, + "virtualPrice": 1004588179828596900 + }, + { + "type": "stable-factory", + "address": "0x3CFAa1596777CAD9f5004F9a0c443d912E262243", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003238754973575600 + }, + { + "type": "stable-factory", + "address": "0x9f6664205988C3bf4B12B851c075102714869535", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6860518248010594, + "latestWeeklyApy": 0.2745558935225656, + "virtualPrice": 1014386683203763600 + }, + { + "type": "stable-factory", + "address": "0x6d0Bd8365e2fCd0c2acf7d218f629A319B6c9d47", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAA5A67c256e27A5d80712c51971408db3370927D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6093254876150755, + "latestWeeklyApy": 0.3872746037159702, + "virtualPrice": 1012506103000338000 + }, + { + "type": "stable-factory", + "address": "0x8818a9bb44Fbf33502bE7c15c500d0C783B73067", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003831308748682600 + }, + { + "type": "stable-factory", + "address": "0x3F1B0278A9ee595635B61817630cC19DE792f506", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1004252629396249700 + }, + { + "type": "stable-factory", + "address": "0xD6Ac1CB9019137a896343Da59dDE6d097F710538", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0007216554856581681, + "virtualPrice": 1003725688493777200 + }, + { + "type": "stable-factory", + "address": "0x9c2C8910F113181783c249d8F6Aa41b51Cde0f0c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0011012002764321238, + "virtualPrice": 1003488377827266400 + }, + { + "type": "stable-factory", + "address": "0xc8a7C1c4B748970F57cA59326BcD49F5c9dc43E3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1070261494377024900 + }, + { + "type": "stable-factory", + "address": "0x3Fb78e61784C9c637D560eDE23Ad57CA1294c14a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1047967476787554000 + }, + { + "type": "stable-factory", + "address": "0x737bC004136f66aE3F8fd5a1199e81c18388097B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4e52Cfc80679F402d10f7766fa3f85351A7C2530", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2De8c952871317fB9F22C73BB66BF86A1EeBe1a5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x08Eaf78d40abFA6C341F05692eB48eDCA425Ce04", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC4C319E2D4d66CcA4464C0c2B32c9Bd23ebe784e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x66b2e9B25F8ABa6B4A10350c785d63bAdE5A11E9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE76ebD4f9FA58E5269D3cD032b055b443239e664", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfa65aa60a9D45623c57D383fb4cf8Fb8b854cC4D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0003430272925486477, + "latestWeeklyApy": 0.0009924029656049882, + "virtualPrice": 1550089552087420200 + }, + { + "type": "stable-factory", + "address": "0xeD09ca8275dFfb09c632B6EA58C035a851F73616", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAc5f019a302c4c8caAC0a7F28183ac62E6e80034", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8009198522083372, + "latestWeeklyApy": 0.3204135080552728, + "virtualPrice": 1003860887904098600 + }, + { + "type": "stable-factory", + "address": "0xbcb91E689114B9Cc865AD7871845C95241Df4105", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.8473936196160334, + "latestWeeklyApy": 1.2860368146429435, + "virtualPrice": 1065066324967738900 + }, + { + "type": "stable-factory", + "address": "0xC2F5FeA5197a3d92736500Fd7733Fcc7a3bBDf3F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.539569560520059, + "latestWeeklyApy": 0.21602964121938406, + "virtualPrice": 1003198695128221700 + }, + { + "type": "stable-factory", + "address": "0x705DA2596cf6aaA2FEA36f2a59985EC9e8aeC7E2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.1512633506358005, + "latestWeeklyApy": 0.4600886029073603, + "virtualPrice": 1007503892500045400 + }, + { + "type": "stable-factory", + "address": "0x6870F9b4DD5d34C7FC53D0d85D9dBd1aAB339BF7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.2998791708936688, + "latestWeeklyApy": 0.12015600137815774, + "virtualPrice": 1005923017044172400 + }, + { + "type": "stable-factory", + "address": "0x55A8a39bc9694714E2874c1ce77aa1E599461E18", + "rawVolume": 11358.961062117112, + "volumeUSD": 10726.196412867226, + "latestDailyApy": 0.03064240886734293, + "latestWeeklyApy": 0.0043649167524639765, + "virtualPrice": 1011553601970512600 + }, + { + "type": "stable-factory", + "address": "0xf03bD3cfE85f00bF5819AC20f0870cE8a8d1F0D8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1004638233259634400 + }, + { + "type": "stable-factory", + "address": "0xC8781F2193e2CB861c9325677D98297F94a0dfd3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9f4A88da14F2b6DBc785C1Db3511A53B8F342bde", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x04c90C198b2eFF55716079bc06d7CCc4aa4d7512", + "rawVolume": 390.5442829078611, + "volumeUSD": 1249.6010016783896, + "latestDailyApy": 0, + "latestWeeklyApy": 0.38035014570625414, + "virtualPrice": 1003869884289026700 + }, + { + "type": "stable-factory", + "address": "0xCEAF7747579696A2F0bb206a14210e3c9e6fB269", + "rawVolume": 74470.75210313058, + "volumeUSD": 18113.998432727363, + "latestDailyApy": 13.458985708723903, + "latestWeeklyApy": 11.727009737683503, + "virtualPrice": 1059640782178048500 + }, + { + "type": "stable-factory", + "address": "0x9fED7a930d86Dfe5980040E18C92B1B0d381eC19", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf0C081020B9d06EB1b33e357767c00Ccc138bE7c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xFB9a265b5a1f52d97838Ec7274A0b1442efAcC87", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002420127139841300 + }, + { + "type": "stable-factory", + "address": "0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.005925799115114039, + "virtualPrice": 1006714037325754500 + }, + { + "type": "stable-factory", + "address": "0x1F6bb2a7a2A84d08bb821B89E38cA651175aeDd4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc270b3B858c335B6BA5D5b10e2Da8a09976005ad", + "rawVolume": 138688.81959871895, + "volumeUSD": 137275.32901865907, + "latestDailyApy": 8.031179529680399, + "latestWeeklyApy": 2.0513300899065445, + "virtualPrice": 1026864814555313900 + }, + { + "type": "stable-factory", + "address": "0xFbdCA68601f835b27790D98bbb8eC7f05FDEaA9B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.00307569450730405, + "latestWeeklyApy": 0.00889842595959145, + "virtualPrice": 1007509651112059800 + }, + { + "type": "stable-factory", + "address": "0x8DF0713B2a047c45a0BEf21c3B309bcEF91afd34", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x148a88719bA0B34F16e0f5A7537DA73Bdc9C2A2A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x45a8CC73EC100306af64AB2CcB7B12E70EC549A8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xcbD5cC53C5b846671C6434Ab301AD4d210c21184", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xE667c793513ecBD74Fb53Bb4b91fDae02BFC092D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb9446c4Ef5EBE66268dA6700D26f96273DE3d571", + "rawVolume": 164483.16880207526, + "volumeUSD": 179460.7216981476, + "latestDailyApy": 0.37097292114876, + "latestWeeklyApy": 0.20941003439700623, + "virtualPrice": 1008319342317174100 + }, + { + "type": "stable-factory", + "address": "0x06d39e95977349431E3d800d49C63B4D472e10FB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1033812EFeC8716BBaE0c19e5678698D25E26eDf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.20601494738843318, + "latestWeeklyApy": 0.46187011967584457, + "virtualPrice": 1036610965009658900 + }, + { + "type": "stable-factory", + "address": "0x679CE2A8B3180f5a00e0DCCA26783016799e9A58", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6d8fF88973b15dF3e2dc6ABb9aF29Cad8C2B5Ef5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.1524882790116866, + "latestWeeklyApy": 0.06112477095252533, + "virtualPrice": 1002125175780236500 + }, + { + "type": "stable-factory", + "address": "0x8083b047E962CA45B210E28aC755fbdA3D773c5B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3b22B869ba3c0a495Cead0B8A009b70886d37fAC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6925633145257404, + "latestWeeklyApy": 0.2771562908632452, + "virtualPrice": 1003247685093461600 + }, + { + "type": "stable-factory", + "address": "0xbB2dC673E1091abCA3eaDB622b18f6D4634b2CD9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001586764595135600 + }, + { + "type": "stable-factory", + "address": "0x1c65bA665ce39cfe85639227eccf17Be2B167058", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa0D35fAead5299Bf18eFbB5dEfd1Ec6D4AB4Ef3B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf083FBa98dED0f9C970e5a418500bad08D8b9732", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.08534011706549105, + "virtualPrice": 1010216431932291600 + }, + { + "type": "stable-factory", + "address": "0x76264772707c8Bc24261516b560cBF3Cbe6F7819", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8336545152067165, + "latestWeeklyApy": 0.38216717568013703, + "virtualPrice": 1004128264903975700 + }, + { + "type": "stable-factory", + "address": "0xB37D6c07482Bc11cd28a1f11f1a6ad7b66Dec933", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.2489928256486973, + "virtualPrice": 1012608556023488900 + }, + { + "type": "stable-factory", + "address": "0x694650a0B2866472c2EEA27827CE6253C1D13074", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000858165681095300 + }, + { + "type": "stable-factory", + "address": "0x8ed10E4e307822b969BCDaffD49095235f6F892b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.41805252817317395, + "latestWeeklyApy": 0.16744463028515177, + "virtualPrice": 1001282315219055100 + }, + { + "type": "stable-factory", + "address": "0x3a70DfA7d2262988064A2D051dd47521E43c9BdD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.43304260465553135, + "latestWeeklyApy": 0.17344061291053592, + "virtualPrice": 19759501891942720000 + }, + { + "type": "stable-factory", + "address": "0x7abD51BbA7f9F6Ae87aC77e1eA1C5783adA56e5c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.4725269812031474, + "latestWeeklyApy": 0.18923159373860354, + "virtualPrice": 1003956852648218400 + }, + { + "type": "stable-factory", + "address": "0x5b78b93Fa851c357586915c7bA7258b762eB1ba0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0FaFaFD3C393ead5F5129cFC7e0E12367088c473", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8625062570569497, + "latestWeeklyApy": 0.3449872662538489, + "virtualPrice": 1004044590373403000 + }, + { + "type": "stable-factory", + "address": "0xd05ce4AB1f4fb0C0e1b65ebE3Ed7F2dcFc6ccf20", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x97aEB34ac6561146DD9cE191EFD5634F6465DeF4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9462F2b3C9bEeA8afc334Cdb1D1382B072e494eA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000193510592412700 + }, + { + "type": "stable-factory", + "address": "0x50B0D9171160d6EB8Aa39E090Da51E7e078E81c4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000266447667302400 + }, + { + "type": "stable-factory", + "address": "0x447Ddd4960d9fdBF6af9a790560d0AF76795CB08", + "rawVolume": 82.69396458056676, + "volumeUSD": 151770.86089508154, + "latestDailyApy": 3.4945247478723642, + "latestWeeklyApy": 3.5743943084299747, + "virtualPrice": 1003261669987713200 + }, + { + "type": "stable-factory", + "address": "0xCaf8703f8664731cEd11f63bB0570E53Ab4600A9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000189992490241900 + }, + { + "type": "stable-factory", + "address": "0x01FE650EF2f8e2982295489AE6aDc1413bF6011F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC250B22d15e43d95fBE27B12d98B6098f8493eaC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000155619970413800 + }, + { + "type": "stable-factory", + "address": "0x0437ac6109e8A366A1F4816edF312A36952DB856", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000328675028590800 + }, + { + "type": "stable-factory", + "address": "0x9001a452d39A8710D27ED5c2E10431C13F5Fba74", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000280394840338200 + }, + { + "type": "stable-factory", + "address": "0x961226B64AD373275130234145b96D100Dc0b655", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000183803504526200 + }, + { + "type": "stable-factory", + "address": "0xe7E4366f6ED6aFd23e88154C00B532BDc0352333", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0x9809f2B973bDB056D24bC2b6571EA1f23dB4e861", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x04EcD49246bf5143E43e2305136c46AeB6fAd400", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xC9467E453620f16b57a34a770C6bceBECe002587", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 1000000, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8c524635d52bd7b1Bd55E062303177a7d916C046", + "rawVolume": 163.3495317457452, + "volumeUSD": 1012.9782575840244, + "latestDailyApy": 0, + "latestWeeklyApy": 0.17540113970202498, + "virtualPrice": 1001875667045135100 + }, + { + "type": "stable-factory", + "address": "0x48fF31bBbD8Ab553Ebe7cBD84e1eA3dBa8f54957", + "rawVolume": 30355.508037477943, + "volumeUSD": 852.4895106118641, + "latestDailyApy": 0.020347466494707867, + "latestWeeklyApy": 0.027453836872415316, + "virtualPrice": 1002193723540072100 + }, + { + "type": "stable-factory", + "address": "0x9CA41a2DaB3CEE15308998868ca644e2e3be5C59", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000614502146935800 + }, + { + "type": "stable-factory", + "address": "0xD652c40fBb3f06d6B58Cb9aa9CFF063eE63d465D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd1011B637F979a5d9093Df1B32e7736c289024F5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE95E4c2dAC312F31Dc605533D5A4d0aF42579308", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.8590720681731954, + "latestWeeklyApy": 1.6358922483890481, + "virtualPrice": 1031703069236031400 + }, + { + "type": "stable-factory", + "address": "0x6577b46a566aDe492ad551a315c04DE3Fbe3DbFa", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDB8Cc7eCeD700A4bfFdE98013760Ff31FF9408D8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.1859467007856672, + "latestWeeklyApy": 0.47389405768454296, + "virtualPrice": 1006001209643948700 + }, + { + "type": "stable-factory", + "address": "0x323b3a6e7a71c1b8C257606Ef0364D61df8AA525", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf7b55C3732aD8b2c2dA7c24f30A69f55c54FB717", + "rawVolume": 67276.43588700292, + "volumeUSD": 41026.60919804068, + "latestDailyApy": 0.45959640151729264, + "latestWeeklyApy": 0.912503415422039, + "virtualPrice": 1003763940742073100 + }, + { + "type": "stable-factory", + "address": "0xF74bEc4bcf432A17470e9C4F71542f2677B9AF6a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5a59Fd6018186471727FAAeAE4e57890aBC49B08", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000818249774629600 + }, + { + "type": "stable-factory", + "address": "0xeb07FcD7A8627281845ba3aCbed24435802d4B52", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8EE017541375F6Bcd802ba119bdDC94dad6911A1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8111297549848517, + "latestWeeklyApy": 0.48810542229813514, + "virtualPrice": 1005271105897704100 + }, + { + "type": "stable-factory", + "address": "0xaa6a4f8DDcca7d3B9E7ad38C8338a2FCfdB1E713", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8c1de7a8F8852197B109Daf75A6fbB685C013315", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe6b5CC1B4b47305c58392CE3D359B10282FC36Ea", + "rawVolume": 15202.709963710702, + "volumeUSD": 15198.484050919007, + "latestDailyApy": 0.8218971231585215, + "latestWeeklyApy": 0.3314132272749237, + "virtualPrice": 1006961329049177500 + }, + { + "type": "stable-factory", + "address": "0x828b154032950C8ff7CF8085D841723Db2696056", + "rawVolume": 1166.83545757413, + "volumeUSD": 2126061.851822132, + "latestDailyApy": 4.727019407337685, + "latestWeeklyApy": 3.1482794572605943, + "virtualPrice": 1051336364092121500 + }, + { + "type": "stable-factory", + "address": "0x6F80b9543Dd5A0408F162Fe2A1675dB70A2cb77D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xbf5D9DeCCCC762fA7B5eb9faC668c803D42D97b6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1977870a4c18a728C19Dd4eB6542451DF06e0A4b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002805400623452700 + }, + { + "type": "stable-factory", + "address": "0x07350D8c30D463179DE6A58764C21558DB66Dd9c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC38cA214c7a82b1EE977232F045aFb6d425cfFf0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5c6A6Cf9Ae657A73b98454D17986AF41fC7b44ee", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3399071633432893, + "latestWeeklyApy": 0.1361726098226379, + "virtualPrice": 1003670379245294000 + }, + { + "type": "stable-factory", + "address": "0x9558b18f021FC3cBa1c9B777603829A42244818b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xee60f4A3487c07b4570cCfFEF315401C4c5744c8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF38a67dA7a3A12aA12A9981ae6a79C0fdDdd71aB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdaDfD00A2bBEb1abc4936b1644a3033e1B653228", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000384776792047700 + }, + { + "type": "stable-factory", + "address": "0xeE98d56f60A5905CbB52348c8719B247DaFe60ec", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1034155266965082600 + }, + { + "type": "stable-factory", + "address": "0x8116E7c29f60FdacF3954891A038f845565EF5A0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3649925687779998, + "latestWeeklyApy": 0.1462164361723861, + "virtualPrice": 1053852262849792100 + }, + { + "type": "stable-factory", + "address": "0xdE495223F7cD7EE0cDe1AddbD6836046bBdf3ad3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0270100655776373, + "latestWeeklyApy": 0.010831582684844854, + "virtualPrice": 1003097120176829700 + }, + { + "type": "stable-factory", + "address": "0x943b7e761f34866DA12c9b84C99888Fe2Ef607c5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7E46fd8a30869aa9ed55af031067Df666EfE87da", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x63594B2011a0F2616586Bf3EeF8096d42272F916", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6961989028476223, + "latestWeeklyApy": 1.5668426020368997, + "virtualPrice": 1038904907648483600 + }, + { + "type": "stable-factory", + "address": "0x67C7f0a63BA70a2dAc69477B716551FC921aed00", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.1486619037937018, + "latestWeeklyApy": 0.459048114452032, + "virtualPrice": 1003263825504441600 + }, + { + "type": "stable-factory", + "address": "0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20", + "rawVolume": 379.7290645, + "volumeUSD": 379.4622842123457, + "latestDailyApy": 0.020614438752342146, + "latestWeeklyApy": 0.06747000948201798, + "virtualPrice": 1003999505009202200 + }, + { + "type": "stable-factory", + "address": "0xe3c190c57b5959Ae62EfE3B6797058B76bA2f5eF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.02484778727829262, + "latestWeeklyApy": 1.803739596402787, + "virtualPrice": 1006094833624697500 + }, + { + "type": "stable-factory", + "address": "0x497CE58F34605B9944E6b15EcafE6b001206fd25", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.09410358653583195, + "latestWeeklyApy": 0.2427506114567768, + "virtualPrice": 1004604209661458300 + }, + { + "type": "stable-factory", + "address": "0x04b727C7e246CA70d496ecF52E6b6280f3c8077D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.019807130931015493, + "latestWeeklyApy": 0.036052031048883215, + "virtualPrice": 1002770246109174900 + }, + { + "type": "stable-factory", + "address": "0x2Ed1D3E7771D64feeD7AE8F25b4032c8dd2D0B99", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93", + "rawVolume": 1465.561773891251, + "volumeUSD": 1465.9279190747402, + "latestDailyApy": 0.030439900535350617, + "latestWeeklyApy": 0.05540761363893587, + "virtualPrice": 1003985689913589500 + }, + { + "type": "stable-factory", + "address": "0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.02725817308046885, + "latestWeeklyApy": 1.0817735850848331, + "virtualPrice": 1005263600234690000 + }, + { + "type": "stable-factory", + "address": "0x50C8F34CEA0E65535fC2525B637ccd8a07c90896", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x642562115cf5A5e72Ab517E6448EC8b61843dac9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893", + "rawVolume": 5513.627631216639, + "volumeUSD": 5507.300091474308, + "latestDailyApy": 2.3726433603072694, + "latestWeeklyApy": 1.383688003785144, + "virtualPrice": 1006396874009066500 + }, + { + "type": "stable-factory", + "address": "0xe7A3b38c39F97E977723bd1239C3470702568e7B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3964545787833895, + "latestWeeklyApy": 0.2696538627533718, + "virtualPrice": 1002981906002688600 + }, + { + "type": "stable-factory", + "address": "0xD7C10449A6D134A9ed37e2922F8474EAc6E5c100", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB30dA2376F63De30b42dC055C93fa474F31330A5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.028405361491268266, + "latestWeeklyApy": 0.031158668828168423, + "virtualPrice": 1002007318410261400 + }, + { + "type": "stable-factory", + "address": "0xF70c5c65CF6A28E7a4483F52511e5a29678e4fFD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x649c1B0e70A80210bcFB3C4eb5DDAd175B90BE4d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x875DF0bA24ccD867f8217593ee27253280772A97", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC69b00366F07840fF939cc9fdF866C3dCCB10804", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000008416926924200 + }, + { + "type": "stable-factory", + "address": "0xc9C32cd16Bf7eFB85Ff14e0c8603cc90F6F2eE49", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.7978707552143804, + "latestWeeklyApy": 0.33041295641367263, + "virtualPrice": 1002583596538224500 + }, + { + "type": "stable-factory", + "address": "0x48fcFFa86fb24bDEB45B5739F7Ced24095A7c8e8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb3bC1833aC51aAcEA92acd551FBe1Ab7eDc59EdF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7c0316C925E12eBfC55e0f325794B43eaD425157", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000080466623906200 + }, + { + "type": "stable-factory", + "address": "0x83D78bf3f861e898cCA47BD076b3839Ab5469d70", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000154730398309000 + }, + { + "type": "stable-factory", + "address": "0x0AaCe9b6c491d5cD9F80665A2fCc1af09e9CCf00", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.002679278316408684, + "latestWeeklyApy": 0.004876382074225916, + "virtualPrice": 1000320963626863100 + }, + { + "type": "stable-factory", + "address": "0x92Da88e2e6f96cC7c667Cd1367BD090ADF3c6053", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.7713820285793371, + "latestWeeklyApy": 0.3086248552427451, + "virtualPrice": 1002331380925017700 + }, + { + "type": "stable-factory", + "address": "0x85F102bE3a76165Be9668bE0bF36E906a488FD33", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x87872BE0c56Ef97156f2617b3083D22423Fc62E9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc5481720517e1B170CF1d19cEaaBE07c37896Eb2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.0652989570531846, + "latestWeeklyApy": 0.4258467807506605, + "virtualPrice": 1003205753405913200 + }, + { + "type": "stable-factory", + "address": "0x8b3138DF9aA1F60648C65C67D6Ff646BE305788B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xBA866791F98098df41C3187D4D5433be29215c79", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xBa3436Fd341F2C8A928452Db3C5A3670d1d5Cc73", + "rawVolume": 127345.38894187109, + "volumeUSD": 138986.84053860558, + "latestDailyApy": 0.34067662575028024, + "latestWeeklyApy": 0.21429898947322723, + "virtualPrice": 1005284290668104700 + }, + { + "type": "stable-factory", + "address": "0x6e8d2b6Fb24117c675C2fABC524f28CC5D81f18a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.17420128501774307, + "latestWeeklyApy": 0.17420128501774307, + "virtualPrice": 1113823422658835600 + }, + { + "type": "stable-factory", + "address": "0xc22936D5ECE78C048D6E7fe5d9F77fb6cAA16Dbb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb548E49Bb6f33A77885836723b73EF9C8dBC047B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3DcC3AC50cB42F7e443d7F548DD2c48EDaa8f59a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x172A54Ba45783049216F90F85FE5E5f6BC1c08fe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF08dBD81Fcc712004e6943454c83C52DE963cdEC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6788f608CfE5CfCD02e6152eC79505341E0774be", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000269569740103600 + }, + { + "type": "stable-factory", + "address": "0x9fE520E629A7F0deC773A3199BFE87620E5aeA74", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb2111b55Edd1Cb5D2C18a6817e21D473FE0E5Ba1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.020994200897761495, + "latestWeeklyApy": 0.29441471342588343, + "virtualPrice": 1002819258277320700 + }, + { + "type": "stable-factory", + "address": "0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9", + "rawVolume": 60099.878379014204, + "volumeUSD": 60394.13802506554, + "latestDailyApy": 0.5415061220583217, + "latestWeeklyApy": 0.20024601494157412, + "virtualPrice": 1010600547650518300 + }, + { + "type": "stable-factory", + "address": "0xE57180685E3348589E9521aa53Af0BCD497E884d", + "rawVolume": 194509.9060424579, + "volumeUSD": 194527.2962480884, + "latestDailyApy": 0.6379475873097951, + "latestWeeklyApy": 0.29212853116289406, + "virtualPrice": 1003722571405838600 + }, + { + "type": "stable-factory", + "address": "0x9d259cA698746586107C234e9E9461d385ca1041", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.041494251325624454, + "virtualPrice": 1001228625601889400 + }, + { + "type": "stable-factory", + "address": "0xa23d59fA2505638861525f8cB3005fec7bd37b5B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xCF95Ac3dAecDBf60152A16BDa8D8f8dB7d175B88", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB90A850A0802B9F281bAbEA836292AAdd1011972", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9d0De74dE698D1BA7273D09193EC20a1F6cb7d6a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xEc4ACC9322FC4dc853e8f72631d2C95556C68Ec0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3d675A52F5B572EB5c61FC5088203Ac9B16BFC70", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0309A528bBa0394dC4A2Ce59123C52E317A54604", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF8048E871dF466BD187078cb38CB914476319d33", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x04f0Fae3dD0A9904F797DeB15C3e523342112811", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0B049eB31878176b278ef84A66810d311353dc94", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5239063A86e1E251eE6FB3AB4fb67DEA3A8E1fd2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x930792bd0fb4593063Ad2ee12E86d768bD8DF7a1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb5FC990637F15bE6420341845a64101b6bbE365D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xabE43B60F8337818c21101AB78b5B216789e19DD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x453D92C7d4263201C69aACfaf589Ed14202d83a4", + "rawVolume": 58571.024568605615, + "volumeUSD": 35515.23495401438, + "latestDailyApy": 2.598703306599548, + "latestWeeklyApy": 2.915405795967252, + "virtualPrice": 1022239152486818400 + }, + { + "type": "stable-factory", + "address": "0x904bE3cE7249447167051f239c832400CA28De71", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9848482da3Ee3076165ce6497eDA906E66bB85C5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 3057512808859659300 + }, + { + "type": "stable-factory", + "address": "0xDAB9EeEE607F7952680E9433787e4EdE244a8515", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x62CEc7899A9910E48F0dEeaB755429887b6e1979", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x00f93fBf00F97170B6cf295DC58888073CB5c2b8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x982Da76F0ccF868B558BD46D7a3B58bC2662D7cc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x578B27E257050B6011DfDCD69F67696eF24279FC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB4698193bCBC49Be01Fcfc67C144eA4927166355", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x26c5A2f9b97f4B5FC74B05944B3Bb1679d803709", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x188aBea43270791F96dC9209e239f7B79E61203B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x28B0Cf1baFB707F2c6826d10caf6DD901a6540C5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8E27f0821873B6f5421b6ca75A4C5e1e83d3E77a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6A0861625937cB3629066CC6Db88808a590B9C68", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x63a1eC86cD45425f1409faBe4c1cF8C5FD32A3B1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8e883b9628a0d995ad758597989624Ec19F3b971", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd0E24cB3e766581952dBf258b78e89c63A37f5fb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000413848501121800 + }, + { + "type": "stable-factory", + "address": "0xF9078Fb962A7D13F55d40d49C8AA6472aBD1A5a6", + "rawVolume": 19060.436782207307, + "volumeUSD": 61523.434131784146, + "latestDailyApy": 0.09487589917021033, + "latestWeeklyApy": 0.0703971844354001, + "virtualPrice": 1001898860605031400 + }, + { + "type": "stable-factory", + "address": "0x498AD3352cCFAEd237A91f6933A92a7A43917B72", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA4C231fA5a02992b740e6169F1fbfCD35d5719e1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd6B03059C882f63268dD3e1a98d8E3cDEe26919C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC0Ec468c1B6B94a107B0A83c7a0f6529B388f43A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.7996718601680719, + "latestWeeklyApy": 0.3199155418945665, + "virtualPrice": 1002319032982380500 + }, + { + "type": "stable-factory", + "address": "0xa15e8f7E1e031e4F6f11053c6d320B2A8dc6742c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6A52e339A4b8ABD15707f882D6ADC05875Ec5223", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa98794Accdb3996c7Ef015A354B6e1aDd2D2ce3e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe82805a9b880E6DC520b6F017537F7781D55217F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xbeDca4252b27cc12ed7DaF393F331886F86cd3CE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.16583066136939273, + "latestWeeklyApy": 0.0664699756059095, + "virtualPrice": 1013574551456527900 + }, + { + "type": "stable-factory", + "address": "0xD511B5c309B2F7256FF7b3D41B029aFb96C7a331", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8D35ECe39566d65d06c9207C571934DD3C3a3916", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6720921357044496, + "latestWeeklyApy": 0.2689800520061514, + "virtualPrice": 1002171163489513600 + }, + { + "type": "stable-factory", + "address": "0xA77B5d170F3AEC2F72ca06490a7B9383A70ae5EB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1400E08f1d9f5Bc90ae19ACd4bf81BEaBC9e79de", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.1849535691643256, + "latestWeeklyApy": 0.07900763802530797, + "virtualPrice": 1001418477456879000 + }, + { + "type": "stable-factory", + "address": "0x9FD7e5B614FA071fF3543b44B68ef7699CEc4AF5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x166BDDEA59c13179796653B8afF13eeA1bd81a97", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x613398AEcdAf6bCB6eDB8e61e5956794D23f7412", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc8FBb1CCdF2f94Ba01c8B75E0A4FA4c5E1eD6791", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA500Cd4E520682e1B1113e1055D55bAceAD61122", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA77d09743F77052950C4eb4e6547E9665299BecD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.45749838865980497, + "latestWeeklyApy": 0.18322166157849207, + "virtualPrice": 1007110336149471900 + }, + { + "type": "stable-factory", + "address": "0xFd46B54FcFF753bA058A5E9BbB45dCedc9A71FAb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x413928a25D6ea1A26F2625d633207755f67Bf97c", + "rawVolume": 8899.93569699966, + "volumeUSD": 9732.818911549795, + "latestDailyApy": 0.24395765264180191, + "latestWeeklyApy": 1.1661546932054234, + "virtualPrice": 1003948340490713300 + }, + { + "type": "stable-factory", + "address": "0x3C565D9151073e8E5002B61dc570f43A139cafe7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x84997FAFC913f1613F51Bb0E2b5854222900514B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 4.1400628018065994e+22 + }, + { + "type": "stable-factory", + "address": "0x066B6e1E93FA7dcd3F0Eb7f8baC7D5A747CE0BF9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAf25fFe6bA5A8a29665adCfA6D30C5Ae56CA0Cd3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.1486099694629761, + "virtualPrice": 1000938285147440600 + }, + { + "type": "stable-factory", + "address": "0xF52E248CcFBf189df0C5A4b15e9f72Fa10c7Fe59", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x84C333e94AEA4a51a21F6cf0C7F528C50Dc7592C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.02570668561896472, + "latestWeeklyApy": 0.2535940780832302, + "virtualPrice": 1001276870512001800 + }, + { + "type": "stable-factory", + "address": "0xf275CADbE0343541ce49A03E385f8B234544CDa8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x79E281BC69A03DaBCcD66858c65EF6724e50aebe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000424027057385300 + }, + { + "type": "stable-factory", + "address": "0x8D7b9C013F7f614cd870fad33E260E7a9a1D9b5b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1c899dED01954d0959E034b62a728e7fEbE593b0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.029502953362836593, + "latestWeeklyApy": 2.4520445969303806, + "virtualPrice": 1015536803380249200 + }, + { + "type": "stable-factory", + "address": "0x141acE5Fd4435Fd341E396d579C91Df99fED10d4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xddA1B81690b530DE3C48B3593923DF0A6C5fe92E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0AD66FeC8dB84F8A3365ADA04aB23ce607ac6E24", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.007790054691136916, + "virtualPrice": 1000889813896436400 + }, + { + "type": "stable-factory", + "address": "0x2863a328A0B7fC6040f11614FA0728587DB8e353", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.003397284331407846, + "latestWeeklyApy": 0.06313322264559496, + "virtualPrice": 1004245846955392400 + }, + { + "type": "stable-factory", + "address": "0x08f9Dd845D0c91B918bB90cc5B124f3fd3e98f3A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF95AAa7EBB1620e46221B73588502960Ef63dBa0", + "rawVolume": 57.61981407899611, + "volumeUSD": 57.52251302006976, + "latestDailyApy": 0.2281285806516875, + "latestWeeklyApy": 0.515723079634478, + "virtualPrice": 1000870537500380700 + }, + { + "type": "stable-factory", + "address": "0x1CC1772C8899ad2A35aDe9B9978a56254cfc64a0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x968DeE60C67c184f9808510ec92D990e7E6616C2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x23afFc32cBe3c1a2a79376361A2D6f51CA7C9005", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.0664121173662222, + "latestWeeklyApy": 0.4262885446689513, + "virtualPrice": 3.81266704197167e+21 + }, + { + "type": "stable-factory", + "address": "0xc3b19502F8c02be75F3f77fd673503520DEB51dD", + "rawVolume": 3117.468286, + "volumeUSD": 3112.4437495749708, + "latestDailyApy": 0.020209674399729316, + "latestWeeklyApy": 0.5614638026169239, + "virtualPrice": 1001341969428900400 + }, + { + "type": "stable-factory", + "address": "0xc897b98272AA23714464Ea2A0Bd5180f1B8C0025", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 8.786965568885167e+34 + }, + { + "type": "stable-factory", + "address": "0xB657B895B265C38c53FFF00166cF7F6A3C70587d", + "rawVolume": 0.33634745114764103, + "volumeUSD": 619.1137481397262, + "latestDailyApy": 0.07703224341402137, + "latestWeeklyApy": 2.8454338119836553, + "virtualPrice": 1161856567254871000 + }, + { + "type": "stable-factory", + "address": "0xD8A114e127Aa5b9f20284FC7A1bDf2bC6853a28D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x83fc85F144bbeC4234E690B6451B105F3d7c60e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0245918fA513E0641509bb519389A49258A2699F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.4962073608201889, + "latestWeeklyApy": 0.19869470055888794, + "virtualPrice": 1001193814777903100 + }, + { + "type": "stable-factory", + "address": "0x37F1D67A5Ac27B7C2D0F664E73cCBb82627Ac4a5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x27f715999252a6E4d4794b4c9ff2Ce3D6ea8Fd9B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xEC0de6A9da9cc464Da0011214D586C21f1Fbe6D4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8021065465242616, + "latestWeeklyApy": 0.32088707486770396, + "virtualPrice": 1014283061497950200 + }, + { + "type": "stable-factory", + "address": "0xcD0148e3f3350f4B98A48535f63A38fC630e80f1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.7990481432475827, + "latestWeeklyApy": 0.31966707296842145, + "virtualPrice": 1001634874745133300 + }, + { + "type": "stable-factory", + "address": "0x1F98249637bB42edB072DD2a8AdD44Aeb80dA218", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7B42d77bd2feE3c98baA58D559B83Ff3bB4702cf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x50122108f7b3B10ac219d066275087D37E4F4a61", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfC8c34a3B3CFE1F1Dd6DBCCEC4BC5d3103b80FF0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000309765598076700 + }, + { + "type": "stable-factory", + "address": "0x386Ec09dB6f961b9e28B3dab174AD9567e57b90c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6D09C6513e620778632D36784F5C3b4b2309bd96", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.02061661761887379, + "latestWeeklyApy": 0.037525540962057846, + "virtualPrice": 1000112231503155500 + }, + { + "type": "stable-factory", + "address": "0xC61557C5d177bd7DC889A3b621eEC333e168f68A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.7983509972363967, + "latestWeeklyApy": 0.3193883973027889, + "virtualPrice": 1001765323050822700 + }, + { + "type": "stable-factory", + "address": "0xe9123CBC5d1EA65301D417193c40A72Ac8D53501", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.2913412802071802, + "latestWeeklyApy": 0.1167334698089384, + "virtualPrice": 1002490925034567000 + }, + { + "type": "stable-factory", + "address": "0x3685646651FCcC80e7CCE7Ee24c5f47Ed9b434ac", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.12949549433003416, + "latestWeeklyApy": 0.05191406511511065, + "virtualPrice": 1000417956024905200 + }, + { + "type": "stable-factory", + "address": "0x110cc323ca53d622469EdD217387E2E6B33F1dF5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfFc78332F0dA6FbaabdAcFE8054CCbc501eED432", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC71Bc7e33510Aea215E4776867148fa25c368795", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8B8DBc5b2A0D07dF180B1186F179F1c6a97C8AaE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4d9f9D15101EEC665F77210cB999639f760F831E", + "rawVolume": 374.07115789369914, + "volumeUSD": 686856.5382536844, + "latestDailyApy": 1.602562426988663, + "latestWeeklyApy": 1.5636198073416985, + "virtualPrice": 1012639445089457200 + }, + { + "type": "stable-factory", + "address": "0x663aC72a1c3E1C4186CD3dCb184f216291F4878C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.093381875659726, + "virtualPrice": 1000843267186074100 + }, + { + "type": "stable-factory", + "address": "0x97Ba76a574bC5709b944bB1887691301c72337Ca", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000038966368119200 + }, + { + "type": "stable-factory", + "address": "0xAEda92e6A3B1028edc139A4ae56Ec881f3064D4F", + "rawVolume": 253513.74248830316, + "volumeUSD": 253434.4072392238, + "latestDailyApy": 0.4207485706680947, + "latestWeeklyApy": 0.2083498110998283, + "virtualPrice": 1000853871139180400 + }, + { + "type": "stable-factory", + "address": "0x428D03774F976F625380403E0C0AD38980943573", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x892D701d94a43bDBCB5eA28891DaCA2Fa22A690b", + "rawVolume": 73206.60159397766, + "volumeUSD": 72248.06482700286, + "latestDailyApy": 1.2948263913808766, + "latestWeeklyApy": 2.0039565959573347, + "virtualPrice": 1011520870816694100 + }, + { + "type": "stable-factory", + "address": "0x99f5aCc8EC2Da2BC0771c32814EFF52b712de1E5", + "rawVolume": 316099.57652569783, + "volumeUSD": 192357.62494683664, + "latestDailyApy": 2.681271416631148, + "latestWeeklyApy": 3.6890683325967455, + "virtualPrice": 1002686195464957800 + }, + { + "type": "stable-factory", + "address": "0xE60986759872393a8360A4a7abEAb3A6e0BA7848", + "rawVolume": 487.2697943030799, + "volumeUSD": 486.80233872218616, + "latestDailyApy": 0.03055164391225773, + "latestWeeklyApy": 0.13620040694397595, + "virtualPrice": 1000275785552996400 + }, + { + "type": "stable-factory", + "address": "0x5007c634BD59dd211875346A5D0cfd10DFD1CdC0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x971add32Ea87f10bD192671630be3BE8A11b8623", + "rawVolume": 410881.9857555945, + "volumeUSD": 247939.45592603812, + "latestDailyApy": 0.5581049785377878, + "latestWeeklyApy": 0.9354451762829674, + "virtualPrice": 1003660881007524500 + }, + { + "type": "stable-factory", + "address": "0x68934F60758243eafAf4D2cFeD27BF8010bede3a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.2130879901289573, + "latestWeeklyApy": 0.05235025979024588, + "virtualPrice": 1001309979751059000 + }, + { + "type": "stable-factory", + "address": "0xfBB481A443382416357fA81F16dB5A725DC6ceC8", + "rawVolume": 31466.729051759863, + "volumeUSD": 45930.74425190799, + "latestDailyApy": 0.6190588918066009, + "latestWeeklyApy": 1.257457327290945, + "virtualPrice": 1003784745207210000 + }, + { + "type": "stable-factory", + "address": "0x785Af85CceB3BA1369925c5b43E90026343FC0bb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000990102855300 + }, + { + "type": "stable-factory", + "address": "0x7C0d189E1FecB124487226dCbA3748bD758F98E4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.06083023843237445, + "latestWeeklyApy": 0.012192970796021108, + "virtualPrice": 1000911579321327900 + }, + { + "type": "stable-factory", + "address": "0x06c21B5d004604250a7f9639c4A3C28e73742261", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000705998680983800 + }, + { + "type": "stable-factory", + "address": "0xB4E2F6A10176b0948B31C7Ac0DF710137a7536A2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2d600BbBcC3F1B6Cb9910A70BaB59eC9d5F81B9A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.1148559852320652, + "virtualPrice": 1010177933949226400 + }, + { + "type": "stable-factory", + "address": "0x2448ec833EbAf2958330f91E5Fbe4F9C70C9e572", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 3.7483971482288325e-7, + "virtualPrice": 1000056944250855800 + }, + { + "type": "stable-factory", + "address": "0xfcc067EFb7bE2EEbD32615F14fC22195abB68e9B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000464655926350000 + }, + { + "type": "stable-factory", + "address": "0x0Bbe64Ea3cF57fDFdFD621F334B3469627A022aD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4424b4A37ba0088D8a718b8fc2aB7952C7e695F5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000447728634991100 + }, + { + "type": "stable-factory", + "address": "0xb9B19B9d771035c5d95e642bBea28927040B7117", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x38cB9756c307Ab482b5d3cA9155CB507cF98aC04", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF05CFb8b4382c69f3B451C5FB55210B232E0edFA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.007607844179724488, + "virtualPrice": 1000121326668930200 + }, + { + "type": "stable-factory", + "address": "0x94B17476A93b3262d87B9a326965D1E91f9c13E7", + "rawVolume": 213.67642543636583, + "volumeUSD": 390977.6568170864, + "latestDailyApy": 0.1633921808675387, + "latestWeeklyApy": 0.2287407218612758, + "virtualPrice": 1000597233303686000 + }, + { + "type": "stable-factory", + "address": "0x96AAE323E111A19b1E0e26F55e8De21F1dD01f26", + "rawVolume": 29859.949258094814, + "volumeUSD": 861.1512038965092, + "latestDailyApy": 0.05336781019611436, + "latestWeeklyApy": 0.14525965303655575, + "virtualPrice": 1000268362137832000 + }, + { + "type": "stable-factory", + "address": "0xCA0253A98D16e9C1e3614caFDA19318EE69772D0", + "rawVolume": 858410.2861220554, + "volumeUSD": 522179.84249812114, + "latestDailyApy": 0.902579944339621, + "latestWeeklyApy": 1.4629172205791852, + "virtualPrice": 1000772038249665500 + }, + { + "type": "stable-factory", + "address": "0x71c91B173984d3955f7756914bBF9a7332538595", + "rawVolume": 22.012014562164854, + "volumeUSD": 138.76166174568036, + "latestDailyApy": 0, + "latestWeeklyApy": 0.07735447907506465, + "virtualPrice": 1000388536806388700 + }, + { + "type": "stable-factory", + "address": "0x852b90239C5034b5bb7a5e54eF1bEF3Ce3359CC8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000175279144142800 + }, + { + "type": "stable-factory", + "address": "0x21E27a5E5513D6e65C4f830167390997aA84843a", + "rawVolume": 1794.3155552584915, + "volumeUSD": 3272811.475110785, + "latestDailyApy": 2.7649689987347292, + "latestWeeklyApy": 2.5336699898361736, + "virtualPrice": 1007282850737308300 + }, + { + "type": "stable-factory", + "address": "0x02914596cad247C86e8F7d8464D1b3DBD0CeC86E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x400d4C984779A747462e88373c3fE369EF9F5b50", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.020169801352842853, + "latestWeeklyApy": 0.053295129517527684, + "virtualPrice": 1000088201765247600 + }, + { + "type": "stable-factory", + "address": "0x26f3f26F46cBeE59d1F8860865e13Aa39e36A8c0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0007585399258935865, + "virtualPrice": 1000446304113295400 + }, + { + "type": "stable-factory", + "address": "0xeA24Fbb49d3465770eE1b2BCF674258F9e233c75", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3175f54A354C83e8ADe950c14FA3e32fc794c0Dc", + "rawVolume": 46552.23534696112, + "volumeUSD": 46679.69141059313, + "latestDailyApy": 1.029216265592292, + "latestWeeklyApy": 0.16931875367129923, + "virtualPrice": 1000673112554490400 + }, + { + "type": "stable-factory", + "address": "0x5D489d45c56E40B971E601CCbc506112A2004DA2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x62b78594710474dA5f2453a24845E74bbaE664f5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7B881722f842D229bbA234f6B5E1d6f0C9BF054a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0x52EBcE664aC1C3A1a5a0568599493C5d71f4772b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.7252123636011687, + "latestWeeklyApy": 0.29015503889942007, + "virtualPrice": 1000414336793599700 + }, + { + "type": "stable-factory", + "address": "0xB00eA2Bcad321850Bc8055e7C311b05d54875CaD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.34396294042668973, + "latestWeeklyApy": 187.03829471703162, + "virtualPrice": 1497254150049551400 + }, + { + "type": "stable-factory", + "address": "0x35dd22fC3eC5a82D207BEDd8FA1F658915F97C33", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.2067993746800898, + "latestWeeklyApy": 129.03451009608992, + "virtualPrice": 1017588974687490800 + }, + { + "type": "stable-factory", + "address": "0xD0A5Ca7b57780240db17BB89773fda8F0eFCE274", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc4114E1EF346495333Fd966f65C2987e758c2189", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC288a9D9671C444D0FdB60D89d8105bdAe8c7685", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfC89b519658967fCBE1f525f1b8f4bf62d9b9018", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.4749076864776436, + "virtualPrice": 1000813025399881000 + }, + { + "type": "stable-factory", + "address": "0xd82C2eB10F4895CABED6EDa6eeee234bd1A9838B", + "rawVolume": 89.8914242659911, + "volumeUSD": 164628.53726467004, + "latestDailyApy": 0.07320680060693974, + "latestWeeklyApy": 0.48594781890887173, + "virtualPrice": 1000442781076075800 + }, + { + "type": "stable-factory", + "address": "0x6a9014FB802dCC5efE3b97Fd40aAa632585636D0", + "rawVolume": 2701.6386189851733, + "volumeUSD": 17193.04956316602, + "latestDailyApy": 0.17854186518835302, + "latestWeeklyApy": 1.8800173351784188, + "virtualPrice": 1002293092750146600 + }, + { + "type": "stable-factory", + "address": "0xc1F6110D42781aaccD16d716Ca7B814F2aEee18F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.9399288047789796, + "latestWeeklyApy": 2.1381417132955827, + "virtualPrice": 1002921490735177900 + }, + { + "type": "stable-factory", + "address": "0xC73151DcA19ffF7A16aE421a9fb35455832d66d3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.024487449689392093, + "latestWeeklyApy": 0.04457174831042909, + "virtualPrice": 1000108839232870500 + }, + { + "type": "stable-factory", + "address": "0x4029f7DcBdF6059ed80DA6856526E7510D64fA21", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD4cEdEf74fB8885b8e1dE21fBA5a2E2F33F21f58", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000007004669262800 + }, + { + "type": "stable-factory", + "address": "0x6f3388c40A7d063b5E17Cc4213B7674b5DE44C32", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000443347941228900 + }, + { + "type": "stable-factory", + "address": "0xbC90FEC043e6DF6A084E18Df9435Ee037C940B2d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0070936777368357795, + "latestWeeklyApy": 0.012910946584621108, + "virtualPrice": 1000137381956955400 + }, + { + "type": "stable-factory", + "address": "0x48C6b29893ec0320e1cd10227B8C2F26EB342a83", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5D4D6836260c116B959E7E25a1735B6C7C328f47", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0x9D1784097fFEADAe206FAF65188561abaA9093A8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x20955CB69Ae1515962177D164dfC9522feef567E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.640271906444001, + "latestWeeklyApy": 0.256270560459515, + "virtualPrice": 1347329658618958300 + }, + { + "type": "stable-factory", + "address": "0xa4c567c662349BeC3D0fB94C4e7f85bA95E208e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.1684306269374547, + "virtualPrice": 1000179436079310100 + }, + { + "type": "stable-factory", + "address": "0xa089A831DEc6dfddfd54659ea42C02083f9352d6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto", + "address": "0xD51a44d3FaE010294C616388b506AcdA1bfAAE46", + "rawVolume": 2277321.612864847, + "volumeUSD": 4792214.048794902, + "latestDailyApy": 0.34568144613522644, + "latestWeeklyApy": 0.2911736047979785, + "virtualPrice": 1032656600630758700 + }, + { + "type": "crypto", + "address": "0x9838eCcC42659FA8AA7daF2aD134b53984c9427b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.13036679154627695, + "virtualPrice": 1007633062634375400 + }, + { + "type": "crypto", + "address": "0x98a7F18d4E56Cfe84E3D081B40001B3d5bD3eB8B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.006067597831216354, + "latestWeeklyApy": 0.04614753750065148, + "virtualPrice": 1003343690751647900 + }, + { + "type": "crypto", + "address": "0x8301AE4fc9c624d1D396cbDAa1ed877821D7C511", + "rawVolume": 6146.6022916733855, + "volumeUSD": 3709.8073396241034, + "latestDailyApy": 4.696239883830455, + "latestWeeklyApy": 39.9809276842219, + "virtualPrice": 538804621997879550 + }, + { + "type": "crypto", + "address": "0xB576491F1E6e5E62f1d8F26062Ee822B40B0E0d4", + "rawVolume": 93700.60818309146, + "volumeUSD": 605090.5583067115, + "latestDailyApy": 0.6159830328566374, + "latestWeeklyApy": 1.043563573982742, + "virtualPrice": 1028238140738636300 + }, + { + "type": "crypto", + "address": "0xAdCFcf9894335dC340f6Cd182aFA45999F45Fc44", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1048048204997013600 + }, + { + "type": "crypto", + "address": "0x98638FAcf9a3865cd033F36548713183f6996122", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.42039720446886975, + "latestWeeklyApy": 0.05978452744856977, + "virtualPrice": 1058156265101005400 + }, + { + "type": "crypto", + "address": "0x752eBeb79963cf0732E9c0fec72a49FD1DEfAEAC", + "rawVolume": 292013.38478626986, + "volumeUSD": 25618.982251052286, + "latestDailyApy": 0.7594137142235002, + "latestWeeklyApy": 0.7736719286213445, + "virtualPrice": 1030129522736123800 + }, + { + "type": "crypto", + "address": "0xE84f5b1582BA325fDf9cE6B0c1F087ccfC924e54", + "rawVolume": 8307.840912959568, + "volumeUSD": 4410.1704370125935, + "latestDailyApy": 0.10195857810915143, + "latestWeeklyApy": 0.08956484202864434, + "virtualPrice": 1024711334469484000 + }, + { + "type": "crypto-factory", + "address": "0x03470B57B05089EE40c651dAC9E0387F1f3cb46f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6ec176b5449DD7C1a87CA8d97aceCC531C0Ca0d8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x1667954F14F5b22c703116D8d806f988B1e09018", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x941Eb6F616114e4Ecaa85377945EA306002612FE", + "rawVolume": 1439.9897649921347, + "volumeUSD": 17927.31209856864, + "latestDailyApy": 0.31233398472914065, + "latestWeeklyApy": 1.1191212695655262, + "virtualPrice": 1027593276495165800 + }, + { + "type": "crypto-factory", + "address": "0x50f3752289e1456BfA505afd37B241bca23e685d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.19087564044726335, + "latestWeeklyApy": 0.1563809859742138, + "virtualPrice": 1007959220094842200 + }, + { + "type": "crypto-factory", + "address": "0x99aF0326ab1c2A68c6712a5622c1Aa8e4b35Fd57", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xC68ffDdea3a77b456227B50EbFdCC3C33bc2a8a4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x96fb2AB514CA569A1486C50339533ca4637B338B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xC26b89A667578ec7b3f11b2F98d6Fd15C07C54ba", + "rawVolume": 16.272014555438002, + "volumeUSD": 46239.61746658422, + "latestDailyApy": 0.17308659257502246, + "latestWeeklyApy": 0.615432534756466, + "virtualPrice": 1018109271261466000 + }, + { + "type": "crypto-factory", + "address": "0x48536EC5233297C367fd0b6979B75d9270bB6B15", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002909961837184400 + }, + { + "type": "crypto-factory", + "address": "0x8b0aFa4b63a3581b731dA9D79774a3eaE63B5ABD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1204576187010011100 + }, + { + "type": "crypto-factory", + "address": "0xfB8814D005C5f32874391e888da6eB2fE7a27902", + "rawVolume": 2165.6064788111653, + "volumeUSD": 1507.582792599405, + "latestDailyApy": 0, + "latestWeeklyApy": 0.22054967727977992, + "virtualPrice": 1012215060498309100 + }, + { + "type": "crypto-factory", + "address": "0xE07BDe9Eb53DEFfa979daE36882014B758111a78", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002077309787712100 + }, + { + "type": "crypto-factory", + "address": "0xB6d9b32407BfA562D9211acDba2631a46c850956", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000114609388775600 + }, + { + "type": "crypto-factory", + "address": "0x1dFF955CdDD55fba58Db3CD658F9E3E3C31851eb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.1299528152882365, + "latestWeeklyApy": 1.1299528152882365, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xDaD60C5B748306BA5a0c9a3c3482A8D1153DAd2a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000633615836084100 + }, + { + "type": "crypto-factory", + "address": "0xd8C49617e6A2C7584Ddbeab652368ee84954BF5c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1013261520785966600 + }, + { + "type": "crypto-factory", + "address": "0xF43b15Ab692fDe1F9c24a9FCE700AdCC809D5391", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 3.4059410651900768, + "virtualPrice": 1055176870712748800 + }, + { + "type": "crypto-factory", + "address": "0xd658A338613198204DCa1143Ac3F01A722b5d94A", + "rawVolume": 21689.67469748851, + "volumeUSD": 130195.97330512486, + "latestDailyApy": 0.06435394287034324, + "latestWeeklyApy": 0.6430193723591993, + "virtualPrice": 1005728783987464700 + }, + { + "type": "crypto-factory", + "address": "0xa498B08ca3C109e4EbC7Ff01422B6769EAEf16EF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x365901dB5Adb4c789801f19D5F1F46c574783aD6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6ec38b3228251a0C5D491Faf66858e2E23d7728B", + "rawVolume": 19.39854157023174, + "volumeUSD": 405.1320596524673, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1012066064532794900 + }, + { + "type": "crypto-factory", + "address": "0x9a22CDB1CA1cdd2371cD5BB5199564C4E89465eb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.028639169199684567, + "virtualPrice": 1031783124572619400 + }, + { + "type": "crypto-factory", + "address": "0x80aa1a80a30055DAA084E599836532F3e58c95E2", + "rawVolume": 41747.84029555649, + "volumeUSD": 18148.22753735593, + "latestDailyApy": 0.6997100683141078, + "latestWeeklyApy": 0.31377767580611504, + "virtualPrice": 1017322528708082400 + }, + { + "type": "crypto-factory", + "address": "0x90Ce3285a9cce2D36149F12df2C1e357Af304A1D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xbF9702efefe1303A61b7c944b5741b773DD930a7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9C6751593A1424108F53E5ad6754940FEDAA5bC0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000079458060129500 + }, + { + "type": "crypto-factory", + "address": "0x1570af3dF649Fc74872c5B8F280A162a3bdD4EB6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.07293159135617344, + "virtualPrice": 1007570961933805800 + }, + { + "type": "crypto-factory", + "address": "0x5b692073F141C31384faE55856CfB6CBfFE91E60", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1031365268217694200 + }, + { + "type": "crypto-factory", + "address": "0x6Df0D77F0496CE44e72D695943950D8641fcA5Cf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1004728241381116900 + }, + { + "type": "crypto-factory", + "address": "0xAcCe4Fe9Ce2A6FE9af83e7CF321a3fF7675e0AB6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1027522184085652500 + }, + { + "type": "crypto-factory", + "address": "0xEB0265938c1190Ab4E3E1f6583bC956dF47C0F93", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1005726381759399000 + }, + { + "type": "crypto-factory", + "address": "0xef04f337fCB2ea220B6e8dB5eDbE2D774837581c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1034937894020062600 + }, + { + "type": "crypto-factory", + "address": "0x6b234F354edA8fAe082BE20DCf790Fd886B42340", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xA6B28989B81B2Fe4eC03fde324DE1A99ae4366E4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x39567Db64F0b25Db2C35Fc7A4f60c3C5258e4654", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x751D3feFFed0890B76E9b86476CFEEAA1FcdA73D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x3211C6cBeF1429da3D0d58494938299C92Ad5860", + "rawVolume": 685513.6222467913, + "volumeUSD": 550387.0884297435, + "latestDailyApy": 0.9648518139249607, + "latestWeeklyApy": 0.7423783153279961, + "virtualPrice": 1039300698428454400 + }, + { + "type": "crypto-factory", + "address": "0x75A6787C7EE60424358B449B539A8b774c9B4862", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.233177625686265, + "virtualPrice": 1005924667264966300 + }, + { + "type": "crypto-factory", + "address": "0x21410232B484136404911780bC32756D5d1a9Fa9", + "rawVolume": 96.74784527918452, + "volumeUSD": 10015.141431038142, + "latestDailyApy": 0, + "latestWeeklyApy": 0.051272471695118504, + "virtualPrice": 1011244935445001600 + }, + { + "type": "crypto-factory", + "address": "0x86Cf48e9735F84d3311141e8941b2494Fb4B8142", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xfE4A08f22FE65759Ba91dB2E2CADa09B4415B0d7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1035349034758253400 + }, + { + "type": "crypto-factory", + "address": "0x7472764C28f843bA246F294C44DE9456911A3454", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7E050cf658777cc1Da4a4508E79d71859044B60E", + "rawVolume": 2500000.783228082, + "volumeUSD": 2873.0321181061013, + "latestDailyApy": 0.6160083028343477, + "latestWeeklyApy": 1.0000821497573753, + "virtualPrice": 1021215934316853500 + }, + { + "type": "crypto-factory", + "address": "0x782115c863A05abF8795dF377D89AAd1AAdF4Dfa", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1058607567892588700 + }, + { + "type": "crypto-factory", + "address": "0x838af967537350D2C44ABB8c010E49E32673ab94", + "rawVolume": 6732.02376397542, + "volumeUSD": 103830.83472578405, + "latestDailyApy": 0.6314658538624229, + "latestWeeklyApy": 0.3802725637447546, + "virtualPrice": 1040817379842017000 + }, + { + "type": "crypto-factory", + "address": "0x595146ED98c81Dde9bD23d0c2Ab5b807C7Fe2D9f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x62d1d9065b4C78964040b640ab404D86D8f68263", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xf861483fa7E511fbc37487D91B6FAa803aF5d37c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.17390121817051352, + "virtualPrice": 1002102670166707700 + }, + { + "type": "crypto-factory", + "address": "0xB2E113a6B8edeA086A44B1509013C4Fc69eC4bf0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xD0a1D2a9350824516ae8729b8311557BA7E55BFF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1029879877742204800 + }, + { + "type": "crypto-factory", + "address": "0x5D898FD41875b14c1781fb497AeCAb8E9B24dfC9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1021590988058838800 + }, + { + "type": "crypto-factory", + "address": "0x4535913573D299A6372ca43b90aA6Be1CF68f779", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.010047848793304226, + "virtualPrice": 1009016109232459500 + }, + { + "type": "crypto-factory", + "address": "0x3c42B0f384D2912661C940d46cfFE1CD10F1c66F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x7F787210c83012FCA364aE79aD8Fc26641c6fbE5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xe0e970a99bc4F53804D8145beBBc7eBc9422Ba7F", + "rawVolume": 22736.996153950866, + "volumeUSD": 25732.132216708043, + "latestDailyApy": 0.4545982404257076, + "latestWeeklyApy": 0.12156886548906343, + "virtualPrice": 1004334918211426000 + }, + { + "type": "crypto-factory", + "address": "0xd434eaf67bbA1903F61CdD3EDE6700caC74a5fF2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6525e7E2E8450741Ab97BD3948BFa47878F83ec6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7D99469fB3A530136ec0Ab6981D64bc9fF81aD04", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xbfCa1a72edd92FFf61a8c88f61D4e64E99232b4b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7F2aF2c7BFDAD063fF01DcEc077a216d95A0A944", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xA148BD19E26Ff9604f6A608E22BFb7B772D0d1A3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000076594494606300 + }, + { + "type": "crypto-factory", + "address": "0xF3456E8061461e144b3f252E69DcD5b6070fdEE0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1013798609710586000 + }, + { + "type": "crypto-factory", + "address": "0xFD484A99d21CA118f22871134f467B1ca3F842Aa", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x5114f86027d4c9a509Cba072B8135A171402C6d5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x6E77889Ff348A16547cABa3Ce011cB120Ed73bFc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003480146826478300 + }, + { + "type": "crypto-factory", + "address": "0x95f3672a418230c5664b7154Dfce0ACfa7EEd68D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1030734706241851600 + }, + { + "type": "crypto-factory", + "address": "0xEc1F6Df37B16432E520942Affe28149bAdc5bC5e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xfCE1B5447a3DB7e18352e8ae4bCD780029012383", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xdDBDCEBb989B1ef804338d6c9a902f91c2738936", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001525240888420100 + }, + { + "type": "crypto-factory", + "address": "0x039FD59541b3989C7A1E9278431038B3B6BA5F43", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xc12A73c46D49Fa0d7433C90291BC8D1A9EAe7B23", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9bFb082f2dd5d63907aFa33Dbb8F9c0BCd5C2333", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x840cBF6861137624E60380d5e915619885c5AA95", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xd3301B7CAA76f932816a6Fc7Ef0b673238e217ad", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xB2E2536821521174a168eda7Be78a6c70ea6E5fA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x316D2606cE036Ec0E69A11432A870a4ec66AdE96", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xC78d84Ee5D970227f988a2e2dC0A4a945163bCB9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xb2c248C0B0DB7d28dfa0123438B40Bb31FB8AA05", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001003664654114200 + }, + { + "type": "crypto-factory", + "address": "0x799D141e83D88996C48B98A4f8EB3D96AB422DD3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000094198019546100 + }, + { + "type": "crypto-factory", + "address": "0x383aD525211B8A1A9c13532CC021773052b2F4f8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x79cB6a84FbEC1FE2d66B705a1e7f6482C2993049", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x91d9d17EFD378f38a48122AE6Ec01B2E83d1Ac98", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x118629329731ce1FF01f9401212C53939F8A9EEB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xBD917239EC067A6aF82AABb6B45DAd3d09F4EFD8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6e314039f4C56000F4ebb3a7854A84cC6225Fb92", + "rawVolume": 40.678956311052495, + "volumeUSD": 5327.344969826131, + "latestDailyApy": 0.19035791331651897, + "latestWeeklyApy": 0.5757001180923371, + "virtualPrice": 1015895550170124300 + }, + { + "type": "crypto-factory", + "address": "0x337ca39842C448030196693f3433332fF1CF3E41", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0d1c65B28190cB88f328D2051c524A5c63d10EB5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x162B4Deefc73a5277b09Bd7A02D25Da73D66183D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xc58fDB8A50AB921A73535656A7c69387Dd863ff6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000505045760896400 + }, + { + "type": "crypto-factory", + "address": "0xD4e2fdC354c5DFfb865798Ca98c2b9d5382F687C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 3022.9176472209733, + "virtualPrice": 6994385657484359000 + }, + { + "type": "crypto-factory", + "address": "0x5FAE7E604FC3e24fd43A72867ceBaC94c65b404A", + "rawVolume": 21.474619549000366, + "volumeUSD": 39701.00194194756, + "latestDailyApy": 1.6610590838840458, + "latestWeeklyApy": 1.6228493811698699, + "virtualPrice": 1011015465690634800 + }, + { + "type": "crypto-factory", + "address": "0x0CF8327b20a159f0CD99214c5305D49E9D8207F0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x58257e4291F95165184b4beA7793a1d6F8e7b627", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003874042205311200 + }, + { + "type": "crypto-factory", + "address": "0x21d158d95C2e150e144c36FC64E3653B8D6c6267", + "rawVolume": 27075.109916819205, + "volumeUSD": 37465.29657451397, + "latestDailyApy": 0.2559660793623575, + "latestWeeklyApy": 0.919872661359733, + "virtualPrice": 1011353370841770000 + }, + { + "type": "crypto-factory", + "address": "0xBEc570d92AFB7fFc553bdD9d4B4638121000b10D", + "rawVolume": 13105.311787375176, + "volumeUSD": 20053.832687731418, + "latestDailyApy": 0.5457196339657466, + "latestWeeklyApy": 0.5804442622266315, + "virtualPrice": 1009066337909469400 + }, + { + "type": "crypto-factory", + "address": "0x4149d1038575CE235E03E03B39487a80FD709D31", + "rawVolume": 2073.1438000156036, + "volumeUSD": 3825.137013431942, + "latestDailyApy": 0.14754741297491325, + "latestWeeklyApy": 0.24240025513988517, + "virtualPrice": 1009383366137369000 + }, + { + "type": "crypto-factory", + "address": "0x31c325A01861c7dBd331a9270296a31296D797A0", + "rawVolume": 12033.05966360396, + "volumeUSD": 8999.309440824829, + "latestDailyApy": 0.18835057038599778, + "latestWeeklyApy": 1.76511200415006, + "virtualPrice": 1016562168444484500 + }, + { + "type": "crypto-factory", + "address": "0xd9f907f7F84CbB0Af85C7829922fd692339147f9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x75A1FdA374Fdb4E47d703d0282E94c87119fa46e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x611a95bf3cc0EF593f22c4E4D8EB4d6C937E006C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000106298858711700 + }, + { + "type": "crypto-factory", + "address": "0x13B876C26Ad6d21cb87AE459EaF6d7A1b788A113", + "rawVolume": 2317.9255196100135, + "volumeUSD": 2932.246762344348, + "latestDailyApy": 0.1939886732903906, + "latestWeeklyApy": 0.08528439376529473, + "virtualPrice": 1004346597581378700 + }, + { + "type": "crypto-factory", + "address": "0x4D19E7fD118FD751fEa7c0324D7E7b0A3D05EbA4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000059516631724300 + }, + { + "type": "crypto-factory", + "address": "0x825722AF244432319C1E32b6b18AdED2d4A014Df", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x02dFA5C793A9CE4d767a86259245A162a57f2dB4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1008360552638094100 + }, + { + "type": "crypto-factory", + "address": "0x27A8697fBD2ed137d88E74132a5558FA43656175", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0xC7a87b0f491C1A043eb5315281163556B7F36f7f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x167dE3887eDEbE5012544373C5871481bD95Cc4e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000095281251434900 + }, + { + "type": "crypto-factory", + "address": "0x1631D0E588D475CEe4be0f51b7410DaaAaBD7034", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002025416312836500 + }, + { + "type": "crypto-factory", + "address": "0x372463c1dFE3A9c269C2C5Eb76A86021C637D0f4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x5538e48bfe47749D2540D3cBe83fD50465bcb6c3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x5FBa071ad473265df860271998e45FDb3d3E5812", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x96A3F551c99797998dC33E2D816D567db61EE1c2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000214086996976800 + }, + { + "type": "crypto-factory", + "address": "0xF039050dC36fD59Ff1117B14BFdFf92dFA9dE9Fc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0xb49B238aB6106216Dc26854ed3a009EAc1C419A9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xFEB0784F5D0940686143b3A025Af731Ee6A81197", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1005133820128698600 + }, + { + "type": "crypto-factory", + "address": "0xDcb11E81C8B8a1e06BF4b50d4F6f3bb31f7478C3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0696662247174018, + "latestWeeklyApy": 0.9915027149218769, + "virtualPrice": 1008159541448694500 + }, + { + "type": "crypto-factory", + "address": "0xBCAA09F2873F87aB4bf3A6fE97991f4bCC959e7e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000069940727595400 + }, + { + "type": "crypto-factory", + "address": "0x6d91A9Cf0deA0cd5BCb676eb4B1F11b6DCb44188", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7f87a8b46A662131b87D29B2316B2d9CBD7e3B02", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xec5ffef96c3EdEdE587DB2efA3ab4Deec414cE8F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x52F05C70d86662204C7222C35000747b177C393a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0be1596aA8000Ff283807F276CED12c21297cf8f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9685Aab3b578c55Ce206A312095Fc1fa73609E38", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xB91eBF5f6a79a43927f7FA0548409c7821542d0C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9D377ec646C10E99E08B5200F651f5a743E3EA78", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xA0c7caD1D6dDb3EB2949243a0F720F4A291367Dd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xAE2029f60DBdf41D14c8c0290f2B68E164360419", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xBE084cf7dB8fDfD6f17C041F958AbCcaF8C76603", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x4885aAa80e0Ed42c5c76ACf523Adaf5066FD011F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x141Be5d90C27Dc5C9199a57cb828Ca3CBD2C2D94", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xF4A3cca34470b5Ba21E2bb1eD365ACf68B4d4598", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000138800492083000 + }, + { + "type": "crypto-factory", + "address": "0x9A7168Ea321121A8FaF52147fC596b73e07Ab8a3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9735d6530b0609bA8340Ecf61FEaCD922468c1e1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x74ED5d42203806c8CDCf2F04Ca5F60DC777b901c", + "rawVolume": 4103.264075862262, + "volumeUSD": 8953.552203030073, + "latestDailyApy": 0, + "latestWeeklyApy": 0.029729356479202274, + "virtualPrice": 1005394533970417700 + }, + { + "type": "crypto-factory", + "address": "0x3e3C6c7db23cdDEF80B694679aaF1bCd9517D0Ae", + "rawVolume": 4729.622770262418, + "volumeUSD": 2439.1691125898874, + "latestDailyApy": 0, + "latestWeeklyApy": 0.26867617524772847, + "virtualPrice": 1003478681643160800 + }, + { + "type": "crypto-factory", + "address": "0x6a6283aB6e31C2AeC3fA08697A8F806b740660b2", + "rawVolume": 5043059.183598681, + "volumeUSD": 20443.129788012422, + "latestDailyApy": 0.26266275529380767, + "latestWeeklyApy": 0.29219590618778657, + "virtualPrice": 1021269061116999300 + }, + { + "type": "crypto-factory", + "address": "0x656111Ca1e66678E7d300d8C4ffa4E4D21cECC55", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9E73249aA5C3dc4223549bDf154215b997e0cFec", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xc170ECB895b28a7eff0109f8C072aE742B1Dcb69", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x342D1C4Aa76EA6F5E5871b7f11A019a0eB713A4f", + "rawVolume": 342.57177232429876, + "volumeUSD": 2927.75977324718, + "latestDailyApy": 0.46457858863493406, + "latestWeeklyApy": 1.635235539595259, + "virtualPrice": 1018443464076032500 + }, + { + "type": "crypto-factory", + "address": "0xaeB6f2ABE64EE5ed210e8AE33B1F0f5E4B3e28Fc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x96f34Bb82fcA57e475e6ad218b0dd0C5c78DF423", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1008200366169646100 + }, + { + "type": "crypto-factory", + "address": "0x17374bdbcb79aE20CB947640915316d379a7f222", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xE661672521C77ca87DBb2eac816d2ccF86197281", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x19a0CA9a0dc2A5034F47DcC164169Cffd7ed2410", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000146721723174400 + }, + { + "type": "crypto-factory", + "address": "0x1628E0A42682570c815da52480734a8c2A2Ca2DD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1004213360860851200 + }, + { + "type": "crypto-factory", + "address": "0x4E6706889d519ba6e6CED330D76582f875DF3C9c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1007863876954532900 + }, + { + "type": "crypto-factory", + "address": "0x29b2178F5f9FB4f775A2f1a7fEA685FFbA0fAe32", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003931438670981400 + }, + { + "type": "crypto-factory", + "address": "0xD304918b2Ef48a1184918e575CED08d3d04c37ad", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7193d845f8991E27FfDCE54E78137dE036A6f743", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xf2f12B364F614925aB8E2C8BFc606edB9282Ba09", + "rawVolume": 601.6294655707492, + "volumeUSD": 348.38481710139826, + "latestDailyApy": 0, + "latestWeeklyApy": 1.8542576431711977, + "virtualPrice": 1034467847999705200 + }, + { + "type": "crypto-factory", + "address": "0xE6BbAf0B55ae430354B87a3f592dD5c8AD7A5E79", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xf4E7c1E5a21F68df8d6a331aFFBEEBc313eD24d1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x3cc1b5DCe81A810080890FB8AdAd48F8eaa8c210", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xe01A9eCdb0AAabE2F12A25a0d289480DEBF09e89", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x81F08b6B325B7266190bbDe531311F31bB3D82De", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x808dB6E464279C6A77a1164E0b34d64Bd6fB526E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.03664753796999154, + "latestWeeklyApy": 0.028683032608123327, + "virtualPrice": 1008238941565394400 + }, + { + "type": "crypto-factory", + "address": "0xFc1e8bf3E81383Ef07Be24c3FD146745719DE48D", + "rawVolume": 6840.951088942918, + "volumeUSD": 12375.17312505896, + "latestDailyApy": 0.19128801165759768, + "latestWeeklyApy": 0.12473802932626565, + "virtualPrice": 1002623894964526200 + }, + { + "type": "crypto-factory", + "address": "0x6575Ad173801f2d58961B3d7F3628c72346eA84a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xeE0dcAf26aA271Ff18bb9B9b282620A7Ce79F6BA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x867fe27FC2462cff8890B54DfD64E6d42a9D1aC8", + "rawVolume": 38688.57598335623, + "volumeUSD": 30304.776273104486, + "latestDailyApy": 0.6541900017689839, + "latestWeeklyApy": 0.49706963782554237, + "virtualPrice": 1008321017920968300 + }, + { + "type": "crypto-factory", + "address": "0x9488317BaD789eF9AE5b70D3Ef2fC12dF717Fba2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9730e45Ca84076C0a9DF80A4f2058C8379eA3eCE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x3767fF3d26B7f9FB1870AE7Ebfc7e05f585EecFe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xD0A7a9c7F2C148DC5399d89220345B50D6d13Cc0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x5A784386DBe8E9188b7262e85dCAF912bcDDa441", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7dCEaF64115ed0E3D5B3E18d0896004EAeb58B4B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xE94A145A797622FE38A35036729229fc6B3132Cb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xc77103e44914A9e5E30B9F58cD48e990b22Fb587", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x450a0975DbF787Df053d20FA3B57e5b362960102", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7Dc87E4e57C0ca6060374E0cE2a1cffB69ebC45A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xfAf83F9D84FAF25ed4ecbc1857f6AAdC3C1977C3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x1A8E46721F754660dC8b2EF623e7408856A63caC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x740f335D454Ad0dB55F88c02Cccd74Ed84F72A3f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x3272C5D11644deBB2e9d04C302796EbE8DF35457", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x970cf34837Aa1Ff611410533b69d708cba70739D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x183F03C8ce2A24F388A4059aDEdd05C902650174", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x92971A40Fa0F6Dd573a0f996b62De497eCC4ef6c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x2F0e2d1023Fd3757aA58be7020b0FC58C6A45187", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000272097486151700 + }, + { + "type": "crypto-factory", + "address": "0x49EAF5E4aC618c968dDCF588C000302F9bC3312D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1025287318002806700 + }, + { + "type": "crypto-factory", + "address": "0x3991d59428A8f9F5C13526D92d58B23DA14230A0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000265595438708500 + }, + { + "type": "crypto-factory", + "address": "0x72D6658e562739267994BB16b952E543f0F92281", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000214747230178000 + }, + { + "type": "crypto-factory", + "address": "0x54888c0859A93E6ff679e4F9705E75BBB9557057", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6bfE880Ed1d639bF80167b93cc9c56a39C1Ba2dC", + "rawVolume": 16447.4473336489, + "volumeUSD": 21914.457832924396, + "latestDailyApy": 0.23353279188373932, + "latestWeeklyApy": 0.0676821707481512, + "virtualPrice": 1003740289722049800 + }, + { + "type": "crypto-factory", + "address": "0xB4018CB02E264C3FCfe0f21A1F5cfbCAAba9F61F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002019973295012100 + }, + { + "type": "crypto-factory", + "address": "0x7878A141103d93cAc0D1010C48f999975B347138", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000044048825160600 + }, + { + "type": "crypto-factory", + "address": "0x68a39B6EB2f9AD3A5E58808CDC4907dA260E44C8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000011447526231800 + }, + { + "type": "crypto-factory", + "address": "0xEd46F331F85BaD38bD99B60938C700c1a92Fd940", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000272022744955300 + }, + { + "type": "crypto-factory", + "address": "0xa246eD2954539f2eAa8e1FB72E02637f2a402AB7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xd18712370F840b1563D85eA6bD221f53d766ffA8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000015887819545200 + }, + { + "type": "crypto-factory", + "address": "0x9F13078A313cAf45146BBED973115dFB5De1D270", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000120023277585000 + }, + { + "type": "crypto-factory", + "address": "0x0E9B5B092caD6F1c5E6bc7f89Ffe1abb5c95F1C2", + "rawVolume": 1569943.1458980632, + "volumeUSD": 17140.42896404912, + "latestDailyApy": 0.9006237593345068, + "latestWeeklyApy": 1.0171065282788216, + "virtualPrice": 1015819615371077000 + }, + { + "type": "crypto-factory", + "address": "0x6868Eb3fcefe1684486F601d2dC10Bbf0C4EEB8b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x53DfCF5Ca1E1D5311Db29f585D56A9A9dcC2441b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x51Bcba35e5fa277592Cea83Ad14408A0963b86f8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.010742161010135476, + "virtualPrice": 1001182438976821200 + }, + { + "type": "crypto-factory", + "address": "0x4CC9385d9909d2Bf529A4c1E847Dc4eE01F4927A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000301659691246700 + }, + { + "type": "crypto-factory", + "address": "0x675993fB30a2d58Cd4D29d15F89B4Be9ca8765AE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6C5Acd4c044deFe22fEC287d1362B1aF5ED16f7a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x514747fCaeC6a72d1dC5fcc1CBB6dd21FBaD5427", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0F74dc493F1076247aefD5ba8Da677440D3Ba8a4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x593807B540d2584Fd16433dc609F869421577173", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x50e29cD32BEdf8ADF6C58cF0f8F2c64CB98C62ac", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000010263286138600 + }, + { + "type": "crypto-factory", + "address": "0xE02D418e3d522611e88ce6070A9037eCf0b16073", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9409280DC1e6D33AB7A8C6EC03e5763FB61772B5", + "rawVolume": 65834.75865533367, + "volumeUSD": 242321.536730146, + "latestDailyApy": 0.9404890268499111, + "latestWeeklyApy": 0.6293289166126481, + "virtualPrice": 1013410689788813700 + }, + { + "type": "crypto-factory", + "address": "0xB5ae2A6b084f59ff9EF6b2E79302A1878306D58c", + "rawVolume": 5135980.430732528, + "volumeUSD": 76522.89143420651, + "latestDailyApy": 0, + "latestWeeklyApy": 0.5568580318291882, + "virtualPrice": 1004451453437759100 + }, + { + "type": "crypto-factory", + "address": "0x1440AE2288345a78e753D0b1D679880031BcE653", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x17cd2d7C4DDf69897cc00E2943532C27259257c5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x098b69922A18639457B8490DB051B8854D33d2F3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xBDFAe7D2cF2E69E27b75a5287ECD3808F62B5a76", + "rawVolume": 10699.64355557739, + "volumeUSD": 1046.106840473947, + "latestDailyApy": 0.09724788171159293, + "latestWeeklyApy": 0.7457408018363365, + "virtualPrice": 1001823976268810000 + }, + { + "type": "crypto-factory", + "address": "0x0f3159811670c117c372428D4E69AC32325e4D0F", + "rawVolume": 654.4753650039477, + "volumeUSD": 1249813.2363713568, + "latestDailyApy": 2.4279158743863043, + "latestWeeklyApy": 2.2359420193789497, + "virtualPrice": 1017980135421999500 + }, + { + "type": "crypto-factory", + "address": "0xCa6cF273AB17073248654363Aa00b102540aa5Ea", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xEcB16535477F9cc6Db8D8Ea70b36D5020499d91c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002574301514649100 + }, + { + "type": "crypto-factory", + "address": "0x408CbC416DBF4168143B011bF5C297DA82cE03ed", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9a81f5a6Ea7e60632f659F3f4e772Ba977d80Bd5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.07613957951759787, + "virtualPrice": 1003861486002597800 + }, + { + "type": "crypto-factory", + "address": "0x5133Da6Ba0474368Ad0398d953c8D31c1B75b82B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000750142629950000 + }, + { + "type": "crypto-factory", + "address": "0x442F37cfD85D3f35e576AD7D63bBa7Bb36fCFe4a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.5754229144710354, + "virtualPrice": 1014112996373705000 + }, + { + "type": "crypto-factory", + "address": "0x6E855d08f2984516c40C4246A385bA4A2eDFcd0A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000494599876268500 + }, + { + "type": "crypto-factory", + "address": "0xe7c6E0A739021CdbA7aAC21b4B728779EeF974D9", + "rawVolume": 13.192842792741267, + "volumeUSD": 12656.832956616316, + "latestDailyApy": 1.3158194918526356, + "latestWeeklyApy": 1.316013081650006, + "virtualPrice": 1000169799704501900 + }, + { + "type": "crypto-factory", + "address": "0x41eA4045de2676727883aa0B4E43D7e32261f559", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.2435160461730063, + "latestWeeklyApy": 0.24603768280011265, + "virtualPrice": 1000534794492865300 + }, + { + "type": "crypto-factory", + "address": "0x73069892f6750CCaaAbabaDC54b6b6b36B3A057D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.3865977369184572, + "latestWeeklyApy": 1.482554260774757, + "virtualPrice": 1000605037631803800 + }, + { + "type": "crypto-factory", + "address": "0xFdaD22c8f63B32ACa0d273D828875FcCDa3880E1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x1DF0Bae5add689D6BE57aC6fd18b1e4a27B4498B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x2AF0a09b3421240f32953FffB13D2D2B8d24fbaE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001281694071017600 + }, + { + "type": "crypto-factory", + "address": "0x4B036A6769D5f1abb5A249a489348389C2907334", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xf514a54693Db2f3b4C43f78088d361b3F3A317A9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000034197445092600 + }, + { + "type": "crypto-factory", + "address": "0x7ce013171826FeB235Ed3fD4BA0171e64ac97D2b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x3D2253FA44C38d9870539dc2856286AA1638467f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9db63040dbdEe832D0824220fc47361674058eF1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xaBf03448f97708F06Fb1CaA5B58a30247f024D19", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x72725C0C879489986D213A9A6D2116dE45624c1c", + "rawVolume": 13467.849497941903, + "volumeUSD": 21388.39330039182, + "latestDailyApy": 0.9345579681062199, + "latestWeeklyApy": 0.8766004370135416, + "virtualPrice": 1004030047329785900 + }, + { + "type": "crypto-factory", + "address": "0x56e9BaC9e21b9390b3344320b33f7AbE776eD35F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xf5Ed6024c08fca91F85A20aD364a4F3994f3ecae", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x056ef502C1Fc5335172bc95EC4cAE16C2eB9b5b6", + "rawVolume": 92141.31197764997, + "volumeUSD": 6536.679661284893, + "latestDailyApy": 0.002093627381971608, + "latestWeeklyApy": 0.04147526044595562, + "virtualPrice": 1000305437617770800 + }, + { + "type": "crypto-factory", + "address": "0x47D5E1679Fe5f0D9f0A657c6715924e33Ce05093", + "rawVolume": 1184.8320731417596, + "volumeUSD": 3795.5230344442616, + "latestDailyApy": 0.08580272635621, + "latestWeeklyApy": 0.21848007524585267, + "virtualPrice": 1001105968190319200 + }, + { + "type": "crypto-factory", + "address": "0x5ac4fceE123dcaDfAe22bc814c4Cc72b96c93F38", + "rawVolume": 31861.412191259427, + "volumeUSD": 11593.33302189958, + "latestDailyApy": 0.15871012444441668, + "latestWeeklyApy": 0.2663085745782112, + "virtualPrice": 1004690797379205600 + }, + { + "type": "crypto-factory", + "address": "0xAF4264916B467e2c9C8aCF07Acc22b9EDdDaDF33", + "rawVolume": 840.9343802321224, + "volumeUSD": 507.10987653728944, + "latestDailyApy": 0.167237007480181, + "latestWeeklyApy": 0.21179728470428483, + "virtualPrice": 1003670765695653200 + }, + { + "type": "crypto-factory", + "address": "0x5105a9E847965421a8C81cA33Ea682948694A6F4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000012045210919000 + }, + { + "type": "crypto-factory", + "address": "0x7bbE7a17E501BB6542e975D8A163950149487fa3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.03839491410502216, + "virtualPrice": 1006298043196510700 + }, + { + "type": "crypto-factory", + "address": "0x0Db0A66daF641f812493C556A1e0f97379766276", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7E650c700b0801e717B352E55a582AFd928aa094", + "rawVolume": 2363.125016347703, + "volumeUSD": 1270.618382274322, + "latestDailyApy": 0.49410381912402546, + "latestWeeklyApy": 0.2832459608334448, + "virtualPrice": 1000442319993954800 + }, + { + "type": "crypto-factory", + "address": "0x61FDdD212F02F46fEa58DDfE3BE92D07B1249bCC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x87Ae54eA83B460B3819932595C090c23e03A99b4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xf5d5305790c1af08e9dF44b30A1afe56cCda72df", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x18a315D2ac23eB39F0C1B0085EdfF555D484C58A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x1cDF9650cd7c47dCfe63159924440E7A439B91f4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x880F2fB3704f1875361DE6ee59629c6c6497a5E3", + "rawVolume": 306393.37084069225, + "volumeUSD": 155514.7461241079, + "latestDailyApy": 0.10760447926845274, + "latestWeeklyApy": 0.12388842923920507, + "virtualPrice": 1001736760511643500 + }, + { + "type": "crypto-factory", + "address": "0x67e0bDbe0A2C5999A60D048f50e794218056b767", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.026744810806045294, + "virtualPrice": 1001006693761490400 + }, + { + "type": "crypto-factory", + "address": "0x5d859f3488ab3f1B2f19D06CEdD161A7db272494", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000009473773962100 + }, + { + "type": "crypto-factory", + "address": "0x38c60BcCa6AE0FDBD34466Fe8999BE15ee4e699e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x02ac4107893Ba767177D69851dcD87BedC63aB22", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x02498De890c66fA387E86E04d75AdaB9df4802F6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000208051751569800 + }, + { + "type": "crypto-factory", + "address": "0x8a8434A5952aC2CF4927bbEa3ace255c6dd165CD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.007823462773970391, + "virtualPrice": 1000139094962721500 + }, + { + "type": "crypto-factory", + "address": "0x5e431F70690475bADbB88E16D3a49ED8c4434e09", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x68cAa209c3b0E73Cc3e9CCF8d40978b07fbFFA96", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x44550B7D4c045929eD6f77c466852553A1fcba22", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7fb53345f1B21aB5d9510ADB38F7d3590BE6364b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.16735568576820015, + "latestWeeklyApy": 0.04537687388004308, + "virtualPrice": 1000177762227275000 + }, + { + "type": "crypto-factory", + "address": "0x031af153eFbc75a88110CB3b94eafBEC847a526f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x58fF1F6b706D01A3F3129eaEb04B90133450cA9A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xDe90bA7bb025F435B2A6f984Ef6Ea76D7c8BC853", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8dEC9CE89b1f6ca1A5C546bA72317F6A49828D81", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xb1d9b4574077eb6ed75B791c7d090Ea1F8c93474", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x04e7a76A910A499B8BBCAc18411aE68454AE348b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x06bd8DC3FFC8E8CFACEB9c967A3132e5B944246b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7e89315262217144BDe231c3a08A0361566599c4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xB0973f4FB4e1280D6bDDBa5b18aE00576a6E78f4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1010904273411065700 + }, + { + "type": "crypto-factory", + "address": "0x9304BD73eC6Aad8236D91E88f67eC1EB80658DbA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7a62Acf78407b4D02281c7c856E43fA24086Bf92", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x157cB788D3a40203A8f98696e7CDcb717befC796", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x632D58Ecd622322482d8BE083E58F43d2d8f3e8C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xe2cf543C6E59EA683DA0c94be5Ec1088856DAff7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7f541FCAc13094b29eeD27FeA94aa008e91D9f6d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x67526Bd70bF857aBf2cA19A9f16E900aA27Eef08", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0CE863FBB67A6a532323D1f81B8f0FCD5f5099FF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001665519177868900 + }, + { + "type": "crypto-factory", + "address": "0x1ebe895af819Eb97A008269C14422db82246A450", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001287533960704000 + }, + { + "type": "crypto-factory", + "address": "0x53E4a076b62667E8C8Aae13b8edC793e9a5F3FeD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xA551F34fc641f76F17498840C0ABFEC608410065", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1017211932408523500 + }, + { + "type": "crypto-factory", + "address": "0x3081cfFCAc989cb6F3Af01DC5BC309D70F6C2884", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003498021199150000 + }, + { + "type": "crypto-factory", + "address": "0xc878DD87D598Ece5D4900B5933C6a656227C528d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x02D7f419D731F718bDB22a3b03874C600bEC3a40", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1010633308689150500 + }, + { + "type": "crypto-factory", + "address": "0xd6f6fA524D4C9f7a5cBC8Fb9145a70d8D7Ed6073", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003863042285631100 + }, + { + "type": "crypto-factory", + "address": "0x84b209Ab30081322F124A0e3C96332F66652F9a9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0xAceeA24a09209a8e240C2751845F02627A201b5c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000805900791394700 + }, + { + "type": "crypto-factory", + "address": "0xBce97FE1D9ad16a633214e60182A850bD102C70a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x526aFb67A479D4e9b0154D4Cc1a44D47df91bf3e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xB581299623520687B483CCFfd04BEe52e94B82A6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000021290432788000 + }, + { + "type": "crypto-factory", + "address": "0xAF693adE4596d45ac294ceab920Df0943afB54D9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002240328150823000 + }, + { + "type": "crypto-factory", + "address": "0x96421Bb962c47fE5CF784161f850F83d77919996", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000022586225779800 + }, + { + "type": "crypto-factory", + "address": "0xcc659BBEA1E1580e9a9C89d8f268101F67A881E9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000014596811077800 + }, + { + "type": "crypto-factory", + "address": "0x7D00230379B18eBDCaf0104DA2bB59556dFE3CA4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000030273779397100 + }, + { + "type": "crypto-factory", + "address": "0x0D8bc03C14a135783B135d51b256997dEf69175C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xbdB3dfE9CC89739fC47Dcad0ef689627eaec7B1A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x317412f33a4cb32B32CC8011F3D22accb599C520", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x50AC42817A6De2997fA012C444896ab78A7e8DEa", + "rawVolume": 14222.306580867005, + "volumeUSD": 29359.071059905404, + "latestDailyApy": 0.026438882619594928, + "latestWeeklyApy": 0.16955123456334764, + "virtualPrice": 1001038749740596200 + }, + { + "type": "crypto-factory", + "address": "0xAa738040e9dbc91368dF782579CF1810A74e87FA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "factory-crvusd", + "address": "0x4DEcE678ceceb27446b35C672dC7d61F30bAD69E", + "rawVolume": 4825036.18442383, + "volumeUSD": 4824562.533823876, + "latestDailyApy": 0.5716168825002921, + "latestWeeklyApy": 0.33007623724568, + "virtualPrice": 1003792909422126300 + }, + { + "type": "factory-crvusd", + "address": "0x390f3595bCa2Df7d23783dFd126427CCeb997BF4", + "rawVolume": 2533862.412789793, + "volumeUSD": 2534797.7747125356, + "latestDailyApy": 0.6929922500641617, + "latestWeeklyApy": 0.3898812763918791, + "virtualPrice": 1003797155245857000 + }, + { + "type": "factory-crvusd", + "address": "0xCa978A0528116DDA3cbA9ACD3e68bc6191CA53D0", + "rawVolume": 44165.542228927516, + "volumeUSD": 44161.22953174321, + "latestDailyApy": 0.05970422309262702, + "latestWeeklyApy": 0.12110196930783523, + "virtualPrice": 1001882345967473700 + }, + { + "type": "factory-crvusd", + "address": "0x34D655069F4cAc1547E4C8cA284FfFF5ad4A8db0", + "rawVolume": 145160.31768748726, + "volumeUSD": 145157.29931556387, + "latestDailyApy": 0.1076653978802522, + "latestWeeklyApy": 0.2326000175991494, + "virtualPrice": 1001081726293980000 + }, + { + "type": "factory-crvusd", + "address": "0x0CD6f267b2086bea681E922E19D40512511BE538", + "rawVolume": 20806.684582672406, + "volumeUSD": 20805.87099771673, + "latestDailyApy": 0.07374688544701247, + "latestWeeklyApy": 0.21537765656758356, + "virtualPrice": 1000546678142271900 + }, + { + "type": "factory-crvusd", + "address": "0x58B94400bdAd7b9ac8d5335E12eF96E8B4966b4a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "factory-crvusd", + "address": "0xBe426b0f37c112dd20d5866769c8034171567b31", + "rawVolume": 44052.56446622339, + "volumeUSD": 44074.90754764085, + "latestDailyApy": 0.07177497884875983, + "latestWeeklyApy": 0.1827613366120584, + "virtualPrice": 1000258818549694300 + }, + { + "type": "factory-crvusd", + "address": "0x94cC50e4521bD271C1a997a3A4Dc815C2F920b41", + "rawVolume": 143686.33895103875, + "volumeUSD": 143682.34362743498, + "latestDailyApy": 0.062394607218840825, + "latestWeeklyApy": 0.08887639163903671, + "virtualPrice": 1000165367181761300 + }, + { + "type": "factory-crvusd", + "address": "0x86152dF0a0E321Afb3B0B9C4deb813184F365ADa", + "rawVolume": 11624.652681024476, + "volumeUSD": 11630.805668942314, + "latestDailyApy": 0.0001447310290281223, + "latestWeeklyApy": 0.6543772488574628, + "virtualPrice": 1000495374375978200 + }, + { + "type": "factory-crvusd", + "address": "0x1982Fe483f4bff067A2183c98fA231423d41E92B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.43787498403875524, + "latestWeeklyApy": 0, + "virtualPrice": 1000072870726150800 + }, + { + "type": "factory-crvusd", + "address": "0xA8a02c7D9ada50444F8c658F43Dc440675B21797", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8092326749566725, + "latestWeeklyApy": 0, + "virtualPrice": 1000042672996369300 + }, + { + "type": "factory-crvusd", + "address": "0xfC636D819d1a98433402eC9dEC633d864014F28C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0013643767528215278, + "latestWeeklyApy": 0.05653747426492828, + "virtualPrice": 1000260734035895900 + }, + { + "type": "factory-crvusd", + "address": "0x8272E1A3dBef607C04AA6e5BD3a1A134c8ac063B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000118426035313500 + }, + { + "type": "factory-crvusd", + "address": "0xeCDd0cE505da71cd9dE855CD6804BA1e8C7bdB07", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.28553145148044745, + "virtualPrice": 1000085659940404000 + }, + { + "type": "factory-tricrypto", + "address": "0x7F86Bf177Dd4F3494b841a37e810A34dD56c829B", + "rawVolume": 656350.6280547056, + "volumeUSD": 1375931.138732212, + "latestDailyApy": 0.33200928446244227, + "latestWeeklyApy": 0.19720087665797692, + "virtualPrice": 1001579443084926500 + }, + { + "type": "factory-tricrypto", + "address": "0xf5f5B97624542D72A9E06f04804Bf81baA15e2B4", + "rawVolume": 591097.6079775054, + "volumeUSD": 1233976.075954827, + "latestDailyApy": 0.25503137961391253, + "latestWeeklyApy": 0.25696277207709617, + "virtualPrice": 1000368115353210600 + }, + { + "type": "factory-tricrypto", + "address": "0x2889302a794dA87fBF1D6Db415C1492194663D13", + "rawVolume": 45306.28417064734, + "volumeUSD": 44040.80952129084, + "latestDailyApy": 1.5421326350532778, + "latestWeeklyApy": 1.5414392986708154, + "virtualPrice": 1000340660496260400 + }, + { + "type": "factory-tricrypto", + "address": "0x5426178799ee0a0181A89b4f57eFddfAb49941Ec", + "rawVolume": 5276.330172476369, + "volumeUSD": 28209.221135857126, + "latestDailyApy": 1.3045877315399634, + "latestWeeklyApy": 0.48189012759987104, + "virtualPrice": 1001066601471379800 + }, + { + "type": "factory-tricrypto", + "address": "0x4eBdF703948ddCEA3B11f675B4D1Fba9d2414A14", + "rawVolume": 520074.58833406173, + "volumeUSD": 457416.12705740426, + "latestDailyApy": 1.5040698090539095, + "latestWeeklyApy": 6.139416027934841, + "virtualPrice": 1020450444727747500 + } + ], + "totalVolume": 240020761.1930441, + "cryptoVolume": 11525356.093785543, + "cryptoShare": 4.801816324761973, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-fantom.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-fantom.json new file mode 100644 index 00000000..48511fca --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-fantom.json @@ -0,0 +1,1695 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0x27E611FD27b276ACbd5Ffd632E5eAEBEC9761E40", + "rawVolume": 30975.318259873682, + "volumeUSD": 30031.76996087398, + "latestDailyApy": 0.2402198788362675, + "latestWeeklyApy": 0.11910583896934668, + "virtualPrice": 1017587551183274400 + }, + { + "type": "main", + "address": "0x92D5ebF3593a92888C25C0AbEF126583d4b5312E", + "rawVolume": 46610925614768.46, + "volumeUSD": 351.2056119565406, + "latestDailyApy": 0.9479509103186512, + "latestWeeklyApy": 0.3661848385578814, + "virtualPrice": 1082008848095663200 + }, + { + "type": "main", + "address": "0x3eF6A01A0f81D6046290f3e2A8c5b843e738E604", + "rawVolume": 0.001740055, + "volumeUSD": 51.50750495963669, + "latestDailyApy": 0.6775057491414938, + "latestWeeklyApy": 0.12217913963963323, + "virtualPrice": 1003712794019832800 + }, + { + "type": "main", + "address": "0x0fa949783947Bf6c1b171DB13AEACBB488845B3f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.37559700667089135, + "latestWeeklyApy": 0.3855025763355613, + "virtualPrice": 1035975744160196700 + }, + { + "type": "main", + "address": "0x4FC8D635c3cB1d0aa123859e2B2587d0FF2707b1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.4297037991469974, + "latestWeeklyApy": 1.246644251684259, + "virtualPrice": 1172923104760501500 + }, + { + "type": "stable-factory", + "address": "0x1cb5C03d0585333A6D0578D47a5F9de66C80fD5A", + "rawVolume": 0.5550211549195456, + "volumeUSD": 0.11896885793635607, + "latestDailyApy": 0.22764785366655715, + "latestWeeklyApy": 0.13116007146851683, + "virtualPrice": 5737801790490910000 + }, + { + "type": "stable-factory", + "address": "0x2dd7C9371965472E5A5fD28fbE165007c61439E1", + "rawVolume": 3803.1846807040793, + "volumeUSD": 3984.867931112819, + "latestDailyApy": 0.1942370108162006, + "latestWeeklyApy": 0.13065837854484563, + "virtualPrice": 1063710560732682000 + }, + { + "type": "stable-factory", + "address": "0xaD9c5054CC31f8AA822AEb9247298D2Ecf48c5cf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xeCf64ba816C75e595fF212391E80B5CD9071E7D5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x38D0dD9d036ce6f291442c258F1cc2FC0d10e682", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x259303442a9772222856C9Ae5212051048Bd3D9D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1c7FA28E7BFa396a4B044cC939daFF51674d852B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.22266676713180722, + "latestWeeklyApy": 0.12009249763171859, + "virtualPrice": 1012138871165837800 + }, + { + "type": "stable-factory", + "address": "0xad71Fc10Fca8Ce6a98843A64b95E0C63516CA7F3", + "rawVolume": 510.0573611272164, + "volumeUSD": 477.3404658120042, + "latestDailyApy": 0.33934490025040454, + "latestWeeklyApy": 0.31192892966069863, + "virtualPrice": 144662639053891960000 + }, + { + "type": "stable-factory", + "address": "0x4cd4786426eD34DBd96ba64e4a7B676FAD25D71C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5AAC39FD59300f913096afafaa7b8E0be143f1b0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd3f83ec4BB684712D9CA8519eDAfbb910470F77C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb17DeFAB9Da9A48F2712B92db8dA7c4EDb2D1c0a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x36586206bFc13ED520597b3DAE1313C8b1496388", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x68dde7344a302394845097E96E83cDdFe6D4d76e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.22502177718286553, + "latestWeeklyApy": 0.11898552463884826, + "virtualPrice": 43462453531786740000 + }, + { + "type": "stable-factory", + "address": "0x28368D7090421Ca544BC89799a2Ea8489306E3E5", + "rawVolume": 578.5842255509731, + "volumeUSD": 597.9490878171418, + "latestDailyApy": 0.22478694370893226, + "latestWeeklyApy": 0.11145836383203989, + "virtualPrice": 1056812626789175600 + }, + { + "type": "stable-factory", + "address": "0x12cb0687B95158340287D8391D0Ca5314c10532D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.22152954152212523, + "latestWeeklyApy": 0.11648310317149413, + "virtualPrice": 3669765548965780500 + }, + { + "type": "stable-factory", + "address": "0x7a656B342E14F745e2B164890E88017e27AE7320", + "rawVolume": 9.02079212933046, + "volumeUSD": 10.067649659883012, + "latestDailyApy": 0.22139457043253152, + "latestWeeklyApy": 0.12595212852519744, + "virtualPrice": 4230130929270476300 + }, + { + "type": "stable-factory", + "address": "0x96817E9E47419dd66346AB64811e0f43aB75fEC8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC822FC64AaD7b04B2eddE961c0704AB80F9D217B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc955b79959aca2895AC8667A418849e4C218A708", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA7d2Ac1D5A1cFba7e3e21B68e76c48dd16348592", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF427A0BE7524B022f89742EAf2F52EA433280aC3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9834766a92135DBd03b987Bf423aB89A18656194", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xbd05dF58eD93560457aD2Bc8d1Fe69Aa45Bbd636", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD5B51BA080F815446646a61039fBbFef5A12A4CF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.644267875917004, + "latestWeeklyApy": 0.09941618900362048, + "virtualPrice": 1017550521756649200 + }, + { + "type": "stable-factory", + "address": "0xe38e2c6361c14a17219f7c00bDD93DCc945f096A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x34033F0227C48bc3577aE5C6923A3DEEF3E36670", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x43EC4106b3A09b17f8669E268f36Cc5cdd5F356f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD73a2802697263fb84cb06bBCe9501A2d33dc880", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAD6D5548c45b1b198A4A563Cba1C3D384AFc44C6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x03fa4c23bA3a7BC0BeC18789CE29c7857324bD22", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x115266f936B2ea12eBb5cf5eB2D35f9c46614436", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 17.242388397861387, + "latestWeeklyApy": 2.310060120591828, + "virtualPrice": 1068276045869756200 + }, + { + "type": "stable-factory", + "address": "0xE8117F058A37367d6bf70a8E56B569d7fd5e2A8B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x83A503780983bbaBd6ACab577FbA2c5A3DcAa57f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0919918535469133, + "latestWeeklyApy": 0.0456288409714567, + "virtualPrice": 1002892645211496700 + }, + { + "type": "stable-factory", + "address": "0xB407481462ec40b706DF0D22e11d8BEFbc2Adf54", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x075C1D1d7E9E1aF077B0b6117C6eA06CD0a260b5", + "rawVolume": 291.37973513626724, + "volumeUSD": 295.54347764884074, + "latestDailyApy": 0.1737728326278054, + "latestWeeklyApy": 0.09211743530663785, + "virtualPrice": 1006714401383133000 + }, + { + "type": "stable-factory", + "address": "0xA7CC236F81b04c1058e9bfb70E0Ee9940e271676", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.023350097817531612, + "virtualPrice": 1066814303654567400 + }, + { + "type": "stable-factory", + "address": "0x11093B0F9780ACcdb6322959a45d749Ca3789257", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9171aaa40AD493fa6B6DACf60265272Cc58E49d0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x16E0bf935e696E0652CDB3EfA10b6A00C162d135", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDE535Ee3999470286178B736e6A8D976a6822A3E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3134771551215998, + "latestWeeklyApy": 0.32174563897842123, + "virtualPrice": 1015037197670530700 + }, + { + "type": "stable-factory", + "address": "0x6EF78ad4a40E9A6c81B9229de3eCc33ce591bC34", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.34681992736620426, + "latestWeeklyApy": 0.355966770605165, + "virtualPrice": 1029660215669156000 + }, + { + "type": "stable-factory", + "address": "0x8B63F036F5a34226065bC0a7B0aE5bb5eBA1fF3D", + "rawVolume": 13.898322687474108, + "volumeUSD": 1.3167643134057959e-12, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 38651778506809410000 + }, + { + "type": "stable-factory", + "address": "0xF95ab97a4d41bA67A8F7298a3C9245C293855659", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xbcC30798BBC4cDe6011a2C8cB7e5C21e5f0D0e35", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x64a4CDc2c96146f8588dfB16DD3660Eb6Ea4109B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6d304d364B461Aab0496bf696A23F44a55fc43b6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.12036340230803244, + "latestWeeklyApy": 0.05969703065313858, + "virtualPrice": 1003504527115062000 + }, + { + "type": "stable-factory", + "address": "0xBe26e1858faFbF2de92fdd717AC098E34d9e526A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.02278726040976231, + "virtualPrice": 1006049535703401600 + }, + { + "type": "stable-factory", + "address": "0xa3500EEC27bfD7d0000982DB3290a2c79143ed80", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x84f21b7ceb64906320E2b62cF73Ff03dcFd137dC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.08396145061726479, + "virtualPrice": 1001919965847470500 + }, + { + "type": "stable-factory", + "address": "0xDC371bB71dE3a8E50683E7eb596690Db9D0365Cc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.1256014074844103, + "latestWeeklyApy": 0.06229409985545331, + "virtualPrice": 1003701600139506200 + }, + { + "type": "stable-factory", + "address": "0x57F24a2E740516a351E2357d74215d235eE725FE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9e85a45772F1078f3CaFf4B8c0FB43de4CA776E2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x138CCfE5d99c139B9c4918AcE02a082cA67693bB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x96059756980fF6ced0473898d26F0EF828a59820", + "rawVolume": 555.3886171551571, + "volumeUSD": 565.5158186190504, + "latestDailyApy": 0.09661288011308944, + "latestWeeklyApy": 0.0480500207808543, + "virtualPrice": 1007513455773200400 + }, + { + "type": "stable-factory", + "address": "0xEf3A4Fa40Fda4Eff051f14828dCe1C47d17488B3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF24f1061ee2C116D8dB1d0F6C791bCB741F9f08a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x170eAAeBd5D398003A42A7414B704e13E1744c3a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc1ccCec6FC0D23B471E1c3877cb7558442D35Df5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9F83dbD9dBE351e3575a65dF04Ce34d3426e5B06", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe1bA291eED6Ed14A4e65dCbe6a4936Fe15B3A1a4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA58F16498c288c357e28EE899873fF2b55D7C437", + "rawVolume": 10314.729301295947, + "volumeUSD": 8126.175694595659, + "latestDailyApy": 0.21936044037034197, + "latestWeeklyApy": 0.23591452869755614, + "virtualPrice": 1023881345149531800 + }, + { + "type": "stable-factory", + "address": "0x24699312CB27C26Cfc669459D670559E5E44EE60", + "rawVolume": 34029.54790808303, + "volumeUSD": 34009.42041403416, + "latestDailyApy": 0.29563738904392345, + "latestWeeklyApy": 0.19499513001748348, + "virtualPrice": 1008211680312924500 + }, + { + "type": "stable-factory", + "address": "0xCc0F443c62229f8944379d87a853f1898e682214", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.19847524032574615, + "latestWeeklyApy": 0.098418598965333, + "virtualPrice": 1004622553088825600 + }, + { + "type": "stable-factory", + "address": "0xC1A2D9341135c7e3f00EDBED51F9C7acab7c7B3F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x43a9f7d71F59DA647E367a713b2c2534A3938047", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc687e9038d7aCECF4842fD06D1b8d2d8CEF8e790", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x872686B519E06B216EEf150dC4914f35672b0954", + "rawVolume": 0.5822993419770299, + "volumeUSD": 0.32840708538537744, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0771754767936006, + "virtualPrice": 1119522122950626000 + }, + { + "type": "stable-factory", + "address": "0x859009D02F0f609E585Be78e4427599FfaD4Ca14", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc87dc1E718E5dAbB438e69E8F3A1a6979dd46868", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x262a70f82df61a94F3E6fCD17895A25d6bEb07F6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1dc3F42f9E598999a784498D00f360F305A5B4D2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9452699E70b648A3A499FA044bA0e58dEcB21A5a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1484Ae179657e01dE76C0Dc95A5838B1e797eB81", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB3045222d3F3725C4bEB1047f6C54514b3333ed7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8cD8Ab34189ee11A60c17Fb8bd394e4702De11fb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000137165930423000 + }, + { + "type": "stable-factory", + "address": "0xa1F70A0515BDc2954508125aDd49f72d01ee74c0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 3.21661533968598, + "virtualPrice": 1039225849421167400 + }, + { + "type": "stable-factory", + "address": "0xa5FAE68615010EFE0F22E98C48c75BFBB6141718", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7c79acC9aEf46E4d55BD05d06C24E79C35183241", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0F5e1fC301437b344271c14Ffb52431a97CE4113", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xee6Cc45B3c937DdBa9FAdD44eBA3Ea4dcceE05f1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xEEf1f7F11c3728100737c6355EEfD40Cacd6B506", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x674E594A71464DDc55737ebfba37062B9044f9F4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7673F9226C8Ce29a86ED6Ad1C1D8574BB1d201e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9dc516a18775d492c9f061211C8a3FDCd476558d", + "rawVolume": 2986.3235672489855, + "volumeUSD": 552.0355110711914, + "latestDailyApy": 0.14743300676136606, + "latestWeeklyApy": 0.12357315624735854, + "virtualPrice": 1014433617645837700 + }, + { + "type": "stable-factory", + "address": "0x261036923F4aAF1322a3173921fCBdaE51352CAe", + "rawVolume": 0.5078885, + "volumeUSD": 0.5021344678907306, + "latestDailyApy": 0, + "latestWeeklyApy": 0.8079266081806535, + "virtualPrice": 1018031246401253900 + }, + { + "type": "stable-factory", + "address": "0xFa6Ddd52738FbEC9Ed649986AA1b74236B83aEbd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAD0FB83a110c3694faDa81e8B396716a610c4030", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA8B3C9f298877dD93F30E8Ed359956faE10E8797", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3285823471264715, + "latestWeeklyApy": 0.10473070503433934, + "virtualPrice": 1004691330471958700 + }, + { + "type": "stable-factory", + "address": "0x78AE5704B6664a07f14c7d3a14a98e7d6DfC80aa", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000297678378369900 + }, + { + "type": "stable-factory", + "address": "0x46F5ea3B7867b451Eb1568FA820a6e89c5492795", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9a1394f9f9F2d600A4F4062190B941b036865FF1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7e4143Ed63635E5f53f0272c307eac4A5238037a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002007264079681000 + }, + { + "type": "stable-factory", + "address": "0xF0B05FD8846F419FC0D4C9680A684cA28b60a368", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.1600192731975536, + "latestWeeklyApy": 0.07935717119273988, + "virtualPrice": 1003458218910786300 + }, + { + "type": "stable-factory", + "address": "0x6fD29C93897B756939c4F67c9C9ECe9284aFdE2F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1020878544925946200 + }, + { + "type": "stable-factory", + "address": "0x3C634D37871c0E2e0CA85eB23A4ce29Fc1243853", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xda14b5E8dF1F2329783aA60a02F8344dE121e38d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8505f1e4EBdcDCA1831Bac96774A9cA5ACA97034", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3187E6408afF63453300fA3650018C32b96eE677", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf0D7446b983e39B92B5a64624188D725B583DC38", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1178ce387Ce454F2d8899e9E72299107216D7146", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9B128AeAD5211Ae155C3DC857796A0A0abEd76C0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6BA351c6382a0f7C4257103401192C10996C4402", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3a93B1a8c565648379d2975dc9d3Cc1DA309F221", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x93F04A793189f1D9e37659cEF09eefa04002F689", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x27F073ca3EEaad81A505B39ff73f95F59010B894", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6186fa77434695448243F211745e759d94d01AD4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x47cce0A4396a7Ec2a247CA81a9bDd74A3B727b11", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.15630886437785207, + "latestWeeklyApy": 0.07751783525122846, + "virtualPrice": 1002861023076232100 + }, + { + "type": "stable-factory", + "address": "0x9cAd21e5781D621dcab1ceae120551Bd5cd297E9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3D324472cABF7daED56aF7fa9E8BFa397F5a7CcF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9C4661c51058Ec047196F350297f0b288e7b7b87", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf864fED8ACFE622d5f92568A0cD50A625CaFeeFE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.505600027089394, + "latestWeeklyApy": 0.35862854578092573, + "virtualPrice": 1002332013928273200 + }, + { + "type": "stable-factory", + "address": "0x377d52CDec942F4C139c7394E5b3d6893A8728D8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0329d377f54B2a5705788008534CEeb968f20A3f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x20eD8cAa61BA7147a2545dc7f09e241329799d6E", + "rawVolume": 75.34987540785833, + "volumeUSD": 13.414656166889845, + "latestDailyApy": 0.22485108069507653, + "latestWeeklyApy": 0.11149018505991481, + "virtualPrice": 17221331137630583000 + }, + { + "type": "stable-factory", + "address": "0x6E6c999e1893dc2E68b4193108bEC307b6C42f96", + "rawVolume": 446.3605990916111, + "volumeUSD": 344.7782715972256, + "latestDailyApy": 0.1464925854965493, + "latestWeeklyApy": 0.0737646037956452, + "virtualPrice": 1020695379400620300 + }, + { + "type": "stable-factory", + "address": "0x7dDdE570bfb3A968a2894b491759e7415Eea145E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000010000000000 + }, + { + "type": "stable-factory", + "address": "0xc86A58954DE2BCEc527d9b32Aff4652E60207005", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xBd7D823eb731435472028faD5C50379b109d0e6D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xfD54deF3BdBd8784a92CFFc1290717bE7288BE01", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000100000000300 + }, + { + "type": "stable-factory", + "address": "0x60866Bc5AfD01739aC15c22CB33CE7DE42F8D9DF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000001000000250000 + }, + { + "type": "stable-factory", + "address": "0xB84d0aF96d4eCA837843CF6ACf8e2fa6AcF69765", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000290702942340500 + }, + { + "type": "stable-factory", + "address": "0x079D2298A05974CE556c2592Dd5c7D20B2364d2d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xa5c3620fae9adB58E0626836a2D03Aeb6a26749e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000020003995000 + }, + { + "type": "stable-factory", + "address": "0xC5D1c87cefb14183b86E10336AE274AFa1f387e1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000020003995000 + }, + { + "type": "stable-factory", + "address": "0xf4775Ead13fABB333aFD36964006e4c0B720ad23", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF5AFA33e8b3bA76AcC72388625f2eAfF072Dcd8e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000339863255600 + }, + { + "type": "stable-factory", + "address": "0x70b5371442d1aDE57dB3Fbf00E9fABD56d871070", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF3c8E2172EE1e6Bd90933e8f31bBdfce2f7bFe20", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000004783097556200 + }, + { + "type": "stable-factory", + "address": "0x6f175468129D1EfA8cbfF2BF575F9C49a64c7060", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xBfd6122253245954bbf9f2966F27e788C9e68c4B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0x1dEad61596aE75C139eF92798aB9641C1284E03E", + "rawVolume": 207.61209599323556, + "volumeUSD": 223.05827825355146, + "latestDailyApy": 0.015521311996069542, + "latestWeeklyApy": 0.0077003053288615675, + "virtualPrice": 1001663108963444000 + }, + { + "type": "stable-factory", + "address": "0x866d6D99f422F24D2404fd5e9ED4DB9edF0B3023", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x47bB1Bd096F37F8Aa3F41A02b77E05CdA65Ef08F", + "rawVolume": 7.231595782446735, + "volumeUSD": 8.205995880799113, + "latestDailyApy": 0.3594933169605019, + "latestWeeklyApy": 0.14579134155912055, + "virtualPrice": 1003909245485411100 + }, + { + "type": "stable-factory", + "address": "0xB6C7ce3813078769A8C698db19239f61B7ca627C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x31D8F85BCE2a4A096A2d207F8f113D1C3feC7c06", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000635719846304800 + }, + { + "type": "stable-factory", + "address": "0x0cA1E358E320717494a0cC9211Fc0d5546d23A60", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.014586939672578403, + "latestWeeklyApy": 0.007236791262821285, + "virtualPrice": 1009801643986219900 + }, + { + "type": "stable-factory", + "address": "0x4560262B27655C9C2978b030CCF7815777D7A3f1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9029e4c67Bc095b03C85F63c57e57a6fBD1E510d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDD679D523a016a4d2eACc9614dbc0D2318b93ae9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.02376419192788859, + "latestWeeklyApy": 0.01178936207315573, + "virtualPrice": 1000624627837954700 + }, + { + "type": "stable-factory", + "address": "0xF1CD9A305b71A2EAaE9cBC57e0e11A1e214f7219", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000029013365430800 + }, + { + "type": "stable-factory", + "address": "0xcae2925267Ad62B6115881169b8606AdEaA7BA50", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf51B20668593CaAB20c56015fabCBE67963e17c7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x565fdfbf8e60717DA016045118f175f01fa8d23A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe89808f3B9F76beF5b580F08A09f998f1978576A", + "rawVolume": 0.914416042118, + "volumeUSD": 0.948362229662067, + "latestDailyApy": 0.17194561356586036, + "latestWeeklyApy": 0.024478205510125584, + "virtualPrice": 1000087170898011600 + }, + { + "type": "stable-factory", + "address": "0x78ed6aF913D66F60d339d81CF5C5188473785070", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x44C2C46C87B869e276C5B418E0B0E297651EeDB0", + "rawVolume": 391.3725926200548, + "volumeUSD": 391.211284233229, + "latestDailyApy": 0.1011092131147251, + "latestWeeklyApy": 0.06232740131122405, + "virtualPrice": 1000265575377607400 + }, + { + "type": "stable-factory", + "address": "0x1eE5629fb624412354Caec457C8B4E67F7027A2F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002502845688309800 + }, + { + "type": "stable-factory", + "address": "0x23d5916BA743354aEb066359E322d31279FB6018", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.06563002284618591, + "virtualPrice": 1000462051721029900 + }, + { + "type": "stable-factory", + "address": "0x64f7916a65DA6175CCFdB662B724Af271CA30cCA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x02Da5D38a1939f6B54D5F506f03b2ba5163C5650", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1B8b3bC0D702615B30BfE7c55B8EBfD5f7863F4b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF029C305dF2695fD55614B9be93260AbF5dAcC42", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto", + "address": "0x3a1659Ddcf2339Be3aeA159cA010979FB49155FF", + "rawVolume": 11775.381617622885, + "volumeUSD": 11764.3168685, + "latestDailyApy": 0.9501750916786511, + "latestWeeklyApy": 0.8528852972071066, + "virtualPrice": 1042246207916806300 + }, + { + "type": "crypto-factory", + "address": "0xEC5AFc9590964f2fA0FeED54f0fBB2A34480908D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xc7c939A474CB10EB837894D1ed1a77C61B268Fa7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x36BECDcBdF49255F366a45B861B4223b482D35e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x697fDefe26AcA625c86DBD07D3b95fDe3E7F7de5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x8187d4734Aa4BD78f0A2F7941E276E410e37f033", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xf5BED2BbE798187272741c3042CB662c8Bb67DAf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x36bec0732c913C87a558D6A16f077D5B3D7476C7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xC0B78F2e96De56d08C7608697680e935FE47295B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x48087143Bd15b99e67a8cEc578E4D884A4bBF124", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xd9F354177Edd66E7A6669F33d0Ec64C14E153b38", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x30F217C3423f824de89abE941Da49887BaA8485d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xcaC8002275BC596e6FEfc88807E75f5B6646Fc10", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xB47dF195c7805B2bC9a20c2631b2234753625CD0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xFb6FE7802bA9290ef8b00CA16Af4Bc26eb663a28", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x5E078b90Af4A1899ae0B1BA17fF2E443F4eb78B0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x8705A57a7305E971d8fc897dDb4E0b535D7a047e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x7cC19f8c258D7F489BC1074437e25A46e397688F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x12FA77685728ABcBe1d5c7C11638d2C8dF250478", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x36fae0c62fE24C7Db4983af90c8901C1D7612cD4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xE8C9aF58EBA1DC532C1707B1e28736d3c9d1AFed", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xeB5f4c45E29C05c5FB166B72A173dC32831b4239", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x8E6692B6Fc3bCE7d5291C96ff02bA24E1a329C60", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x48d794c9B1acb3864Ae0c63E9E5D19a6EC80A2c6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xc7d7133A2a4CB8D8B128e961eB8CD3AE85Dd6204", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x3320C9E72fFa1116A7Bb5547F5aE7B2fA2A9EB75", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x552FDB8BE01C640fA308481aB1E9a7af9D62D0f7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0xF4f2c1710e4470E58e4841ea0653f949bdDDD67f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x9D874dFC60edc490d76f78663204FcFd608151d7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x453c551879234682D2b823EdE73a2Ce41a5150AA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x38aF0A6D3551fA982Ffad038B3b238DF3757204B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x085Ba43f0f6d152d6842721Be0BD18cE2B828010", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + }, + { + "type": "crypto-factory", + "address": "0x4E7F7A0C44618fc0379f633A6697137955B0375b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0 + } + ], + "totalVolume": 91800.28235543349, + "cryptoVolume": 11764.3168685, + "cryptoShare": 12.815120571144616, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-harmony.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-harmony.json new file mode 100644 index 00000000..078421cd --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-harmony.json @@ -0,0 +1,7 @@ +{ + "poolList": [], + "totalVolume": 0, + "cryptoVolume": 0, + "cryptoShare": null, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-moonbeam.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-moonbeam.json new file mode 100644 index 00000000..5096bb23 --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-moonbeam.json @@ -0,0 +1,260 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0xace58a26b8Db90498eF0330fDC9C2655db0C45E2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1006907334818289400 + }, + { + "type": "stable-factory", + "address": "0xefAE5795170D7F97538c7fa6E3DC8aaA1F8e700d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1008916171881715200 + }, + { + "type": "stable-factory", + "address": "0x0fFc46cD9716a96d8D89E1965774A70Dcb851E50", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.008275489166020833, + "virtualPrice": 1001595389227764700 + }, + { + "type": "stable-factory", + "address": "0xF9E345A61858FA7125dDD8b96453ECDa7Cae81c8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x019573e34054f68b572051705cA75e83431D063d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.022272812864265745, + "virtualPrice": 1006873091849009800 + }, + { + "type": "stable-factory", + "address": "0x84316b08C757dBEDF73C6bf0eFBB4dD357E2A1b6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd937afa3E51aAc92FD6B4c9F487D7B9D52Fd7417", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x12B2B5A44a949Ed30592e97496103C8EA8B157af", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x30E04FC620863B097878EAFB95616F6c7514a30C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD501dF2eB24b97f007d03630BE2CABa9825158DA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc2CF1D6Fc6951b6D53c9f1Fc612eDd4d95c88e5C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x73E7e05592356b16bB4b6445C8b01f5972CFA50f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC6e511034589b59A0254C49678DDa6d397d029EC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x01522c8d4A2346f8e26E7715D7F391Aea5E9D7dA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3e7FafE8a89474Ce001A9908a62d71a8f788e8c4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc6e37086D09ec2048F151D11CdB9F9BbbdB7d685", + "rawVolume": 82.53926011415, + "volumeUSD": 447.37782371285215, + "latestDailyApy": 0.022406615287029474, + "latestWeeklyApy": 0.024320337953276372, + "virtualPrice": 1081871041408105100 + }, + { + "type": "stable-factory", + "address": "0xd0C855C092dBC41055A40297420BbA0A6f46f8ad", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE7c18E26e9798f9a3C73396522b3053c17738fb5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x94A97FEF4D1Bf4707Cc1679CabbcC100d9a63439", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000348441730446600 + }, + { + "type": "stable-factory", + "address": "0xFF6DD348e6eecEa2d81D4194b60c5157CD9e64f4", + "rawVolume": 33630.107472342606, + "volumeUSD": 33559.47726431963, + "latestDailyApy": 0.9708825012147759, + "latestWeeklyApy": 0.4670473070543135, + "virtualPrice": 1001506071048134700 + }, + { + "type": "stable-factory", + "address": "0xE5dBe9672330fdBd0e95B1E444F2E9C8991D5f82", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb0e3648D550CD8fce2fdac5Bb7002ACBA2F29f98", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x677070021A161EA3DE97ADc89FBE5CBbBcCa6108", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5dE9D7EB5CE7622Bda4890133EF70aebC379aaAc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9E256D306EcB088c09CFA5C066A297121A0FdA08", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xBA6D5E6fb5AA4880BC1331F9ED8ddd65B762c9Fd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x686B060a8AB193167091E9c82fd72D1FdD56b052", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x255834B4F17610cA8CbEfceB177235F15DaDF9D2", + "rawVolume": 33728645.17448731, + "volumeUSD": 24020780.77518283, + "latestDailyApy": 0, + "latestWeeklyApy": 5.05198438147938, + "virtualPrice": 1373538070754374100 + } + ], + "totalVolume": 24054787.63027086, + "cryptoVolume": 0, + "cryptoShare": 0, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-optimism.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-optimism.json new file mode 100644 index 00000000..87afe258 --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-optimism.json @@ -0,0 +1,674 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0x1337BedC9D22ecbe766dF105c9623922A27963EC", + "rawVolume": 5109672.061048977, + "volumeUSD": 5109818.201102232, + "latestDailyApy": 1.3266871098569721, + "latestWeeklyApy": 1.179375014511841, + "virtualPrice": 1019643212215520800 + }, + { + "type": "stable-factory", + "address": "0x29A3d66B30Bc4AD674A4FDAF27578B64f6afbFe7", + "rawVolume": 52.824255574222434, + "volumeUSD": 52.76944012864408, + "latestDailyApy": 1.1788880780209787, + "latestWeeklyApy": 1.2184872511874278, + "virtualPrice": 1004403158758359200 + }, + { + "type": "main", + "address": "0x66B5792ED50a2a7405Ea75C4B6B1913eF4E46661", + "rawVolume": 1.0170185, + "volumeUSD": 1.0171971789891605, + "latestDailyApy": 3.751718449561592, + "latestWeeklyApy": 2.907808015717128, + "virtualPrice": 1225243588556053500 + }, + { + "type": "main", + "address": "0xB90B9B1F91a01Ea22A182CD84C1E22222e39B415", + "rawVolume": 1.235798888641354, + "volumeUSD": 2269.976984242507, + "latestDailyApy": 2.004551699063395, + "latestWeeklyApy": 1.8450588331833995, + "virtualPrice": 1033247180851749200 + }, + { + "type": "stable-factory", + "address": "0x061b87122Ed14b9526A813209C8a59a633257bAb", + "rawVolume": 214647.69432107112, + "volumeUSD": 213508.91575123402, + "latestDailyApy": 1.0020740868961209, + "latestWeeklyApy": 0.8441497761739303, + "virtualPrice": 1016816453902197500 + }, + { + "type": "stable-factory", + "address": "0x3da3153E26A230d918bb9F9428A8d60349B73379", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 68231531718821890000 + }, + { + "type": "stable-factory", + "address": "0xfDfEb18721c1999f4b71fFCae544991E797721F3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9507576B25299661aCf78cB27fcEDE7215Db8F94", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6645237fb81fe7227AA2Fa2A244D23A5AC0DA1cd", + "rawVolume": 323.9026072283403, + "volumeUSD": 320.83688746694304, + "latestDailyApy": 0.43036244559278014, + "latestWeeklyApy": 0.37831593574164657, + "virtualPrice": 1029850858421794600 + }, + { + "type": "stable-factory", + "address": "0xf822390A28e79bdAD3453A3a31fF0dDeFAfbe05f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa62D71c18e2Fcb2e80C6357F7c04F9349840665A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5810d004BE3662549D5e42E812Bf57090e0CC5Ae", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x309970d0cCa31197620FEdbedCd51BB46e2a73BA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x44A3e148fdE06FB56CEF741CeB886d37A25430b8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7Bc5728BC2b59B45a58d9A576E2Ffc5f0505B35E", + "rawVolume": 2.2337274215966456, + "volumeUSD": 4060.8287624425498, + "latestDailyApy": 0.15232332421637462, + "latestWeeklyApy": 0.10731170279267843, + "virtualPrice": 1005816990523177300 + }, + { + "type": "stable-factory", + "address": "0x7C13F8fdbed6fa2dc567b2F7C85f116E0c5aB5c3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9F2fE3500B1a7E285FDc337acacE94c480e00130", + "rawVolume": 0.000003144441738935, + "volumeUSD": 0.09115409724556267, + "latestDailyApy": 0.008294417872622972, + "latestWeeklyApy": 0.13871907689348983, + "virtualPrice": 1003171798505278300 + }, + { + "type": "stable-factory", + "address": "0x29dE7E98d6d1a8f0777E0B4DA4d6EeE76fd4B9aB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x41034d57421679E78c7258C9Bf83d5525A41DA2d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF44302A16224d8428CCDbf78Eca70370126ed746", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000438324959021400 + }, + { + "type": "stable-factory", + "address": "0x5695a0194eB3C766C5c5CdC094f1169B686BE1eC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x54DCFE120d608551f9010d3b66620D230fD5c11B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6441735617183086, + "latestWeeklyApy": 0.6657927849036849, + "virtualPrice": 1655891524527072300 + }, + { + "type": "stable-factory", + "address": "0x75B2F45C1c8A23C6A4Ee9449aBc92899aa2e2889", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x43FD45DA6D1E68aE5beaaeBDD634F16b9FA806da", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2df9fDB9c43941e00240644DBF4F463acE01e0B0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF995d84F6032Ca8f7729852614B023969d73B424", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x634981bbD226fd101b3364C4AEA5a2294dEe02Dc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x15dD39D2476eCAE26d42659B5226D754782D7e10", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6404074b222Caf3f9DdFec58507D2082471A9E98", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDeE0F50F866599030786d22359Dc60f049197b99", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc8FE238784F967241F306E3F089DA9580327aeEA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc146459fafC272B515bE7A2E29b7FFC71FfA6B7f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8b52bc60c8668c76966F5f3472Edf00D9426f969", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x47e1261b7c931dF52cf37c57040B2D2DCfc2fc63", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe74d004BbD80B32e37dbC004614f58fCf35CD270", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE475f889da02ccA3a5b077A9D14384F29a20Df43", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4EFE19f64675d684837A94aed84A69789AF4d32D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD07d5877b1B04D8d9Be87F6Fa71664f68B07cC96", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6ED543cF201dbfc9669Af95CEB55bD39FFd044Ce", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6eFb0bdCf3e89Cfa175E3FDAB7AF415fA53833b7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAE13DFf69D84d87aE50ad841377d5F9d33d857Cf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.0891105424541747, + "latestWeeklyApy": 0.9683467987439354, + "virtualPrice": 1003275958394898000 + }, + { + "type": "stable-factory", + "address": "0xa2f1E7E65bfdBD264D6e3cB4dA50eDF7fc77b861", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3916220100909751, + "latestWeeklyApy": 0.3483727509333123, + "virtualPrice": 1003235059779289300 + }, + { + "type": "stable-factory", + "address": "0xb327d8D0372034EC53BBC07E2D2899B18B0131C0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7Eb9405e4f0Bc813ad4439FCa77BeEAD64c2bE26", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAB0dE6d1349bee4EBFFb9c6557b30F239f500feF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xEc502409e1bE73ebF45C7582A3ad28B3F7e16510", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x542f7E8D6322d276395Aaf3Ce0f808A33B52006e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x02710B50d54342680Da75f018386AbD1f044C329", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x49cb124C22727b768550C4Eb6398A734DCb8Cd6b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x30170aE3eE88b7c05427aD00A643aCE8293bA971", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x810D1AaA4Cd8F21c23bB648F2dfb9DC232A01F09", + "rawVolume": 27853.773022274196, + "volumeUSD": 27814.163408122, + "latestDailyApy": 0.6967203841191649, + "latestWeeklyApy": 1.338133932236829, + "virtualPrice": 1003896554702986200 + }, + { + "type": "stable-factory", + "address": "0x1522b6CcD111BcbF37CfE088F3594B89a4784968", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0105D09f5Ea12dD2FA6232fF76044c895F06A920", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x986c430A6b1111b1D16b260C778Ba3181C4A0Fe8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc0C4bcF3ED866685e5E944FD485748099F23FaAC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAEA4DEBbB349a54Cc27419aBBbbA94AB0Bd276A7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x12fC671AE22693f3283BcE0DA8F61b0ec05A400A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x047fE1fB7b3a2C13BDf4ee9ecA20da21CDCc9E1c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x356AfE0fC695919e82F9426f906fdE64Ff534b99", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x61D83f85cF78EeFE1Aafeb74f48e202367184f1f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE1Ee22790EDC2632b27111cA5fF2CC156d59e35a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7e32ACaE2f0e928376C61d389555658c55Bf9b00", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA35540C0e0Fe990C70d40fC258d2d12ea40497D8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xBBaf6181FBf0C624699c7E56Ba109a53ECa846F2", + "rawVolume": 0.03981810821776807, + "volumeUSD": 0.03981810821776807, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xc16deDc3fD310999e88311F90Bb279655EDBA6aa", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD45B98c87161C133066a9D362842cbDB175E7d29", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000050121319132400 + }, + { + "type": "stable-factory", + "address": "0x1Dc5c0f8668a9F54ED922171d578011850ca0341", + "rawVolume": 0.000248164590088719, + "volumeUSD": 7.209910087740265, + "latestDailyApy": 0.00032893661190414036, + "latestWeeklyApy": 0.09429619732730377, + "virtualPrice": 1000206297730427800 + }, + { + "type": "stable-factory", + "address": "0x36310Ea865424a054255B963290c0B89b639D2ff", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xE978927D04A9F160079880B8A362bBccdb7b9654", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD7375c031074922971b5c2f65b71F88ab41d1392", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x996Bd284b018801d4635dca11ebB9fdE50B10c65", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x13b85ce4721309f89F4C151B4eEC3D123420652c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x518D6ae98818C971B3fa1e4186CC573F1E3ebE68", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 4.364045968891039, + "latestWeeklyApy": 3.6092036318889242, + "virtualPrice": 1002445107354454300 + }, + { + "type": "stable-factory", + "address": "0x10EED26aC50e06E4f0aac767C77Ba772E71934f7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + } + ], + "totalVolume": 5357854.050415341, + "cryptoVolume": 0, + "cryptoShare": 0, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-polygon.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-polygon.json new file mode 100644 index 00000000..aedff74f --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-polygon.json @@ -0,0 +1,5957 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0xC2d95EEF97Ec6C17551d45e77B590dc1F9117C67", + "rawVolume": 0.00185622, + "volumeUSD": 54.23995922271905, + "latestDailyApy": 0.004303632467728136, + "latestWeeklyApy": 0.01900389558184834, + "virtualPrice": 1011020974330572500 + }, + { + "type": "main", + "address": "0x445FE580eF8d70FF569aB36e80c647af338db351", + "rawVolume": 1257767.8447107854, + "volumeUSD": 1257762.9631370166, + "latestDailyApy": 3.6415250884938466, + "latestWeeklyApy": 2.5669119462821577, + "virtualPrice": 1080871586863099300 + }, + { + "type": "stable-factory", + "address": "0x82f1534324e60581e693335dC39b569DC7605af5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4356a01C4F873ae8fA46E1d2cFAEE249560c5e6e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x10f38a56720fF3A16bD04754e9b49E1f39d4aA4a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 3.107407311536803, + "latestWeeklyApy": 2.192262020564084, + "virtualPrice": 1071468148389478800 + }, + { + "type": "stable-factory", + "address": "0x4a3Bb45aee36367FabFbc5E2aC5F92b06eD2Dba5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x62619F1091CD0261b7C16199C6c58DA694248CFF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 5799219435923319000 + }, + { + "type": "stable-factory", + "address": "0xcE113ffc5B4C9F088Bb0ad9459e10387f232C3e3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.9348809238896028, + "latestWeeklyApy": 0.6617049806908026, + "virtualPrice": 13480517452487102000 + }, + { + "type": "stable-factory", + "address": "0x78A8cC2A24FcC5B358Bb8A371072403CE092D599", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.5025228294876625, + "latestWeeklyApy": 1.3536312953958074, + "virtualPrice": 4753560833879647000 + }, + { + "type": "stable-factory", + "address": "0xaC974E619888342Dada8B50B3Ad02F0D04CEE6db", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf4d5F7fD2d80d6d535a76D3543F3e5602641Fc7E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x43910e07554312FC7A43e4B71D16A72dDCB5Ec5F", + "rawVolume": 10.734387470889628, + "volumeUSD": 6.30791498381352, + "latestDailyApy": 0, + "latestWeeklyApy": 1.0945342894308263, + "virtualPrice": 1015276636928222800 + }, + { + "type": "stable-factory", + "address": "0xc729a8bFeBB7f9089112c081565EB4A0031612Ba", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.233822319650546, + "latestWeeklyApy": 0.87291056904506, + "virtualPrice": 2797143621685419000 + }, + { + "type": "stable-factory", + "address": "0x5e5A23b52Cb48F5E70271Be83079cA5bC9c9e9ac", + "rawVolume": 418.62453983858387, + "volumeUSD": 410.86460814736347, + "latestDailyApy": 4.501945625963488, + "latestWeeklyApy": 3.3540945147106482, + "virtualPrice": 1475753896044349000 + }, + { + "type": "stable-factory", + "address": "0x4E28a18aff02Dd6D4B0986De8d32F9c2ee7cB29A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x32d14D697eaF6c254A08DDaC1aA5e6Ed89AB32b9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 1.5382692766748862, + "virtualPrice": 1007909339925984900 + }, + { + "type": "stable-factory", + "address": "0x850e1B0b203f9B0EBFC9648EF8c7A6f211A200AE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.23840845611489137, + "latestWeeklyApy": 0.1689626643731179, + "virtualPrice": 1018111719574319700 + }, + { + "type": "stable-factory", + "address": "0xB17420458609448498BE4168E19A9bd9a0DF8b37", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xca097d74030f40bdab9Dd1350E6FE066768210b7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x890aa074E82cCA6EbCf0E4789d4660330F2A5060", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9da618900fDEa8fc300Db03254394ed8Eb07EF83", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf0016fA1b5CB0036425AE47510aC9DEb40d3f273", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9Cd96405Ae301d4Ba833eeB98fCf5F4A31D4029a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe5C9C1782220138F871C48ebfE20be708f948d51", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xeF75E9C7097842AcC5D0869E1dB4e5fDdf4BFDDA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003106494767898400 + }, + { + "type": "stable-factory", + "address": "0xA69b0D5c0C401BBA2d5162138613B5E38584F63F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003203774989952900 + }, + { + "type": "stable-factory", + "address": "0xf3FC2bba74f0B73f6264E3543e896e0b86f1F257", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x209ebE1aaC73205F1e8AFf02DB71160ec1Dd1aBd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x79B72D2AFA7b9636E54bF8B7c1DD5E039e4c1D20", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x488c848CE020723B0b4235edAC5ffDB47B53672E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2da80fCF352aF73e3524E90E382B6866768ad076", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE4Eb7E0eCB5099fCe9505fA0DaE72EFaFF73c4cb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": -100, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3e1f3D078e9abb8A08De99958a69096B53DfA9b3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 33580428556422630000 + }, + { + "type": "stable-factory", + "address": "0x5A128e53debc0FCd514FAcc40F01c5D7C39BBBE2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x162B21ba1a90Dd9384C615192FA4053217D2A8Db", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3457724308923771, + "latestWeeklyApy": 0.1819163852511796, + "virtualPrice": 1009195787233766800 + }, + { + "type": "stable-factory", + "address": "0xE374dbE255128fce05096798048e69B90d9b9F8a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe8f661f157b0E3a1acbF2D0aAE8Ac07436490667", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2b58cA1650DCc27Ae2Ab879fD3527b950009472a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfADDd2D1d4902a0EBa8678e47102Bfa5c5fA1846", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAd326c253A84e9805559b73A08724e11E49ca651", + "rawVolume": 18823.662119996086, + "volumeUSD": 20456.799614854335, + "latestDailyApy": 0.9642294344331725, + "latestWeeklyApy": 0.7819518542112824, + "virtualPrice": 1018098619156207100 + }, + { + "type": "stable-factory", + "address": "0xD7847265c971996b2f74ce6fC27038488bd8F67D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC007b1Ef592DdEC342f377234E0B7a78cb915Cc1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1005156841670260200 + }, + { + "type": "stable-factory", + "address": "0xb731E7cEd547A636f7CD3eee3972EB32b0402893", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002475706450657500 + }, + { + "type": "stable-factory", + "address": "0x19b4ff57Ccd45e7B0a22a454619921eF284460fe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1058708450129082200 + }, + { + "type": "stable-factory", + "address": "0x737a0Ca14F488518Ca85261db9a591138EDF2Ce5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x39F01809fAe5755b6F0c190dd47eCbfE81713769", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb283E8afF7379b48556192bd10DcDA562b28D95f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3dE32B6949B0A000e831c98354e93261725A22f7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.6147658868202122, + "virtualPrice": 9745706107757418000 + }, + { + "type": "stable-factory", + "address": "0x0E9b542172200dF93eaF4C6EDC919F9923567517", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 3.2090309165707653, + "latestWeeklyApy": 2.2635953776553697, + "virtualPrice": 1391868085435559700 + }, + { + "type": "stable-factory", + "address": "0xBeFFf04ec3E332CA0347A7ad056e8F7945f926cf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE0Eb3CA0b2759344477a7D4E0F8F1f3944Da1Ba7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xcc3520A1DDb017740f1a7a267FFBeD797aDf9d49", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.24079504896630244, + "latestWeeklyApy": 0.17066349663763525, + "virtualPrice": 1003816226012093700 + }, + { + "type": "stable-factory", + "address": "0x52296ec05Ad119bc77baf48e9C9e7109AaE7c276", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB00680Df0B1f3F39Ef1FbB9ec1AA0a7Fa14b4Cd9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x20e3f345E229bE9CE08488Ae79E906955183EBAB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.3247671503723737, + "latestWeeklyApy": 0.2301481764587443, + "virtualPrice": 1004421581826944400 + }, + { + "type": "stable-factory", + "address": "0x89FAa4A7c39f4399a68a1a2cCDB177654880A26d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x982558c80abDD126795F920DE5653804e9eF884A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1F93F301F7DFb0c301199DB35062945bE35d0aE6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc53FF3BB1848443C4737277C00F907e6BeE04a64", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB6E8fC97625cf1dED48026622EfC8c1524bBD3Ff", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x69FC13493240C274a798e9DC9ce2219bfa1B1235", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.9365325487263005, + "latestWeeklyApy": 2.072160132830003, + "virtualPrice": 1034604120971087400 + }, + { + "type": "stable-factory", + "address": "0x224b27424Be9df6A07c8F8050D69e2B92D8a6110", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf527F1A2955aE574876521E8d64B23E9BeBfcE88", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5e5Dd0c68cDAb0eCf15100f7dEBc5EcFc32F06f4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xbe9a593092C86bE903746A7eBA2c8728210B4aF4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd5F0e7f57de71805B055305010522bF12906f86B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x99F2240C4eC497b05bf09C17C9db0B741D69C7A4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x09736495E712c92448A05DbfB6FE2571479178c0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x33C766A80235C2A0774f8E4191525fE995CD7927", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x120fbbc9e6aE733F52ef57D775C05C3Eff159c21", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1.140443585377296e+21 + }, + { + "type": "stable-factory", + "address": "0xfE37A0eB382E3b48f9864E22D79dC0C866Af20ea", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9a30e9A76aFbDf52f44B8b8Bc2dC3cd941282789", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.9951205186465861, + "latestWeeklyApy": 0.5859630745820077, + "virtualPrice": 1022227185771884200 + }, + { + "type": "stable-factory", + "address": "0x2AA2C17d7910cE8f2EE094b579eC442b1b92eC0e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAfd1c9fbC69fBa86341022Aacc2cA565586C498C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x81212149b983602474fcD0943E202f38b38d7484", + "rawVolume": 73.50134745315367, + "volumeUSD": 80.1584548754527, + "latestDailyApy": 0.6541195221264173, + "latestWeeklyApy": 0.11346309483617478, + "virtualPrice": 1006629522288910800 + }, + { + "type": "stable-factory", + "address": "0xb4eDEC8EEc350c36403496A2d6074c088e0b905F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8Aa1D5874e9Cd918d66FDbE0D3cAA65301995Be0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.7387557555090796, + "latestWeeklyApy": 0.5231440145337274, + "virtualPrice": 1009041642696284800 + }, + { + "type": "stable-factory", + "address": "0xaed94544941AC4bED9c61ED31fa843C85A7daaE5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1013940719890294400 + }, + { + "type": "stable-factory", + "address": "0x96D0DcF1626AD22C6b73a99878C22620cd9d622A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x98E943C63bb230bDf0ea65b7e7032ad2D9C5Eb97", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x19187C5376bE7f3fe034970EA5E4EfEAb4f9289b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x92d7bF7aAB0B8CeA18Ab23D4BF12639957CfDDd6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe8C1258f76Cd6C168aC0513841c05Baef1C7d7d3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5aFE53A289dbCa16de7c0D12C5b11a180556e9D7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x90a852D4eBCF99f1630535D52A0E9c24fe1408DF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x87733C1F9516467A74AE5236Cf7d3Ef1600F4f71", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd557A06113857D6a882A89bb6b004a9C2d681AE5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE8dCeA7Fb2Baf7a9F4d9af608F06d78a687F8d9A", + "rawVolume": 7559.81827779489, + "volumeUSD": 53.05024633784889, + "latestDailyApy": 0.06726261356004848, + "latestWeeklyApy": 0.019090767966800648, + "virtualPrice": 1005304565858412000 + }, + { + "type": "stable-factory", + "address": "0xA7DfF6f1dD4B25dDbf401bd654E5c8959044fCf1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe67E98408cd221512aE3c37A92992DabB1A01Fb9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x29e8d9A6F8404aF067c77A104C4FFe36Da99d260", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB829C1dFAED848d9C170457FcDC5dbb3C155C9FC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAF60C7Ac23D419cc1868f79d7182688188798ff2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe0ed1Af59cDe0d729A23bC3AbBE88CbBA21FA1A2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc9541d0bf695619943dD567B62CcAd9E7E25C2a5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x27c23852Ff93254cAE7d5Fd4183b331f700E09E8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 7.720558919036824, + "latestWeeklyApy": 8.324672150831969, + "virtualPrice": 1835131490974146000 + }, + { + "type": "stable-factory", + "address": "0x30509e776cE04c32c08F1EA1Ee68A5fc09a02884", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x19606dBD974f56368d0799f97f0D17eA96E05b97", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x18348260e82255A0bB1FFdF8AEb70AD9e0Cc4A06", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf0BacB69af7063B83998e2a021dAeF17DAD8509D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdA69581F7C5E0eEa92E8cDd89908352241aAE4FE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5f042956B935BB3B1498f488884792cc4299D85A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x95D69717D5b655F0D04C8445e312783a26cc7cC8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB6f8e5ddF3B03e475e8eeE609231397dE23b87d9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfc48484f10B47666A7f8FfCA1Be4558D3C38d98c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000002307855050500 + }, + { + "type": "stable-factory", + "address": "0x86cF2E03fE3a269a2FEB70f141100762bF824608", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE3EA9B2991dD02876fCd4b423eFceEFA9a8b0f13", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA6eF5cC7AB095D5cEDA6fb86A119cEf125Ce3EAC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x42685233E0f20C2477bAE4345f4218D0eedAf3eD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x447646e84498552e62eCF097Cc305eaBFFF09308", + "rawVolume": 13121.665747094325, + "volumeUSD": 12871.793911084997, + "latestDailyApy": 0.527967091435233, + "latestWeeklyApy": 0.41496850642279703, + "virtualPrice": 1022909979870851000 + }, + { + "type": "stable-factory", + "address": "0x0b88eF5D9E8D63A7c6b3B6a6d9b50601112A5C75", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000105138122538400 + }, + { + "type": "stable-factory", + "address": "0x309be34ADb7866cB3bDe9770fbeDc2cb3Be2bD26", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.10823946709719312, + "latestWeeklyApy": 0.07671044667105775, + "virtualPrice": 1005338773174468400 + }, + { + "type": "stable-factory", + "address": "0xc3bd48002c3283d13C7a86Aff8AF231E538Ed70a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDa43Bfd7Ecc6835AA6f1761ced30b986A574c0d2", + "rawVolume": 2067.145252404326, + "volumeUSD": 2073.9228354659213, + "latestDailyApy": 2.437673143985375, + "latestWeeklyApy": 1.823598113128777, + "virtualPrice": 1035127218527958300 + }, + { + "type": "stable-factory", + "address": "0x1D0Db44354e3C7B84318073d5aD43921A790613C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8914B29F7Bea602A183E89D6843EcB251D56D07e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.14837883571592325, + "virtualPrice": 1033071209714733400 + }, + { + "type": "stable-factory", + "address": "0x79B639d0D1437A8FcC7A929B85e0B9C02f23D92A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8b9c26A1287815E83C1049dFfb6d2A0E6f205E30", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x747Cef5507bce90f5f8d1F06e1e870d848C5214F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5E0458211702142AA0833a4A60a4535CD891DCC7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000012367996338800 + }, + { + "type": "stable-factory", + "address": "0xe4A51084f2b682f051BC31715A271d9e84AC0FfA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDee7Ac2510f2dA213f4CCFC3391dC5dde9658DfC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x600CD1aec3f8D3b1E8673f2d5Ec569feadabf345", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 4335071468366713300 + }, + { + "type": "stable-factory", + "address": "0x6CDA7AE2Ce3E6995E4f038BdCAA9F3319dC00f16", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3da78d5C0EA557C28B4dC92A6629ABb03dC6dC7D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": -100, + "latestWeeklyApy": 1000000, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD121821cf14Afd5017F252Ec55Bbe093A77b732a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3EaA26a2335F745cb9F5FF3841d1522BB8522AbF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3ebA4c36ECa3E6443cfC1DadC5A05Ff94d249a08", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x64FFf0e27c223097c824f9d9278eFD5B55c3430e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x488124476E932A196A8EB547393A8b0b9d50Ca35", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x09992D921e118C8e70De260E74A5BC142234A031", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc948e1Fa13101aC6Efb3d5211e723092cA69e7Ad", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8cd3B45a93b8Bd87c11aAFCDcF7f96626c5e1D6A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x120Ee0D780f90F974250c9b14956702c1a4eE584", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3a2BeA29CB51975Ba337dd6ABf89a5F7D68f8EB7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7168C51e6E37AacED3AA7A15a03F77eBC90197c0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.28363392457120273, + "latestWeeklyApy": 0.20101248064763322, + "virtualPrice": 1002358913888685000 + }, + { + "type": "stable-factory", + "address": "0x4808064427fee6b44f087Ac6d31E9E865C005d41", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x038ff5771ed27E6f14409672285359b79107EAD2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 7707295530631715000 + }, + { + "type": "stable-factory", + "address": "0x40caB7C05fc1686e198C8d6d6aA4aaCF77BE8590", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3BFB65904cB66408BCa4c73EbB548126dd77f3db", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000354139701760000 + }, + { + "type": "stable-factory", + "address": "0x8354984E7a0337343E2C128F72EaB04b7DA120e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x622703d6517BdeDF1FA5d076D30dcbB00ee18d5C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000404864340962200 + }, + { + "type": "stable-factory", + "address": "0xcECf60B95109Cb4C897b22877612228f0C76E52c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8463881403133922, + "latestWeeklyApy": 0.5992575134059042, + "virtualPrice": 1006767841957747000 + }, + { + "type": "stable-factory", + "address": "0x1271A6Bdc04CDEC2C8863361b11F2C95f2dff3e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.0471827570501802, + "latestWeeklyApy": 0.7411733738470705, + "virtualPrice": 1009753231823461100 + }, + { + "type": "stable-factory", + "address": "0x1e2506907FFCe238ee979202B09072Da81dFDD96", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x03B5BABD6d82F77D03bd7C39C761f0186288Ecd3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x81E94148a68AafCac58F7BDb63A2CA71773A5de5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAf280CE120cf32F26D359379F821f34dE5401790", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xCBE4F9714b10d5cBA9f0bBb6285B3b71725fE258", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB9FB6E86978f3eEdcc1184B25cF45613BB448Ef7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x669C75371c74b9D6b85789aAf09e56f1A7943F62", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xFfAc5967ECf88942aC2D14BD4124fED328eB10BD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfCE246efa02C6a30ED98dDb6c75d04F81D0d483e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd3E9014aa9c9531ea5A5fb96c3Cab4269C3c9Bb1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xAdf577B69eEaC9Df325536cf1aF106372f2Da263", + "rawVolume": 527.7709709524182, + "volumeUSD": 527.6463483682558, + "latestDailyApy": 1.6347010882645119, + "latestWeeklyApy": 1.2642540249188539, + "virtualPrice": 1018438606809370200 + }, + { + "type": "stable-factory", + "address": "0x742f732e36a52266095BBBB5e452BebC711F363a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8e2191b22198b7861e4635c92D924836D0681171", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x666Dc3b4baBfd063FaF965BD020024AF0dC51B64", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE4199bC5C5C1F63dbA47B56B6dB7144C51CF0bF8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x88C4D6534165510b2E2CAF0A130d4F70aA4B6d71", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7D617eA81BDA303913CeB2837264A45B64030AC6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x88Ad1B44BA28C00EB59C01287EDE8793a35fCfa4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1DE2e0862C47CED772898EDc3B5f221Aa8f8F9e2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x110622acEE6f8D8f8Fb2358Ef91ED372231AB548", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7Ad57384090277F53F00560dB37aF182323384d6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1197Ae7F43695Be80127365b494E8BF850f4752A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd23BC23Af71e1D2E04E3cE9C18b29AD3f1E606f4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x45D1533584bcedE740Dc5D01D553D07b7f600119", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8660108c91098F400C412529cf5BE3E0a9eeAC9d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd106fb0cFB6a3B6a8E9B08C19F8f4d39e4B4cda1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 97271875967149950000 + }, + { + "type": "stable-factory", + "address": "0x5Adb6eFE03005895813D825E3d3f152a420D6c1F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf462219aA7d7E7de1B1b5CB6c707288FD87d24BD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002881510517567200 + }, + { + "type": "stable-factory", + "address": "0x095b621B6941D4131CfaA2D05ce396DeFb79f533", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA0257D09c584ac10E014B90c1888f9571a6477aB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x47763F17E3c284Cc764EbF79194A45cCB89D2628", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdecac24aA45B3E77B25c2D6120851D10Ab96D4DB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF88c3D3a7BCEB183c1030e25C3d29aB881468F87", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x88C9E968858f2dBedae4fB0C3f721628dDc592C3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x306bF37adE7943d12a56A56a8bf8C8F18E6CaC27", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x727c61F8403C4a6d1e1004Eb3B674142865878D4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x83f60431108CCBe6d6d8d0c442905E5435f7257D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4f427D27029965C165daBAB3bE25037C44C5d045", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb006047CF70F8782AB8f77D9eeEe432525C11E6f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc07CB7241347e18B2262f50C3034fFCfD41AA212", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDdE5FdB48B2ec6bc26bb4487f8E3a4EB99b3d633", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.2246605689468115, + "latestWeeklyApy": 1.177710048259617, + "virtualPrice": 1030606674078356900 + }, + { + "type": "stable-factory", + "address": "0xcf42Ad1523Be78dFE86F7d14F28EE69fF1857Dbd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8a95282517721Cb7BBC539B8834073198e35ad07", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000704949036874800 + }, + { + "type": "stable-factory", + "address": "0xA0E8A70f28C5342E3e01B14ff899D7c5D2CE0ec0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1BeB4686fD6798D33B45566AEbf2AC1940541120", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x632F9Be4Bf42e0dBb461CFcC0CF788538a49ED6D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x81c86081d533f280A8DAaE17F672Fb84B6ed65e3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 3.0103708873810087, + "latestWeeklyApy": 2.543405813728694, + "virtualPrice": 1059058208347442200 + }, + { + "type": "stable-factory", + "address": "0x3CE39825Ab258693CeDb8Daf1db441627d011371", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7a48410Cb0C8294A8B5729d1AA567F40b7703486", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD9c5d82341bB1236bE95bd7B3be447817F501FB9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6E00136D2Ee7b488348E4b9Fb59B0f92252ae5c5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0950EA36770eD3b95a428c83A532B1fFA46088bc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD906Af5F18d8354d1252dc70f3A2AfA7d13d74F4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdaEdd59fa2c5C63D46A3BAe5eD115247DF9Eb6Ec", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000432300 + }, + { + "type": "stable-factory", + "address": "0x1B82371A565429367f83598C3F25C1c815c2985D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb5bE5A8126244da7E388a88F16Ee8be54d22117C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0f485C761158974470fC803463c36642fb647141", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdA446BeF29d0C5c25814Cc1b4DB8625C94f75AD2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1ED0855c93bb3eB531232D4350f49861B026D087", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8934858080925201, + "latestWeeklyApy": 0.6325529905947702, + "virtualPrice": 1009429628729951000 + }, + { + "type": "stable-factory", + "address": "0xD94c851DfeB14c4EEd9D105D1718f7D7d1e04Fd1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd6D5e0bdbFee77eD7A501A5432a8b24a224F5Aed", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfE18100F0ce7c1B771366F58e6DC58d1eCb0409c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xcdb4f70AD54940CFE42f4A74E34C2a965ae66931", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x94b1ED04B83B819ef3aC2E9059eCC94F27ebeFfd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd0F9Ec5A6FCf1Bdd16B9eF8f2373855b7976b6d4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x012171C87aE388139e98734cf7b3DDB4eE38FE92", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x577715E323084C06553A0EFd1c38aA4aFBef3541", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2fFbCE9099cBed86984286A54e5932414aF4B717", + "rawVolume": 4449.361572464647, + "volumeUSD": 4852.486353692213, + "latestDailyApy": 1.5377757216733068, + "latestWeeklyApy": 1.5605251060415437, + "virtualPrice": 1015441594702919400 + }, + { + "type": "stable-factory", + "address": "0x9ec22669C820b3b4303dcA33E7d790F2f5b5eE86", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001137920028732300 + }, + { + "type": "stable-factory", + "address": "0x2ac8FdC32C4CABc9D3ba7e93aA205Bf6aE258eec", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x28080E0C53B204F4A8Bfe92935CfbEe9a3441777", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1401819EEE8F823e68Bfd33a086f5c836DCcC601", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x14bCeA8e653F435b9c91d564a7a9964503488963", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x018e7a8A99A71Ebf7694C8A01b255d6d981b3c20", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001984118650323300 + }, + { + "type": "stable-factory", + "address": "0x9D5f024e1A83c783f47F38945654b13Ecaa26A5c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.8319850098986956, + "latestWeeklyApy": 1.2948989558111634, + "virtualPrice": 1015287207252569100 + }, + { + "type": "stable-factory", + "address": "0x781f94B792EE2CC31A22C37b9b54Cf3e71f547a5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9D594aFF47f53De2a478137f5028ad0cb13e9aF0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x127d6369F33C12358EeA4a097952592a2D46a0DC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xEC836dC7562d97fDfb414C7D73A2c9C71C5b89E4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfBA3b7Bb043415035220b1c44FB4756434639392", + "rawVolume": 658.466717, + "volumeUSD": 657.6217596639976, + "latestDailyApy": 4.618036429486572, + "latestWeeklyApy": 6.078459806709424, + "virtualPrice": 1041908000410236900 + }, + { + "type": "stable-factory", + "address": "0x017ed5D7e551F1b1987ff2E84DF357222a9e31a6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF270D4FDeE102c42F0E2c684E30f8280C80a2a90", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe4ae3Ee65bb687045e401827b404FeE34BE4BA53", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6310498656197705, + "latestWeeklyApy": 0.46747798131303586, + "virtualPrice": 1245845701045762000 + }, + { + "type": "stable-factory", + "address": "0x07eb0B84Aec04D40F0A2987F0FC469cfdec1C382", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5B9eDE637D015600bbF1D82149332Ecc8701BCAA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF685eBCaC20D77F43EF4cf045d200752b5985eE9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x976A750168801F58E8AEdbCfF9328138D544cc09", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1006397481477270800 + }, + { + "type": "stable-factory", + "address": "0x6f73928cD742aFCC7254abB6f632b1a00C05790B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x849A17D1830032449a2113a503D4d47C2ba680Cc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7f60F3FF2618ee70D7fFdc179b65ce44d8C6b923", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDFc1510D9a8Ed449dcB0AbD2b85400649524E9A2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA7dAF900d1d1750566fd6E6dDd5891FAA1C18a99", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5b9Bd0727FB017a2AdFDdD12a746BfDB90fa45aD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4F608B34e6eD644E69FBBd5C703727398996Bf70", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xeA909DF5d4f744217ff268552fF1B09F25D93A7b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xBE775DEB31B4ee5841a8B4564c9F3294987023Fe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc9d602ecfAA46d9420721eCfa329E2de4D132091", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8119BA877875c134323905afEA498333E3695BF1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xEf5eD450FE8b5d3754E7da348d77Ff5014AF6B2F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf59A36E36F647E1EfAe594fF25d013A8a9B4Be57", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3945e96676a6ddb585C6Bc88ACb53d2c34e799cD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6FFA69b570d169317Ec8d619Ae6FA2D662a03d28", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xDD1105fB747f0801C299AA8484e991BcFd78aF0F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC90669861f3FEfdc4C75a6F8bC4BfbE2a5fF1E73", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xBF8DE138DB8256bF6E67EEE33512770b30C1Db74", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfd5BB985A536Fb0242224c5F4dF52b54fe5FCF9C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb0B108E56BEe86D3024802efd38069425882C50C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x83012BEA31d82e19a4fa5B390f47ea9Ef2c4457B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xaAea3f0C74943c23f627A3A63F4f4af507Ec831f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1de5aa1d0Dc7CC68efa51283699887Ee7d6dE412", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x63E271a9A8b8eAa47C684732770592320b6cdd80", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.881705302773451, + "latestWeeklyApy": 1.3299530802278747, + "virtualPrice": 1014874222161928100 + }, + { + "type": "stable-factory", + "address": "0xda74Bc2e49f54fB74d3C836287b92AFbb767E641", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe7bBfA12031aeD84dBe5795244b0102f4F772146", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xaA91CDD7abb47F821Cf07a2d38Cc8668DEAf1bdc", + "rawVolume": 8038.702550161406, + "volumeUSD": 55.00009040024686, + "latestDailyApy": 0.024017849127644375, + "latestWeeklyApy": 0.018703939400888103, + "virtualPrice": 1004715610207748200 + }, + { + "type": "stable-factory", + "address": "0xC3056e1c6772FbF080737012F926AD9e5e815928", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC2CA3796d5b1ac1a37c5987f6161a066Ec2726f2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2D141b958724DE16075EDCc0956CBA6C8FF227ed", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1a5c41f2Cef4D6b1E236E27F1cB091c0471acB2D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x873aC1d622b57788f74E36402435a04ed8bAfDe2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xCBEBe4fb9FfA26912D60e6acBf7985eAe5590d96", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x00A54587359bb0620Ecf66E163799f3622F24977", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB95Ae886e346Bd4fb8c444e4FC56d61941Da94b7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x11aD5Bd7D738C8bC3c6998b4A6fa4ec28f87f52C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2281Ed56A92751f222ed10C292af119437F23821", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x56C36983DC83C6C1bccD4D8DAd7517B348529434", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3D966D7d6Ae268CE4C45Edcb82B2a694EDc5924e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 1000000, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x45889477c33FeFAF4b34CaD0a8a8e8D0f9F63EE0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x01343441137a8e59c887C111Be600de781327559", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xcf5186491739aAC19db943D71a9b9B759F3AFaBf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.08615691194759911, + "latestWeeklyApy": 0.061080599508711586, + "virtualPrice": 1008610125724501100 + }, + { + "type": "stable-factory", + "address": "0xADb0B4287BCE455368d12513003aD2a8212FB9ef", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb82a0255909d5e5CC030eF01e278eF281eefF0aE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa1eE546E2a53e86EA7E1c5D017af3FEa1D1A9620", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.16096945254300277, + "latestWeeklyApy": 0.02437853287378111, + "virtualPrice": 1004743694928014500 + }, + { + "type": "stable-factory", + "address": "0x156689f48A2e7d7c44C6ae326A09dE37E94Ae619", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3e12bEd01061631C2f274d957b4C4c04374Bb6a4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0x80E66Fc895f2B55f6bc38D299b298130Cbc4FcA2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xC8f82CEE172aE80FE27cEE05e23790790FfB6717", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1D98A21fD824F3cB8F134C6C0bdD5Ee6139c2676", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xFEAbC07d1269aeD8FEd05B2D0609c8590563B220", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x194696f6b91e5Aa8A427feB688F6282acd10b4fb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x96903FBE71447d16D3D922F3Bc7839cE3993ad5d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x29a1F082DeE380747F3fc02Ddf744b4C336b2b13", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0x12130825BB250d97aeF9c3af6BC375F8D06D9236", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7a4F7a7681C5070C2971C209939d5449528B6fFF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0f110c55EfE62c16D553A3d3464B77e1853d0e97", + "rawVolume": 1305.4256818049494, + "volumeUSD": 1419.2044083216624, + "latestDailyApy": 0.48582430683570266, + "latestWeeklyApy": 0.4288094375997975, + "virtualPrice": 1004703593987303200 + }, + { + "type": "stable-factory", + "address": "0x2C3cc8e698890271c8141be9F6fD6243d56B39f1", + "rawVolume": 1184.7713707990222, + "volumeUSD": 1285.0321849734382, + "latestDailyApy": 1.0225587000271874, + "latestWeeklyApy": 0.7831502461091544, + "virtualPrice": 1005550016294503800 + }, + { + "type": "stable-factory", + "address": "0xe3a26B62AB68FF8ddE5C8fab8Dc989C4FB7ae0B1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xcA409F7c21E970411e9A5b163BbF82d21C175274", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0003354554222845252, + "virtualPrice": 1000959204425705500 + }, + { + "type": "stable-factory", + "address": "0x4D8D47Ade0CE047817Db13c088fEa289048480fe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa75407bCB092C5E722AeFbEE6E7809Cf8698c8a5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x28E78e7f1AC37ca1F7562B6F2e9745AFb9E69bFe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb70aA4aD7fd5352eB2EbDd052De17f2F29971ecB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf9Cd46A36A904134656E6A5AdEaAF355f18d6D6F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x203b7Fea32a8C5f78F6f649Df3a2bF2edAc483dC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x568B3Ff2f6118838f0d9c3B73216a6EFC708A23D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x027AB3D4A5F74475a4199344e3e81289AF324449", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000056884197522700 + }, + { + "type": "stable-factory", + "address": "0xf4a2a86359fEa41cC33C027AeDe5322ffb065629", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc0F20Ae0F7fce1889B307C368B1Ced12680d099e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x951e1c55f642eAEF65bE1790991bbF5826B973a7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC0A931D840953cF066bE397bE433708D9a157C9F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xeF584200c16c78bc0801C76E057DC4f87EA63d3e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd0D0F4db3e22764778C84C50838d1401870F89cD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd3283D13E8CE213a9659AfEe9BB3ccdFE5D9c2d7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2F3E9CA3bFf85B91D9fe6a9f3e8F9B1A6a4c3cF4", + "rawVolume": 18544.380316208164, + "volumeUSD": 1.9962620877793087e-8, + "latestDailyApy": 1.247618043694576, + "latestWeeklyApy": 2.5921132872058994, + "virtualPrice": 1023941838807835800 + }, + { + "type": "stable-factory", + "address": "0xBD4d1eFbfe13D5cef098ab42dBc59e73E1C20286", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x03C805E5aB27b04d7B2796377a5BF27Bf79F08eD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe2f81A81a8f0C4cFB2af97f9fcF112f26916c2B2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5A6F8593f546918158728bE178249544f28E5151", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE3C19E77447EF20F0e96c61Fa94E6eb9f810A50C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000087795328086500 + }, + { + "type": "stable-factory", + "address": "0x9D2acCCbEa8860462FB73b58F20Fd9545B6Ef93e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x99992bb1EaB583BB4547468de234DC7B8Eede8e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9383293961E19165b4891F0856C78fBc95F695c4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3dE21CCA8F4e5fedCE156f8bD4ED6E74fE85ab2f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1004628455871303700 + }, + { + "type": "stable-factory", + "address": "0xEF978c32151f3fBdBCa825A5DE8011D29A84B7D9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.068857777351396, + "latestWeeklyApy": 1.4618025028262815, + "virtualPrice": 1015892975148000000 + }, + { + "type": "stable-factory", + "address": "0x3f87d3258dBF9580Db405Ff8F05aB2704E31F192", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0b37581ccd14B5073704445cB9e5dD10A09795a5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xCEFc3669B7Af16E19579D76a2a8379B69A70141a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x80F1dbFA36504cbAAFC81ED23F250C083f8880EE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA3d6fB49bDdE6fBF6aBA98b6F28631d7D475da7B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC8D95F04415c28ab7d5BB7Cc402cFe80De6A3Bfe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0903436561314086, + "virtualPrice": 1001793645154914300 + }, + { + "type": "stable-factory", + "address": "0xe968dC04927E43fD3A93AAbfd4F385C4dCD367FF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001114997726220300 + }, + { + "type": "stable-factory", + "address": "0x03aF5B72C0304DefA28DEBaBAb49fB6CD66ef371", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000225751548569700 + }, + { + "type": "stable-factory", + "address": "0x6177d37E3f73f6dF8DdA9aC5F786335280c4c6E5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000007891153500 + }, + { + "type": "stable-factory", + "address": "0x8cC4E7bEEf42887946C91e94a33fbe133daE4186", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002006749559312600 + }, + { + "type": "stable-factory", + "address": "0x682931BD391587054ead3DE255A56B30360779D4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000033199213213200 + }, + { + "type": "stable-factory", + "address": "0xd8A2E3B6d9a5Bd592022C3481EC57dD8CFc15226", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.8034040074745405, + "latestWeeklyApy": 1.2747631760604339, + "virtualPrice": 1009384763940849000 + }, + { + "type": "stable-factory", + "address": "0xb28551b84656C9F578cBAaa3E5C19B2d0E61EcB4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x531A1df94c84d344d8164147DA68765c815b08E4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4915C9BeE38367D4F24e94950406d42e521fEC68", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.7325888241396248, + "latestWeeklyApy": 1.2248284912870666, + "virtualPrice": 1060150992070713700 + }, + { + "type": "stable-factory", + "address": "0xC4FB41Ac5286990fB30f0B898B355fDb66781a6d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 3.4005469295053548, + "latestWeeklyApy": 2.39793877221004, + "virtualPrice": 1016915466596826400 + }, + { + "type": "stable-factory", + "address": "0x54A8F4FBc322C31Ee2d85a60CF6F9c1d53bE1c52", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2C04A1638643eD586268542bD05aF7BAe7096057", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000037294965936800 + }, + { + "type": "stable-factory", + "address": "0xd6653a88f9FDCe462901b61eC3f4A267E6dcCeD7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0E8313Df92F3488A5aa37eeE3e6D8f6289dDEEAd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4797AD2e806F8bE7c7A137c3A7de17205072774C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4d0dd2A622e83345E3145255338F529D3922f471", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.8200627949908066, + "latestWeeklyApy": 1.2864959080194804, + "virtualPrice": 1008971166614610000 + }, + { + "type": "stable-factory", + "address": "0x4247d47842068E7cA84b97201033bF71aD8e7d2a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 3.1776203443598883, + "latestWeeklyApy": 2.2414749412992707, + "virtualPrice": 1023281775644570100 + }, + { + "type": "stable-factory", + "address": "0xe8a99b38fbEFf46270789104505b7a61A53235f2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa138341185a9D0429B0021A11FB717B225e13e1F", + "rawVolume": 33057.85238204078, + "volumeUSD": 31826.300979652024, + "latestDailyApy": 2.4113612720481736, + "latestWeeklyApy": 2.1916466321664663, + "virtualPrice": 1051216777933971200 + }, + { + "type": "stable-factory", + "address": "0x515c04e95D48f03899Ca97Db7AD1303481a83CD1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe94C85432035Fec4D6418E924639D706e0Bf4Fc7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5C0DD657e7dA9B7f74c40Ca746CE5466D4Bdc346", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8e17276A945860188FCED6D4Da1815d3C9eC34d1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x986E4992F1ccFc28D9E4bc1A91f79661ef826E6F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3409c7d0cD42B324aD096f77E1C3A25849352496", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd5FC6E5a7691CaF5Ec1cBa6cD74dad80F651f9f5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x64cdba07e1439D88e8dC7276153dBc3dfc3B995D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa3B3Be4281a17b01BE99503a362d193075bc81D4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4258bE1d4F95D63F348fD9686c3a9894921E6FF0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9aab2fC6e8142e5DeB706A4440390D4211A8D449", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002383817061632900 + }, + { + "type": "stable-factory", + "address": "0x7BBBa4a94c65F47342Ff1404091e4bB52F31CD26", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1798289aFb8F55fE3782513DF3bBb3ebBa1E31DC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x159F772FF9b8D8a75486f21e172C5571BA38A0e7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002852720874729200 + }, + { + "type": "stable-factory", + "address": "0x6ca05CF69Db069215FfDC7E553916c1757c5C074", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xFc4c492d9fdA61e36cAbecb45A4Cb309959B6ab0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2A70939eFa5eF53179a78EFc309fb0A551e253aD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9984Ae20c73Be2d43B29D1FD09D106298926d487", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1c9Ab1809e90F86F36916E31e2Cd6d6218aA9759", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xFe93eEdC17EA964Aa8615485a498394d3d22AA28", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xFAC5CC612bc5ab9E6C1C676B548ADA0BdcE2C2Ea", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf7c3DBD6Bb38285412C02d3FDecef317fDCfB5B4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE58C0A2c26fd644e02Eef5C87904318b405BE079", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000019931062425200 + }, + { + "type": "stable-factory", + "address": "0xDa10C3f360dC741e7359D561Fb4b4e008C37b356", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.6239119862687454, + "latestWeeklyApy": 1.8524543991964348, + "virtualPrice": 1011304087162075800 + }, + { + "type": "stable-factory", + "address": "0xBbDA65cfa2F90308da20572E391f03a0CC6B4A9C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.758320037567996, + "latestWeeklyApy": 1.946954733138817, + "virtualPrice": 1011857085238326000 + }, + { + "type": "stable-factory", + "address": "0x833e4b9740B4C73cC4870D28492A296d005E2895", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1.7416573806453465e+22 + }, + { + "type": "stable-factory", + "address": "0x56223D41bb919c9BE6b3764cB302E426DDaB890C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9a47B32577eEAA83A44bC5e4A2B6486B9fBC76ea", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xa1EeC03E4FcEb83dAf9eb138dc6741af80074eAC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 192183255214234660000 + }, + { + "type": "stable-factory", + "address": "0xB05475d2A99ec4f7fa9ff1Ffb0e65894d2A639f3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 4.01729992366792e+21 + }, + { + "type": "stable-factory", + "address": "0x7C1aa4989DF27970381196D3EF32A7410E3F2748", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe23CB450722F6B5466e60D036981b4160721D146", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.00023431380695715376, + "virtualPrice": 1005156387468843600 + }, + { + "type": "stable-factory", + "address": "0xBC2843F599FDd9cDE760e4744e0B17A6C7154019", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 4982211136240819000 + }, + { + "type": "stable-factory", + "address": "0x6cB98aA5dB98BB19b33c5589C6c0647e3DF5f73f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x807813CD0D637c1564806baf969bdDa06394fCD7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8ED8AACb7B687F99fc531f13664d248EEbB06b10", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd687899675d24A2222579c624e5325F364a58EEb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1005124068820067300 + }, + { + "type": "stable-factory", + "address": "0xEEf41Df038A757EC7A999B3DbbD1c618E7D96FC7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1026080521596803700 + }, + { + "type": "stable-factory", + "address": "0x01f876Be20112970e12047b0eD0e46cDafc33dcD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xB515cD40A483d7dB6Ea62BfE5d69D1cD0eE2b6Dc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xaF2dc7A982Dcc8d6E3DE433D19Fa09c728283724", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0998BDF6F763ef3e069457BEA573A3a73BE66Ae0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1Aa22D1b351275A2a7BBCDC4fdF422b1Cf69DD36", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.8650159993485182, + "latestWeeklyApy": 1.3181800737761096, + "virtualPrice": 1007366751267361800 + }, + { + "type": "stable-factory", + "address": "0x72c8C86490f2c0A525ECf7B21c4191B3d9577871", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x82ce61B9F905524f6752a7520Ec52487Aa8893dC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6937e4377922f71D5EBe2323b59e862CA11d6aC0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000130181066249700 + }, + { + "type": "stable-factory", + "address": "0x67c728561FBF6272B03C567A0C757eA71602FDDD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000495714329647500 + }, + { + "type": "stable-factory", + "address": "0x39416bEA4eF71F8f9cE1735299a5AB43E14cee2d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 7066664492898578000 + }, + { + "type": "stable-factory", + "address": "0x6e7B61CC248771DB4673b65C0B28C10Eff4c10A4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x48F124621E77F3d3cb4893D597538C5D586fb32B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4c480fC893D11216257447FaDBBe8198Cca9D51d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x87e5433c5436E50D6C1FEf64371Fa1b8D4bfA19b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdb7ec0677019F4AAe52EA19c36aFD0fAB9a1325A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xac97eD13191E90b284c804c83BfBb73cD37316Ee", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x556BD8f6e7a470E610D45f15aA642d8F557c434c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.6874797156800172, + "latestWeeklyApy": 0.48687343314253173, + "virtualPrice": 1007034935899967200 + }, + { + "type": "stable-factory", + "address": "0x7268b3d1842cF2A27E40B9760C59f01a28b7c5F8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x503e9b421844A86D7Fbe893bc2654Ae7602e5489", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0941C1B05b11E5B26b54f842Ac9c953343Dc72A6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3018Fa476030Db01914536b04B2108F73f613D6B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xB6aC3E9F5B8Fc6cCA87CE221FF794f0253d4a4e7", + "rawVolume": 20.93837419685345, + "volumeUSD": 20.900799996369145, + "latestDailyApy": 1.2861530131899945, + "latestWeeklyApy": 0.21701281423049945, + "virtualPrice": 1003192771093482000 + }, + { + "type": "stable-factory", + "address": "0x918a456616290ee83c31619fD3717db61FbCf351", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000001000000250000 + }, + { + "type": "stable-factory", + "address": "0x990d79528c7Ca053Cf33310AeB6713b133c07D25", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdE6A6662Dc65Bf26b048eFD8155CcB84B5f778cf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x26155E9D7DaA9d0ce3a13e53306F2B369451c080", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0C9A46471DC9fB8F8C6Bd4a14E113a87395049a6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5272B42331F3200202A68D3bc6D373A87651DADE", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3E52105bB2B4edCB8E40Ca5B5eC8D21968577aC5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4AdF0Ffbc1505725e972db4A8166C1DEE1709F81", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7a5E659A71671FEB594a2A80bcEeFe8FC6E825e8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 5.549752900872185e+24 + }, + { + "type": "stable-factory", + "address": "0x7d158Fc4623b0178512880e944088D9BfF94a553", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9Bb0aF8f370E05815eE620eCbbB95800e13D71E8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000821050803687700 + }, + { + "type": "stable-factory", + "address": "0xc439a7b8eF8064270fE74852Ed173317BBB2d334", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6f8b5D01c0b917028eadB0C56FD9392ce314b941", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6D4f4B2e1Fe9d1743a3fcE38fa655135928f54bf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xD2dbD1206507b5Ccde42f125844F77A9e4A42423", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x99bfDbbF4723023813B6f2F1C89495CD34CF291a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1B33488CEa0087452b13b24318fc8d7bd0ed441f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x02E4a7d430971BC52800467eE1aFFb1CC0ceC2c8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc5246437640f68238DACADA7b7A55356f24AC41A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6141871F875a93F8195baA059C14f95508aeae65", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x0a13277997Dc69D521f7Df1BA25A3a2F58D44449", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x90Bf7353d949f1F402dEaBb7614aB3d02135dC14", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6F758DFb5f28321d79AF174673Ace3327c65Ed43", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd5f4f5dd13CF42421dD06d054f999fa57e387136", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6e1f138Ab0D29461879504483D3216AC66eB5316", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4dFFE1c3345e05D9bec8398D815E9cDd932164d1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3E27a4A3AF3Bdf1289E673a353454E821c265523", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000377613107859700 + }, + { + "type": "stable-factory", + "address": "0xd014bD4115F4d58a82073A0374C44F83743a8573", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x08365E79bA5bBaBda54e946E30D34791E7c83CC8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x861a2206f7D416803645BBeA72ef898aef34f1Fd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x1B2a289363Ea1ca5d210C076ca3d423298021df1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC530B25B2c6aA54baee39662C73fb14748c54a40", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5FEF9d546BBe056aF00a08a6a107dfD017ff0ccd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF13F427364378C56218ebbB976dad800F8e4B68b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6a8a65883C212aD0900373422E025f5762055646", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfA822431300D795fdC29258aD534D3f9f6d62a13", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x78279CCa6788Fa69465668d12601e520F5ACe18f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2fF4c236A7E3470cE0932379DE31EA0Fb8759110", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x3545E597f7225D1eE7Bab684af0139398D0d73a7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xfeB9Ae6B5b1871d49Dc332ED2C8de70fD26A3881", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x720e3077d8966faa412b356868574d998417becc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA618d8DCdCF84157785990f2C18c0A42385e4f69", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xE83689Fe66a53B3da4D42C14F8B3845632263446", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x227117cC56f865e065616CEec5F7936546ab9b3c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5Fb0a087E935501921a5c651699a13D34A4Fd011", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x87dC3802EF635909e6Eb7436CEfbAe52A0Ccc8B0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xce70B7D382C759AdC10b128E2bA202C24bC04dfd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8393713289D80c10f8B95e392CB07adC964A34D0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x4F499Be6368b9F4D8f70CA0B343f7b2C0A14dedB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA37D833E69640D479795926d579Bf89889d92BFF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb7d2730f9CCE5b5bCCA6E49Fb456ca7EEeB17881", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb447bc1bad341664252A3a340C0C9b18b5147Abf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5B00927B9512518B169169D8d05E1042Bea00c0f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC8632c0C49cBDFebea9C87a119Ee23588981e155", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6c9fbb58Bf6c0dde983465b070dC34f66C3849dF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xC3407B28a58B8433B7fadd8a18886eb70F66ea24", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb61Ecec987a9529dbA13a8Dd10ea24446ccBB6ae", + "rawVolume": 6830.7122865, + "volumeUSD": 6557.659971886835, + "latestDailyApy": 0.37065147414947486, + "latestWeeklyApy": 0.26257227986221654, + "virtualPrice": 1001825488252672000 + }, + { + "type": "stable-factory", + "address": "0x22CdF41236B15915eca37DB939D198F6714Ebd51", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x21B04BD552cDC3ead9A23dc01a9517Eefae73918", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xA691D34Abf93C0A77998e53B564bEcfaf46Dae27", + "rawVolume": 1983.1761083890099, + "volumeUSD": 1981.1536029133003, + "latestDailyApy": 0.00014358149935667086, + "latestWeeklyApy": 2.001508072591829, + "virtualPrice": 1004729550574434700 + }, + { + "type": "stable-factory", + "address": "0x749F32fF64d24948211497e11749AD2Cab835631", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7783A6FC9E5E9e5b4841c6b5Db30385a6Fe5C418", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x7789A141e8e1201De01671140f57e56dd6aF2654", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000204031702795900 + }, + { + "type": "stable-factory", + "address": "0x3BC08f674210bfB26735b73B4f02ac4f34aD0AE7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000071867502871700 + }, + { + "type": "stable-factory", + "address": "0xFd185a4CE6EA5386c248936621E5484cd6F752D9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto", + "address": "0x92215849c439E1f8612b6646060B4E3E5ef822cC", + "rawVolume": 253190.698722332, + "volumeUSD": 551819.4931926392, + "latestDailyApy": 0.3766808763899121, + "latestWeeklyApy": 0.30165302302540553, + "virtualPrice": 1027906808038417400 + }, + { + "type": "crypto", + "address": "0xB446BF7b8D6D4276d0c75eC0e3ee8dD7Fe15783A", + "rawVolume": 8230.070128182255, + "volumeUSD": 8633.827872240583, + "latestDailyApy": 0.029012800685301876, + "latestWeeklyApy": 0.03722137881683185, + "virtualPrice": 1005153324016900600 + }, + { + "type": "crypto", + "address": "0x751B1e21756bDbc307CBcC5085c042a0e9AaEf36", + "rawVolume": 596.7604138374908, + "volumeUSD": 1320.4601177655225, + "latestDailyApy": 0.14687488582090236, + "latestWeeklyApy": 0.07494526099032228, + "virtualPrice": 1065724820517823900 + }, + { + "type": "crypto", + "address": "0x9b3d675FDbe6a0935E8B7d1941bc6f78253549B7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.2679891671844681, + "virtualPrice": 1002865730158897000 + }, + { + "type": "crypto-factory", + "address": "0xEC5AFc9590964f2fA0FeED54f0fBB2A34480908D", + "rawVolume": 0.05500125, + "volumeUSD": 0.07322435214164003, + "latestDailyApy": 11.463087097243774, + "latestWeeklyApy": 2.134654481085052, + "virtualPrice": 1139839963575468300 + }, + { + "type": "crypto-factory", + "address": "0xc7c939A474CB10EB837894D1ed1a77C61B268Fa7", + "rawVolume": 148316.37565880545, + "volumeUSD": 133122.2894230668, + "latestDailyApy": 1.3677368079603847, + "latestWeeklyApy": 2.789680612402212, + "virtualPrice": 1010715385457045200 + }, + { + "type": "crypto-factory", + "address": "0x36BECDcBdF49255F366a45B861B4223b482D35e4", + "rawVolume": 585.0473514831253, + "volumeUSD": 200.4913666608692, + "latestDailyApy": 0, + "latestWeeklyApy": 0.1074040601961368, + "virtualPrice": 1003836327261481600 + }, + { + "type": "crypto-factory", + "address": "0x697fDefe26AcA625c86DBD07D3b95fDe3E7F7de5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8187d4734Aa4BD78f0A2F7941E276E410e37f033", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xf5BED2BbE798187272741c3042CB662c8Bb67DAf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x36bec0732c913C87a558D6A16f077D5B3D7476C7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000167787786519000 + }, + { + "type": "crypto-factory", + "address": "0xC0B78F2e96De56d08C7608697680e935FE47295B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x48087143Bd15b99e67a8cEc578E4D884A4bBF124", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xd9F354177Edd66E7A6669F33d0Ec64C14E153b38", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0001670754666394103, + "latestWeeklyApy": 0.000023802515181081674, + "virtualPrice": 1005303901029112800 + }, + { + "type": "crypto-factory", + "address": "0x30F217C3423f824de89abE941Da49887BaA8485d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xcaC8002275BC596e6FEfc88807E75f5B6646Fc10", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xB47dF195c7805B2bC9a20c2631b2234753625CD0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xFb6FE7802bA9290ef8b00CA16Af4Bc26eb663a28", + "rawVolume": 210.3655262934455, + "volumeUSD": 1379.643290829234, + "latestDailyApy": 0.0016904749482016257, + "latestWeeklyApy": 0.01067786385613445, + "virtualPrice": 1002447654541388400 + }, + { + "type": "crypto-factory", + "address": "0x5E078b90Af4A1899ae0B1BA17fF2E443F4eb78B0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8705A57a7305E971d8fc897dDb4E0b535D7a047e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x7cC19f8c258D7F489BC1074437e25A46e397688F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003603048377783000 + }, + { + "type": "crypto-factory", + "address": "0x12FA77685728ABcBe1d5c7C11638d2C8dF250478", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002751974497496200 + }, + { + "type": "crypto-factory", + "address": "0x36fae0c62fE24C7Db4983af90c8901C1D7612cD4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xE8C9aF58EBA1DC532C1707B1e28736d3c9d1AFed", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xeB5f4c45E29C05c5FB166B72A173dC32831b4239", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x8E6692B6Fc3bCE7d5291C96ff02bA24E1a329C60", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x48d794c9B1acb3864Ae0c63E9E5D19a6EC80A2c6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xc7d7133A2a4CB8D8B128e961eB8CD3AE85Dd6204", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x3320C9E72fFa1116A7Bb5547F5aE7B2fA2A9EB75", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x552FDB8BE01C640fA308481aB1E9a7af9D62D0f7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xF4f2c1710e4470E58e4841ea0653f949bdDDD67f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9D874dFC60edc490d76f78663204FcFd608151d7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x453c551879234682D2b823EdE73a2Ce41a5150AA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x38aF0A6D3551fA982Ffad038B3b238DF3757204B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x085Ba43f0f6d152d6842721Be0BD18cE2B828010", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x4E7F7A0C44618fc0379f633A6697137955B0375b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xdf458f474810Bd9157C480Fbf61C0A80e6221EFf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xa94fE71A7aAEbBcaEb3f43F839bBc3C5A2D287AD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000016862973092500 + }, + { + "type": "crypto-factory", + "address": "0x6D1C8e33c9F45cFd41135705528afF3d2010498F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x41cE0136B3a9EE7c82D79fB72Ff48360BD5a3263", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8202A631ED5027f17270C50F5C8873Bc66192d64", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xDcE686fB06954DD54a2C73D4Da97e46692D3990A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xD7EfB91D3afCC0a80E8B14d40a15d2A0d7754907", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7aC0401b1D49A8E01daf46Cb5198654F89e64Dc5", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xD880ED1456A16C463724cFdD329806ced7529b78", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0C3781F1FC02D5f9f43f53D81898AF363042a187", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x00A4eBb5b2F51882Cf7DF65E556Bf0B742F02e4E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6908d971a43EDBaf8E1aC29Aa62B604E030FEe30", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002745616837499000 + }, + { + "type": "crypto-factory", + "address": "0xFDdB94f462Ba7D5177B48ECa41F444aB05AF8C79", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0c8c8b4BC7930EFECd85d8a339941563F44Af572", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x574FA5a78bC9CD15Ec019be8f46001d268DfDbd2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x54B46c05A6815F5130A3ED5cBE5b59113146a511", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x73C1537fe5b506172DA6CE5EdE31b57501608fDD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0xbe9953072D303A3A438D102ee64C20Bd7D01883B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xC4A362BafAba6c2F0D8228998D8A486695CB2c08", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8a475218723f31e480696b091890F1C3E8ccC281", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6Aaf3cb86389bAa6CD61592C372f8bF06B2D48e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x12FA7D6d6158e985016147A985b24a5BC6584760", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001725690808586800 + }, + { + "type": "crypto-factory", + "address": "0x00E18306D011bE6F35933146872dF32F4a86CB93", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x23bADb16b9f3863217EEC3705DeA14a0153600Fa", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x987a1fF376de4D3b745C1ABECBC6cC3486cB03eB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xE22CD0A52d5De7b021DF7a9261d5cbF18F237900", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x78Af761a6030B1011296BecAdA3068eEEdD97795", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001395094303258000 + }, + { + "type": "crypto-factory", + "address": "0xd1F6EE081f7Afd7BC8A4cCD4cfC2112a61429E62", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000770830057800300 + }, + { + "type": "crypto-factory", + "address": "0x6c627bb2D47aFF3b3922B6901b4CB9c0963756F3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xAc0345C5fabe186c113bD763c542a254fd8e96e1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x63923C573e1F5C1eCe24cedf45226E1be2c5d170", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001111301792953700 + }, + { + "type": "crypto-factory", + "address": "0x152C96B8BfA478d311eea46f2BF1F6dBDeB4A36b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001127816717134600 + }, + { + "type": "crypto-factory", + "address": "0x62B2c0c64FfFd8956F0eF100D95875cf59e296e9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002257722322949800 + }, + { + "type": "crypto-factory", + "address": "0xeF35183C35D5D31d71EE9Ad891438eba27cee259", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001376910035875300 + }, + { + "type": "crypto-factory", + "address": "0x38E3ea5Ea43DAdD5FB15Ba7D3EF6dd9f802ECA8b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8CBCcFF6B75674ca60F081F477A9fD037C0836F1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x12E5C03750ebED2BfE74Eda0cE755f407Aacefb2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x66bDC0B1864192a15f1F6868eFC315C8E84C6b0E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001437243361395300 + }, + { + "type": "crypto-factory", + "address": "0x95aB1A82AF29BdCbC64176D83F4Cb1667aFd8517", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1007094381106351600 + }, + { + "type": "crypto-factory", + "address": "0x4e061eF1B15abDE9B51C08661Ee56976D411d9a6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x739aC5024eF9CA1719B8f64D4A6286fB0E5F91fb", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9a3BA4734d1cED9a7a667d78470850d092BfC994", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x885d0ee44C882c4eC30a51e8C0468BCB6689e0e4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x2d4708d2aAbB53b8d95b5753CD14930cd5a64F99", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x1b79E223EB51978A39d3bB9d1b96b313fc300050", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000452645365952500 + }, + { + "type": "crypto-factory", + "address": "0xcA6f48D161E66A45b139c74539938dA78167c5DB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000916838997466900 + }, + { + "type": "crypto-factory", + "address": "0x29e9BCfa2d166759075815f52A4C1968BAd97C0E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001724678089235800 + }, + { + "type": "crypto-factory", + "address": "0x524d913F42bC78e02c80e1E99439A3EEe3a005dd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x7C91a679D1e03FF9dDC0919e331CbFeBC0bc38d2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0xa592b7bba07e3BbD6D95B79e08D96CE6a8a4AdB1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000891305126139400 + }, + { + "type": "crypto-factory", + "address": "0x4380061e913c9ca7dDD29fc4F15739F1Fc6d666b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x7BBc0e92505B485aeb3e82E828cb505DAf1E50c6", + "rawVolume": 16055.267076015847, + "volumeUSD": 15763.76076138813, + "latestDailyApy": 1.8154337678987664, + "latestWeeklyApy": 1.524909341343439, + "virtualPrice": 1009320558602910200 + }, + { + "type": "crypto-factory", + "address": "0x9730e3051a60c534979bCDCd8A5FB519bCB22545", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003483525519678100 + }, + { + "type": "crypto-factory", + "address": "0x2246CCaD865813ecc61A496Da7f5aB4eB135A1c7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x1091FE61221DD3f28B9904C371b9E9A9C9137683", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x4779a3B6412FE3218B8e270f0f74d73C841BaC04", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0F6B7c063916fF3AD4DB7A669356552d9D17a3D6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xd9175d9369B26AAc8803818dE1cf366679A37946", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0604ed64B966b4f8184ab0f084a900AB8Ba9Fba9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x69E92e8E42064Ba50908f81E695CF55141805A9C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6bdD11CF1f64712b13F3897C1fDE57AB60002861", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6351A477644cbF1505BeE87710FE071e8aBEf2fc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xAa311EDDfb19F2A542641D6982aa9df2d28ddfEd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x2B433CE7Ff7eEEc2981351a9De6E46a0510eDd28", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001585962863276700 + }, + { + "type": "crypto-factory", + "address": "0x5e9ca97E368Ff54428177EceF328a77C4BEB85bB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001865912411510000 + }, + { + "type": "crypto-factory", + "address": "0x4Cce5169E5F30FF8D149b658495e80B95315fA62", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xC01a983D884C954746b67DC85A857ee6db9a1d73", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6993F9f9873Fa5A338A321084EE736d1C0913723", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x257ABFFedDB458B924dBC6966bDaa4F75f415169", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x653bfec37A09eB090A269d4450e3A3f1324a5F66", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 3.750184669790735, + "virtualPrice": 1396799123307410400 + }, + { + "type": "crypto-factory", + "address": "0x3f996911ADcBE9449abf6350961e41d21BdC9c2C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1446062903642369800 + }, + { + "type": "crypto-factory", + "address": "0xa7C475FC82422F2E9cEfd6E6C9Ab4Ee9660cB421", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 1.5715015593009696, + "virtualPrice": 1001985629440879000 + }, + { + "type": "crypto-factory", + "address": "0xcd7AB39e2bA92ed6BDe88a36C2937f255dE7c702", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x5d59d7DC78b8b16b2c6003b2E4F3f915CA5F7AB6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000101447390666000 + }, + { + "type": "crypto-factory", + "address": "0x180AC510236F28CEce65cB6EFa355C2e3864DDFd", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xea355fDA42B31401473D2752146c7C6fBb6CA261", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x1d1A28b9Eac0Db757BdC6A9e8b5b379C9C92e181", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9c55D22c3509Eedada6654306577E1ED21226f07", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xb1FA859637319F63A555f70A59aD79a5d5516D9A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x3BFbB3200eB513Cd9912848Ad97438A7aD178034", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x1774fB76fe0eC9B30f937DBC036093681EE877F6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xfBD717f818c414174c5999C42fF94d6eE218A323", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1851258666438257700 + }, + { + "type": "crypto-factory", + "address": "0x41904e5cbc0903f527f0AAE1d29D558300D76ef3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1107097182404204200 + }, + { + "type": "crypto-factory", + "address": "0xC3e7aD68459B12278F69CB30ab14176B096FdDbA", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xfB622b132507c81A9233B888eD2f6B3a2cd59cee", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000100 + }, + { + "type": "crypto-factory", + "address": "0x7b7632de25CfF361438f0c2245c1D8fCdAFafB1B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0Cf860855c82E04059614980F31EC1E5E42E263A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xF624fE1aB97522fF28bd5F54A008C1df7218b016", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x427b3534bf506D2Ed4c1D61EaD6aa6b32aCe92Cf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x16358AC7E41d02b7311Fd04d30a0C32766796f07", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000353401141209000 + }, + { + "type": "crypto-factory", + "address": "0x705293caBE1fBA8D3A9b8fbD233cb3931c96a67A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xF77E41b5Ab1C737869C17463DB3F3ED48ce36c13", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x17626Ae92a2C638EC911B26a121b02BbE90C1180", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x2B9582f6D0c648815f5cFe10F74FfccaDf75A4ee", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xfb9786a7585b093dc551d0fF45124e65094E8E71", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x4A4EBFD1fB4Ceb7D459C2E116fd6Ee2B49ab3CF3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xE43b27Da311F25Ac6C0Bd5eF9062f8fE8D54D8F8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xD7d708EDe85cCd464Be5a5b34278FdB30a4eB958", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x4624fb57F5d4693EDD1A0a542e5C7AC0AfD80640", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0xEe9FD26653FAB6FD91AaC08476D40a657454a30f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1004615478593851300 + }, + { + "type": "crypto-factory", + "address": "0x77188415B019Ae393379Eac882C39E61C83379ee", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1008480932814625300 + }, + { + "type": "crypto-factory", + "address": "0x2e53d2676Ef1B46bfD49EF906A438d2Fb1bD5e6b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x20c10E1C7924f38F7419572ec6a5110F95978f3f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xF8F569aAf3aBD1e1c5e75d9445C8938D42fEBd1C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x6136d2cc99c6C2bB97203966731df8A3F13c6F82", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0xAA910CD0A8a46D08aD241123B52FA78A11c88812", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x9F00B6a156BBFA815321d6b430aE45b5245dC435", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xCf5911Bb8aeAf9C659F56bF2B4fF5f964Df99100", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8D6E90DD898fA76160ef3967718Bade14A61E20B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xE80a5A25a4aA5d7c7619E84e934454f6eF039316", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001253912309877500 + }, + { + "type": "crypto-factory", + "address": "0xC32b4dF5328da1E31817AaE70464B997cf3222fC", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x4eBa7626eDf23541b1202EEccB6d6E94a42Dd15E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1002199363614835700 + }, + { + "type": "crypto-factory", + "address": "0x44F8E3C20F65587D7E2e5C8CA5d935F1D9b01CE9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 990287916682975600 + }, + { + "type": "crypto-factory", + "address": "0x5751867DEa8e7858899B0cD7Dd66cF35FB04ca78", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.2737351569279456, + "latestWeeklyApy": 0.05998265350699583, + "virtualPrice": 1032640322013100700 + }, + { + "type": "crypto-factory", + "address": "0x8EeDBE53B5BB2dDCd1Fb669e007f160860C6EAa2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x128658A00FcAbFCdA1Eb4BF6A6C5b8522e2aA9E9", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xeB839B6Be4EaCFD5B7ac17695E12721F51bbCD03", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x300E5ee5fFe8222b70216129f76aeAF33d5f1FE4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x311A794F0643F938143AD0Bfbd6b956d53EB8E01", + "rawVolume": 1527935.854517935, + "volumeUSD": 8.355533831796315, + "latestDailyApy": 1.9559071431940023, + "latestWeeklyApy": 1.193602635118518, + "virtualPrice": 1002188185715842800 + }, + { + "type": "crypto-factory", + "address": "0x28825498d814972a6D4DeEb75cC72aCB1fb4c562", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000009015389711600 + }, + { + "type": "crypto-factory", + "address": "0xFeD69dF1E0A8e4C8Ed6B995Ddc26725529553180", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000428672788100 + }, + { + "type": "crypto-factory", + "address": "0xd4138745B0c37B396e00F6Be4A457fbC860Ce765", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xaB5875A9dC90070c2ed031b24Fa06F6B3b641078", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x1cE924a96B351Fa39a5Fc25Ad81D41DF84b9aEB6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xb8852b54085DEAF82ce20BD2B013b5B09d9409a6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1005334117826057300 + }, + { + "type": "crypto-factory", + "address": "0x19857Ea4adf3c2B88F60E92a273731ba63cB4c2f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xC6731446451c6Ad561F629BE9E066ECA1a20bDFe", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1059757167433131000 + }, + { + "type": "crypto-factory", + "address": "0x121298B39d92625b3B1c72B4874e790b92Db9b14", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1013882704337533700 + }, + { + "type": "crypto-factory", + "address": "0xE01Daf5A0Eda822221bd71dd7d96b37FF1581697", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x6A701a81867a9dDfed50D468005b4fdf84A0DbE2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1043518263325701200 + }, + { + "type": "crypto-factory", + "address": "0xd3559bB8682ae1aE6c72d78b6f029Ac27C6e323f", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xBcA18b639050b177498F305b312C17767c359e95", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x5d4e73B43CdE3e1112E3baf5a87be8B09A0fDEEf", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x435db85934CdcF1E0419f6B632Ff9080D29baD4d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8C4795E1561D54BAB2E9646E52251cE3854641AD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x001C0C30fE53241f6F969223869D35a345f20C03", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000122130174126800 + }, + { + "type": "crypto-factory", + "address": "0x4e1293c1A76B43663563C015518b50494CD7b19c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x22881d7841Ec8650B9FfA6F1Ad9D826bDc22F73F", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xEB6ae0A4cF2e1c86fab43231479F4EC404fD1fCD", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xedA1BC951506298Ccef4F2d1d0e808F348054aeF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "crypto-factory", + "address": "0x09BAFfd346BAE2803Fc3Ac5fB4B50De354170D32", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1003113004044205600 + }, + { + "type": "crypto-factory", + "address": "0x7B6A9C9A49b23D0522EEcE11E8eF620D74311A24", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xBd5F393763b8459f1388B6E7EEf3D0791edEEA13", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x8B3B52463E7773F2F894233EA6FF14B197e41482", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xD3e95868154C86c4260E7B663b749bec27284793", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1006099433554501900 + }, + { + "type": "crypto-factory", + "address": "0x9daa020ba3BC92d68bf20e0579DAcE01D7eFF610", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001375414267348500 + }, + { + "type": "crypto-factory", + "address": "0x15E7830D739fF82b2E57120917617f542B8DAb29", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xB42a586aA6dF39c2941f5780cE501A0D304a23ad", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x43CF90D7C3C00fe9592F86508A7A8D352717b141", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x4ed10B565253AF71aF42117E3D89F5c2cC4FFa4E", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x200eE1aFDa4b84A0B70c8162A467341Bc0188FCB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xbC061C0eD1A6a54E90Cf8cd1DF4eaF637eBe8aCc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.00022139939992449342, + "virtualPrice": 1000029876308774100 + }, + { + "type": "crypto-factory", + "address": "0xC962fe734eCbEa2739c205e3BdB3Bf7e3fBE3C2B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.02928402781154915, + "latestWeeklyApy": 0.013558905842869784, + "virtualPrice": 1000022513770494700 + }, + { + "type": "crypto-factory", + "address": "0x7fd25133E3c4c7832c2F450F54f3f3444af54D15", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.08444547489632193, + "latestWeeklyApy": 0.06772134605750324, + "virtualPrice": 1000073580789936400 + }, + { + "type": "crypto-factory", + "address": "0xbAC994E2794e4206341673f4be24527f67f81971", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xbB0E6b9aF52f64accd9bBD0bf52607d08f5d5c18", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0xA643f49F752BAD7986a2FC426688Ef1675995Aaa", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "crypto-factory", + "address": "0x0bFDcF48ad29E80Cd895e91EED2a43E009282529", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000221589732698500 + } + ], + "totalVolume": 2055201.5019646517, + "cryptoVolume": 712248.3947827742, + "cryptoShare": 34.65589111831159, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-xdai.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-xdai.json new file mode 100644 index 00000000..8cfea999 --- /dev/null +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-xdai.json @@ -0,0 +1,458 @@ +{ + "poolList": [ + { + "type": "main", + "address": "0x7f90122BF0700F9E7e1F688fe926940E8839F353", + "rawVolume": 8590.338497613977, + "volumeUSD": 8588.921145753733, + "latestDailyApy": 0.3939477588874807, + "latestWeeklyApy": 0.4857658623022898, + "virtualPrice": 1005309027224664600 + }, + { + "type": "main", + "address": "0x85bA9Dfb4a3E4541420Fc75Be02E2B42042D7e46", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.1165238874142327, + "latestWeeklyApy": 0.14364140603535525, + "virtualPrice": 1001521203482350600 + }, + { + "type": "stable-factory", + "address": "0xBdF4488Dcf7165788D438b62B4C8A333879B7078", + "rawVolume": 2.179577323597409, + "volumeUSD": 241.4808974097881, + "latestDailyApy": 0.004514564858015824, + "latestWeeklyApy": 0.01280096297211486, + "virtualPrice": 1000573271755128800 + }, + { + "type": "stable-factory", + "address": "0x5D7309a01B727d6769153fCB1dF5587858d53B9C", + "rawVolume": 0.02369454110720052, + "volumeUSD": 2.567644087412319, + "latestDailyApy": 0.012295491231095745, + "latestWeeklyApy": 0.06911674435736703, + "virtualPrice": 1002370244567189500 + }, + { + "type": "stable-factory", + "address": "0xe5F32A099Eb90dDB97F3684fc6663dD253dfAe55", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000644686866300800 + }, + { + "type": "stable-factory", + "address": "0xd7468E6c3C9259010D1148f79788bA631b94B506", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001327149147558100 + }, + { + "type": "stable-factory", + "address": "0xA64D8025ddA09bCE94DA2cF2DC175d1831e2dF76", + "rawVolume": 141.81421625495673, + "volumeUSD": 141.4689278906518, + "latestDailyApy": 0.24277093932958405, + "latestWeeklyApy": 0.3373105203590132, + "virtualPrice": 1003132569511262500 + }, + { + "type": "stable-factory", + "address": "0xe4194fe60c506abb447815e92fB10F3723C55E84", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xe50f2bA6141d6a26Beed62111D570F282060592D", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x990cD80Ef72e13A5Ac7658dCC9FD209599463b7c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAeD6a62dAB7514b6A644AB888cA6810c0327b82b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x44349c1ec26b6Ba40bbe68d3c906762F0CC2eECB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x79E81b7080fe56A936e550a71ebC66555Bd4b2f3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5a6795570cF56AB8Db01D6c5DB6e980470C563a4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x149bF4A7e0561D38Db264B973225dAA7209A7d20", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xAf925280277E847201716A88054E5bddbF2Bbb4d", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x9a6a9F304232A8713F23188F9D6A0246df2504CB", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 + }, + { + "type": "stable-factory", + "address": "0xc6F47235e30d0668505E6D4F3De002EBdFcd0283", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x5f4509E2280549E662859F7DBE8520bEaf0A9e5B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x04e99f74951f2d5ebCA7e71AEE6B1BF9984eFBAc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x207b94Ecb6550ebC89C8C9e5e430f071909A3050", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd916Ee5879f15652426e342d087a94f699e2c777", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xd8883EeC56cB95F9bbdccaa9b453e3cC19a90e72", + "rawVolume": 12.753867588108665, + "volumeUSD": 0.07944437321886942, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1005165798330236700 + }, + { + "type": "stable-factory", + "address": "0xD1C1993f6A4bA35Fcbb241795E571Cc471F91e94", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8370CeA1E9bB221295563fB2CC62d66D0Afabef3", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xEad043133aa7DbbebEAa986eEB9C85d61962cd91", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x50894fFd90F460aAf5a4aa0390c7567Cdf2812De", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x90767aaCa8445EA703D477bF95952ed893176a44", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xABf72f48277AE1C9cBEab7aD531DE037091B4f84", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x91eBCe7CF4F4ea0c740722b706DbB9AB311844B8", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xb30E4809Fb7Acab15cC0a1D74f54D5cbb287f2E0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc24F496463917EF2851D9ce889b07236d8D4C6B6", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x86c76231e0126e53c59D15447E244FE00F11CDfF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xeac446da379001A8652387Cd899A1EA659CB027C", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xFaE41bB467ca29A5054e40D52AbDb54Eb7e1F3B0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xdC1422eBFB14baaA25ba18Ba2C0aeaE36aAc5ceF", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xF3Be36DF5AAe8451f10fA2fc7aE1e6de8FfA1D88", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x8C720914Af9BB379fD7297DAB375c969d76e47D0", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xda203fbbC7D3767eF0db31D3bDbB4E3a3D04d4C2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xBBc454ef207D5190debE534E392BBd7De14D89fc", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x29b963ad4CD578c41e1c5dDe5A8C6FDC4ec1257a", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x2EE47102AC82c4EE64B885B81d7f374e4fed783e", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xf7911B142a59a1DAB915d5886a708Eca5C90AF33", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0x6cCd06ecD351d46d3B49f9cF5F2804189bb685C1", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xc683E8314Ea5Be1525eC218106EBE69c146c1Dc2", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, + { + "type": "stable-factory", + "address": "0xCD92002A5015288f95AC80D9772F3fbDeA4bB76B", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000077823612436000 + }, + { + "type": "stable-factory", + "address": "0x18a096234F7e008418Eb2603738c073d9045B0a4", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000001751318677500 + }, + { + "type": "stable-factory", + "address": "0xab033557743fbB4B9aF4C408B5267C0A4d28E15A", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000018395108167800 + }, + { + "type": "crypto", + "address": "0x5633E00994896D0F472926050eCb32E38bef3e65", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1004266708361128300 + }, + { + "type": "crypto", + "address": "0x056C6C5e684CeC248635eD86033378Cc444459B0", + "rawVolume": 241703.2145109759, + "volumeUSD": 125215.9594089262, + "latestDailyApy": 0.0651430681659626, + "latestWeeklyApy": 0.1888332410462601, + "virtualPrice": 1004488954012929300 + } + ], + "totalVolume": 134190.477468441, + "cryptoVolume": 125215.9594089262, + "cryptoShare": 93.31210512934835, + "subgraphHasErrors": false +} diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index 1af2e6ef..7b15bf5c 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -1,12 +1,7 @@ -import axios from 'axios'; import Web3 from 'web3'; import BN from 'bignumber.js'; -import WEB3_CONSTANTS from 'constants/Web3'; import { fn } from 'utils/api'; -import { getFeeDistributor } from 'utils/getters'; -import { getThursdayUTCTimestamp } from 'utils/helpers'; -import distributorAbi from 'constants/abis/distributor.json'; -import tripoolSwapAbi from 'constants/abis/tripool_swap.json'; +import { USE_FALLBACK_THEGRAPH_DATA } from 'constants/AppConstants'; import configs from 'constants/configs'; import { BASE_API_DOMAIN } from 'constants/AppConstants'; import { runConcurrentlyAtMost } from 'utils/Async'; @@ -32,244 +27,264 @@ const POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME = { ].map(lc), }; +const getFallbackData = async (fallbackDataFileName) => ( + (await import(`./_fallback-data/${fallbackDataFileName}.json`)).default +); + export default fn(async ({ blockchainId }) => { if (typeof blockchainId === 'undefined') blockchainId = 'ethereum'; // Default value - const config = configs[blockchainId]; - const web3 = new Web3(config.rpcUrl); + const fallbackDataFileName = `getSubgraphData-${blockchainId}`; - if (typeof config === 'undefined') { - throw new Error(`No factory data for blockchainId "${blockchainId}"`); + if (USE_FALLBACK_THEGRAPH_DATA && typeof fallbackDataFileName !== 'undefined') { + return getFallbackData(fallbackDataFileName); } - const GRAPH_ENDPOINT = config.graphEndpoint; - const CURRENT_TIMESTAMP = Math.round(new Date().getTime() / 1000); - const TIMESTAMP_24H_AGO = CURRENT_TIMESTAMP - (25 * 3600); + try { + const config = configs[blockchainId]; + const web3 = new Web3(config.rpcUrl); + + if (typeof config === 'undefined') { + throw new Error(`No factory data for blockchainId "${blockchainId}"`); + } - let subgraphHasErrors = false; + const GRAPH_ENDPOINT = config.graphEndpoint; + const CURRENT_TIMESTAMP = Math.round(new Date().getTime() / 1000); + const TIMESTAMP_24H_AGO = CURRENT_TIMESTAMP - (25 * 3600); - const allPools = await getAllCurvePoolsData([blockchainId]); - const getPoolByAddress = (address) => ( - allPools.find((pool) => (lc(pool.address) === lc(address))) - ); + let subgraphHasErrors = false; - const poolListData = await (await fetch(`${BASE_API_DOMAIN}/api/getPoolList/${blockchainId}`)).json() - let poolList = poolListData.data.poolList - let totalVolume = 0 - let cryptoVolume = 0 + const allPools = await getAllCurvePoolsData([blockchainId]); + const getPoolByAddress = (address) => ( + allPools.find((pool) => (lc(pool.address) === lc(address))) + ); - await runConcurrentlyAtMost(poolList.map((_, i) => async () => { - const poolAddress = lc(poolList[i].address); + const poolListData = await (await fetch(`${BASE_API_DOMAIN}/api/getPoolList/${blockchainId}`)).json() + let poolList = poolListData.data.poolList + let totalVolume = 0 + let cryptoVolume = 0 - let POOL_QUERY = ` - { - swapVolumeSnapshots( - first: 1000, - orderBy: timestamp, - orderDirection: desc, - where: { - pool: "${poolAddress}" - timestamp_gt: ${TIMESTAMP_24H_AGO} - period: 3600 - } - ) + await runConcurrentlyAtMost(poolList.map((_, i) => async () => { + const poolAddress = lc(poolList[i].address); + + let POOL_QUERY = ` { - volume - volumeUSD - timestamp - count + swapVolumeSnapshots( + first: 1000, + orderBy: timestamp, + orderDirection: desc, + where: { + pool: "${poolAddress}" + timestamp_gt: ${TIMESTAMP_24H_AGO} + period: 3600 + } + ) + { + volume + volumeUSD + timestamp + count + } + } + ` + const res = await fetch(GRAPH_ENDPOINT, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ query: POOL_QUERY }) + }) + + let data = await res.json() + let rollingDaySummedVolume = 0 + let rollingRawVolume = 0 + + subgraphHasErrors = data.errors?.length > 0; + if (!subgraphHasErrors) { + for (let i = 0; i < data.data.swapVolumeSnapshots.length; i++) { + const hourlyVolUSD = parseFloat(data.data.swapVolumeSnapshots[i].volumeUSD) + rollingDaySummedVolume = rollingDaySummedVolume + hourlyVolUSD + + const hourlyVol = parseFloat(data.data.swapVolumeSnapshots[i].volume) + rollingRawVolume = rollingRawVolume + hourlyVol } } - ` - const res = await fetch(GRAPH_ENDPOINT, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query: POOL_QUERY }) - }) - - let data = await res.json() - let rollingDaySummedVolume = 0 - let rollingRawVolume = 0 - - subgraphHasErrors = data.errors?.length > 0; - if (!subgraphHasErrors) { - for (let i = 0; i < data.data.swapVolumeSnapshots.length; i++) { - const hourlyVolUSD = parseFloat(data.data.swapVolumeSnapshots[i].volumeUSD) - rollingDaySummedVolume = rollingDaySummedVolume + hourlyVolUSD - - const hourlyVol = parseFloat(data.data.swapVolumeSnapshots[i].volume) - rollingRawVolume = rollingRawVolume + hourlyVol - } - } - const hasRawVolumeButNoUsdVolume = (rollingDaySummedVolume === 0 && rollingRawVolume > 0); - const needsFallbackUsdVolume = ( - hasRawVolumeButNoUsdVolume || - (POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME[blockchainId] || []).includes(poolAddress) - ); - - if (needsFallbackUsdVolume) { - const ILLIQUID_THRESHOLD = 100; - const poolData = getPoolByAddress(poolAddress); - const poolLpTokenPrice = ( - poolData.usdTotal > ILLIQUID_THRESHOLD ? - (poolData.usdTotal / (poolData.totalSupply / 1e18)) : - 0 + const hasRawVolumeButNoUsdVolume = (rollingDaySummedVolume === 0 && rollingRawVolume > 0); + const needsFallbackUsdVolume = ( + hasRawVolumeButNoUsdVolume || + (POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME[blockchainId] || []).includes(poolAddress) ); - const usdVolumeRectified = poolLpTokenPrice * rollingRawVolume; - if (usdVolumeRectified > 0 || poolData.usdTotal <= ILLIQUID_THRESHOLD) { - rollingDaySummedVolume = usdVolumeRectified; + if (needsFallbackUsdVolume) { + const ILLIQUID_THRESHOLD = 100; + const poolData = getPoolByAddress(poolAddress); + const poolLpTokenPrice = ( + poolData.usdTotal > ILLIQUID_THRESHOLD ? + (poolData.usdTotal / (poolData.totalSupply / 1e18)) : + 0 + ); + const usdVolumeRectified = poolLpTokenPrice * rollingRawVolume; + + if (usdVolumeRectified > 0 || poolData.usdTotal <= ILLIQUID_THRESHOLD) { + rollingDaySummedVolume = usdVolumeRectified; - console.log(`Missing usd volume from subgraph: derived using lp token price from getPools endpoint for pool ${poolAddress} (derived rolling day usd volume: ${usdVolumeRectified})`); + console.log(`Missing usd volume from subgraph: derived using lp token price from getPools endpoint for pool ${poolAddress} (derived rolling day usd volume: ${usdVolumeRectified})`); + } } - } - if (blockchainId === 'ethereum' && (poolAddress === '0x141ace5fd4435fd341e396d579c91df99fed10d4' || poolAddress === '0x2863a328a0b7fc6040f11614fa0728587db8e353')) { - poolList[i].rawVolume = 0 - poolList[i].volumeUSD = 0 - } else { - poolList[i].rawVolume = rollingRawVolume - poolList[i].volumeUSD = rollingDaySummedVolume - } + if (blockchainId === 'ethereum' && (poolAddress === '0x141ace5fd4435fd341e396d579c91df99fed10d4' || poolAddress === '0x2863a328a0b7fc6040f11614fa0728587db8e353')) { + poolList[i].rawVolume = 0 + poolList[i].volumeUSD = 0 + } else { + poolList[i].rawVolume = rollingRawVolume + poolList[i].volumeUSD = rollingDaySummedVolume + } - totalVolume += parseFloat(rollingDaySummedVolume) - console.log('totalVolume', totalVolume, rollingDaySummedVolume, parseFloat(rollingDaySummedVolume), poolAddress) - cryptoVolume += (poolList[i].type.includes('crypto')) ? parseFloat(rollingDaySummedVolume) : 0 - - - const APY_QUERY = ` - { - dailyPoolSnapshots(first: 7, - orderBy: timestamp, - orderDirection: desc, - where: - {pool: "${poolList[i].address.toLowerCase()}"}) - { - baseApr - xcpProfit - xcpProfitA - virtualPrice - timestamp - } - } - `; - - const resAPY = await fetch(GRAPH_ENDPOINT, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ query: APY_QUERY }), - }); + totalVolume += parseFloat(rollingDaySummedVolume) + cryptoVolume += (poolList[i].type.includes('crypto')) ? parseFloat(rollingDaySummedVolume) : 0 - let dataAPY = await resAPY.json(); - - const snapshots = dataAPY?.data?.dailyPoolSnapshots?.map((a) => ({ - baseApr: +a.baseApr, - virtualPrice: +a.virtualPrice, - xcpProfit: a.xcpProfit ? +a.xcpProfit : undefined, - xcpProfitA: a.xcpProfitA ? +a.xcpProfitA : undefined, - timestamp: a.timestamp, - })) || []; - - let latestDailyApy = 0 - let latestWeeklyApy = 0 - if (snapshots.length >= 2) { - const isCryptoPool = snapshots[0].xcpProfit > 0; - - if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[1].xcpProfit !== 0) { - const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; - const dayOldProfit = ((snapshots[1].xcpProfit / 2) + (snapshots[1].xcpProfitA / 2) + 1e18) / 2; - const rateDaily = (currentProfit - dayOldProfit) / dayOldProfit; - latestDailyApy = ((rateDaily + 1) ** 365 - 1) * 100; - } else if (snapshots[1].virtualPrice !== 0) { - latestDailyApy = ((snapshots[0].baseApr + 1) ** 365 - 1) * 100; + + const APY_QUERY = ` + { + dailyPoolSnapshots(first: 7, + orderBy: timestamp, + orderDirection: desc, + where: + {pool: "${poolList[i].address.toLowerCase()}"}) + { + baseApr + xcpProfit + xcpProfitA + virtualPrice + timestamp + } } - } - if (snapshots.length > 6) { - const isCryptoPool = snapshots[0].xcpProfit > 0; - - if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[6].xcpProfit !== 0) { - const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; - const weekOldProfit = ((snapshots[6].xcpProfit / 2) + (snapshots[6].xcpProfitA / 2) + 1e18) / 2; - const rateWeekly = (currentProfit - weekOldProfit) / weekOldProfit; - latestWeeklyApy = ((rateWeekly + 1) ** 52 - 1) * 100; - } else if (snapshots[6].virtualPrice !== 0) { - const latestWeeklyRate = - (snapshots[0].virtualPrice - snapshots[6].virtualPrice) / - snapshots[0].virtualPrice; - latestWeeklyApy = ((latestWeeklyRate + 1) ** 52 - 1) * 100; + `; + + const resAPY = await fetch(GRAPH_ENDPOINT, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ query: APY_QUERY }), + }); + + let dataAPY = await resAPY.json(); + + const snapshots = dataAPY?.data?.dailyPoolSnapshots?.map((a) => ({ + baseApr: +a.baseApr, + virtualPrice: +a.virtualPrice, + xcpProfit: a.xcpProfit ? +a.xcpProfit : undefined, + xcpProfitA: a.xcpProfitA ? +a.xcpProfitA : undefined, + timestamp: a.timestamp, + })) || []; + + let latestDailyApy = 0 + let latestWeeklyApy = 0 + if (snapshots.length >= 2) { + const isCryptoPool = snapshots[0].xcpProfit > 0; + + if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[1].xcpProfit !== 0) { + const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; + const dayOldProfit = ((snapshots[1].xcpProfit / 2) + (snapshots[1].xcpProfitA / 2) + 1e18) / 2; + const rateDaily = (currentProfit - dayOldProfit) / dayOldProfit; + latestDailyApy = ((rateDaily + 1) ** 365 - 1) * 100; + } else if (snapshots[1].virtualPrice !== 0) { + latestDailyApy = ((snapshots[0].baseApr + 1) ** 365 - 1) * 100; + } } - } - poolList[i].latestDailyApy = Math.min(latestDailyApy, 1e6); - poolList[i].latestWeeklyApy = Math.min(latestWeeklyApy, 1e6); - poolList[i].virtualPrice = snapshots[0] ? snapshots[0].virtualPrice : undefined; - - }), 10); - - // When a crypto pool uses a base pool lp as one of its underlying assets, apy calculations - // using xcp_profit need to add up 1/3rd of the underlying pool's base volume - if (config.CRYPTO_POOLS_WITH_BASE_POOLS) { - poolList = poolList.map((pool) => { - if (config.CRYPTO_POOLS_WITH_BASE_POOLS.has(pool.address)) { - const { latestDailyApy, latestWeeklyApy } = pool; - const underlyingPoolAddress = config.CRYPTO_POOLS_WITH_BASE_POOLS.get(pool.address); - const underlyingPool = poolList.find(({ address }) => address.toLowerCase() === underlyingPoolAddress.toLowerCase()); - if (!underlyingPool) { - console.error(`Couldn't find underlying pool for crypto pool ${pool.address}, hence couldn't add up its base apy`); - return pool; + if (snapshots.length > 6) { + const isCryptoPool = snapshots[0].xcpProfit > 0; + + if (isCryptoPool && typeof snapshots[0].xcpProfit !== 'undefined' && snapshots[6].xcpProfit !== 0) { + const currentProfit = ((snapshots[0].xcpProfit / 2) + (snapshots[0].xcpProfitA / 2) + 1e18) / 2; + const weekOldProfit = ((snapshots[6].xcpProfit / 2) + (snapshots[6].xcpProfitA / 2) + 1e18) / 2; + const rateWeekly = (currentProfit - weekOldProfit) / weekOldProfit; + latestWeeklyApy = ((rateWeekly + 1) ** 52 - 1) * 100; + } else if (snapshots[6].virtualPrice !== 0) { + const latestWeeklyRate = + (snapshots[0].virtualPrice - snapshots[6].virtualPrice) / + snapshots[0].virtualPrice; + latestWeeklyApy = ((latestWeeklyRate + 1) ** 52 - 1) * 100; } + } + poolList[i].latestDailyApy = Math.min(latestDailyApy, 1e6); + poolList[i].latestWeeklyApy = Math.min(latestWeeklyApy, 1e6); + poolList[i].virtualPrice = snapshots[0] ? snapshots[0].virtualPrice : undefined; + + }), 10); + + // When a crypto pool uses a base pool lp as one of its underlying assets, apy calculations + // using xcp_profit need to add up 1/3rd of the underlying pool's base volume + if (config.CRYPTO_POOLS_WITH_BASE_POOLS) { + poolList = poolList.map((pool) => { + if (config.CRYPTO_POOLS_WITH_BASE_POOLS.has(pool.address)) { + const { latestDailyApy, latestWeeklyApy } = pool; + const underlyingPoolAddress = config.CRYPTO_POOLS_WITH_BASE_POOLS.get(pool.address); + const underlyingPool = poolList.find(({ address }) => address.toLowerCase() === underlyingPoolAddress.toLowerCase()); + if (!underlyingPool) { + console.error(`Couldn't find underlying pool for crypto pool ${pool.address}, hence couldn't add up its base apy`); + return pool; + } - return { - ...pool, - latestDailyApy: BN(latestDailyApy).plus(BN(underlyingPool.latestDailyApy).div(3)).toNumber(), - latestWeeklyApy: BN(latestWeeklyApy).plus(BN(underlyingPool.latestWeeklyApy).div(3)).toNumber(), + return { + ...pool, + latestDailyApy: BN(latestDailyApy).plus(BN(underlyingPool.latestDailyApy).div(3)).toNumber(), + latestWeeklyApy: BN(latestWeeklyApy).plus(BN(underlyingPool.latestWeeklyApy).div(3)).toNumber(), + } } - } - return pool; - }) - } + return pool; + }) + } - /** - * Add additional ETH staking APY to pools containing ETH LSDs - */ - poolList = poolList.map((pool) => { - const poolData = getPoolByAddress(pool.address); - if (!poolData) return pool; // Some broken/ignored pools might still be picked up by the subgraph - - const { usesRateOracle, coins, usdTotal } = poolData; - const needsAdditionalLsdAssetApy = ( - !usesRateOracle && - coins.some(({ ethLsdApy }) => typeof ethLsdApy !== 'undefined') - ); + /** + * Add additional ETH staking APY to pools containing ETH LSDs + */ + poolList = poolList.map((pool) => { + const poolData = getPoolByAddress(pool.address); + if (!poolData) return pool; // Some broken/ignored pools might still be picked up by the subgraph + + const { usesRateOracle, coins, usdTotal } = poolData; + const needsAdditionalLsdAssetApy = ( + !usesRateOracle && + coins.some(({ ethLsdApy }) => typeof ethLsdApy !== 'undefined') + ); - if (!needsAdditionalLsdAssetApy || usdTotal === 0) return pool; + if (!needsAdditionalLsdAssetApy || usdTotal === 0) return pool; - const additionalApysPcentFromLsds = coins.map(({ - ethLsdApy, - poolBalance, - decimals, - usdPrice, - }) => { - if (typeof ethLsdApy === 'undefined' || usdPrice === null || usdPrice === 0) return 0; + const additionalApysPcentFromLsds = coins.map(({ + ethLsdApy, + poolBalance, + decimals, + usdPrice, + }) => { + if (typeof ethLsdApy === 'undefined' || usdPrice === null || usdPrice === 0) return 0; - const assetUsdTotal = uintToBN(poolBalance, decimals).times(usdPrice); - const assetProportionInPool = assetUsdTotal.div(usdTotal); + const assetUsdTotal = uintToBN(poolBalance, decimals).times(usdPrice); + const assetProportionInPool = assetUsdTotal.div(usdTotal); - return assetProportionInPool.times(ethLsdApy).times(100); + return assetProportionInPool.times(ethLsdApy).times(100); + }); + + return { + ...pool, + latestDailyApy: BN(pool.latestDailyApy).plus(sumBN(additionalApysPcentFromLsds)).toNumber(), + latestWeeklyApy: BN(pool.latestWeeklyApy).plus(sumBN(additionalApysPcentFromLsds)).toNumber(), + } }); - return { - ...pool, - latestDailyApy: BN(pool.latestDailyApy).plus(sumBN(additionalApysPcentFromLsds)).toNumber(), - latestWeeklyApy: BN(pool.latestWeeklyApy).plus(sumBN(additionalApysPcentFromLsds)).toNumber(), - } - }); + const cryptoShare = (cryptoVolume / totalVolume) * 100 - const cryptoShare = (cryptoVolume / totalVolume) * 100 + return { poolList, totalVolume, cryptoVolume, cryptoShare, subgraphHasErrors } + } catch (err) { + if (typeof fallbackDataFileName !== 'undefined') { + console.log(`CAUGHT AND HANDLED GRAPHQL ERROR: "getSubgraphData/${blockchainId}". Fallback data was returned instead of fresh data. The caught error is logged below ↓`); + console.log(err); - return { poolList, totalVolume, cryptoVolume, cryptoShare, subgraphHasErrors } + return getFallbackData(fallbackDataFileName); + } else { + throw err; + } + } }, { - maxAge: 5 * 60, // 15 min + maxAge: 5 * 60, // 5 min }); From 45677c6eacc1537aba1255b6181b6dd093f8eb37 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 8 Aug 2023 17:12:47 +0200 Subject: [PATCH 38/83] Add isBroken flag to pools --- pages/api/getPools/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 2fa05a8b..6165018a 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -1196,6 +1196,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ), oracleMethod: undefined, // Don't return this value, unneeded for api consumers usesRateOracle, + isBroken: (BROKEN_POOLS_ADDRESSES || []).includes(lc(poolInfo.address)), }; // When retrieving pool data for a registry that isn't 'main', mainRegistryLpTokensPricesMap From 0213643cc29fd2d21f3e8032b7eb350a85ae8103 Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 10 Aug 2023 17:39:17 +0200 Subject: [PATCH 39/83] Add Base --- constants/configs/configs.js | 35 ++++++++ pages/api/getFactoryAPYs-base.js | 137 +++++++++++++++++++++++++++++++ pages/api/getTVL.js | 1 + pages/api/getTVLBase.js | 59 +++++++++++++ 4 files changed, 232 insertions(+) create mode 100644 pages/api/getFactoryAPYs-base.js create mode 100644 pages/api/getTVLBase.js diff --git a/constants/configs/configs.js b/constants/configs/configs.js index b32908c9..4610526f 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -523,5 +523,40 @@ const configs = { approxBlocksPerDay: 70000, // Very approx from list of blocks on https://explorer.zksync.io/blocks graphEndpoint: undefined, // Not supported by TheGraph's hosted service }, + base: { + hasNoMainRegistry: true, // No main registry deployed nor address provider + poolsBaseUrlOld: null, + poolsBaseUrl: null, + shortId: 'base', + nativeCurrencySymbol: 'ETH', + chainId: 8453, + nativeCurrencyCoingeckoId: 'ethereum', + platformCoingeckoId: 'base', + nativeAssetErc20WrapperId: 'weth', // Used by crypto facto, since it handles wrapped native as native + rpcUrl: 'https://mainnet.base.org/', + multicallAddress: '0xca11bde05977b3631167028862be2a173976ca11', + multicall2Address: '0xca11bde05977b3631167028862be2a173976ca11', + getFactoryRegistryAddress: async () => '0x114C4042B11a2b16F58Fe1BFe847589a122F678a', + getFactoryCryptoRegistryAddress: async () => '0x5EF72230578b3e399E6C6F4F6360edF95e83BBfd', + getFactoryTricryptoRegistryAddress: async () => '0xA5961898870943c68037F6848d2D866Ed2016bcB', + factoryImplementationAddressMap: new Map([ + ['0x4244eB811D6e0Ef302326675207A95113dB4E1F8'.toLowerCase(), 'plain2basic'], + ['0x883feb1B9862e0c8559D26F53bf19264C5E0839F'.toLowerCase(), 'plain2balances'], + ['0x66B5792ED50a2a7405Ea75C4B6B1913eF4E46661'.toLowerCase(), 'plain2eth'], + ['0xcB4eB43E31C830e22baF764c64F11F32C280496c'.toLowerCase(), 'plain2optimized'], + ['0x0E2615ce69Cd3Dc3Ff6f66a975bEa0655F3bA7b9'.toLowerCase(), 'plain3basic'], + ['0x0E2615ce69Cd3Dc3Ff6f66a975bEa0655F3bA7b9'.toLowerCase(), 'plain3balances'], + ['0x7D6Cf519Bfe71EaFb21bC1787964559505AFF685'.toLowerCase(), 'plain3eth'], + ['0x94347E31BbA87C1004AF3b149cc8c1DE90ABE910'.toLowerCase(), 'plain3optimized'], + ['0xD2AcAe14ae2ee0f6557aC6C6D0e407a92C36214b'.toLowerCase(), 'plain4basic'], + ['0xB8bF7ABeb9b4E9AD35EAB77643aDb363E40a3b0B'.toLowerCase(), 'plain4balances'], + ['0x4A5bF7Ab9A8202692051c19B102d3eDD62aaBAE6'.toLowerCase(), 'plain4eth'], + ['0x0B4dc7A945695D11FD83e40B2DfC2B896A02395F'.toLowerCase(), 'plain4optimized'], + ]), + BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), + DISABLED_POOLS_ADDRESSES: [].map(lc), + approxBlocksPerDay: 4300, // Very approx from list of blocks on https://basescan.org/blocks + graphEndpoint: undefined, // Not supported by TheGraph's hosted service https://thegraph.com/docs/en/developing/supported-networks/ + }, }; export default configs; diff --git a/pages/api/getFactoryAPYs-base.js b/pages/api/getFactoryAPYs-base.js new file mode 100644 index 00000000..fbd63ded --- /dev/null +++ b/pages/api/getFactoryAPYs-base.js @@ -0,0 +1,137 @@ +/** + * Custom implementation because reliance on `getFactoryAPYs/_sidechains` implies + * two requirements: (1) need for thegraph to support the chain, and (2) need for + * a uniswap fork to be running on that chain for the subgraph to use as an + * external oracle where needed. + * Moonbeam satisfies (1) but not (2), so it uses a suboptimal custom setup for now. + */ + +import Web3 from 'web3'; +import BigNumber from 'big-number'; +import { BASE_API_DOMAIN } from 'constants/AppConstants'; + +import getPoolsFn from 'pages/api/getPools'; +import configs from 'constants/configs'; +import { fn } from 'utils/api'; +import registryAbi from 'constants/abis/factory_registry.json'; +import multicallAbi from 'constants/abis/multicall.json'; +import factorypool3Abi from 'constants/abis/factory_swap.json'; + +const web3 = new Web3(configs.base.rpcUrl); + +export default fn(async (query) => { + const config = configs.base; + const version = 2 + + let registryAddress = await config.getFactoryRegistryAddress(); + let multicallAddress = config.multicallAddress; + let registry = new web3.eth.Contract(registryAbi, registryAddress); + let multicall = new web3.eth.Contract(multicallAbi, multicallAddress) + let res = await getPoolsFn.straightCall({ blockchainId: 'base', registryId: 'factory' }) + let poolDetails = []; + let totalVolume = 0 + + const latest = await web3.eth.getBlockNumber() + const DAY_BLOCKS_24H = config.approxBlocksPerDay; + let DAY_BLOCKS = DAY_BLOCKS_24H + + await Promise.all( + res.poolData.map(async (pool, index) => { + + let poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) + + let vPriceOldFetch; + let vPriceOldFetchFailed = false; + try { + vPriceOldFetch = await poolContract.methods.get_virtual_price().call('', latest - DAY_BLOCKS) + } catch (e) { + console.error(`Couldn't fetch get_virtual_price for block ${latest - DAY_BLOCKS}: ${e.toString()}`); + vPriceOldFetchFailed = true; + vPriceOldFetch = 1 * (10 ** 18) + } + const testPool = pool.address + const eventName = 'TokenExchangeUnderlying'; + const eventName2 = 'TokenExchange'; + + + console.log(latest - DAY_BLOCKS, latest, 'blocks') + const isMetaPool = ( + pool.implementation?.startsWith('v1metausd') || + pool.implementation?.startsWith('metausd') || + pool.implementation?.startsWith('v1metabtc') || + pool.implementation?.startsWith('metabtc') + ); + + let decimals = ( + version === 1 ? [pool.token.decimals, 18, 18, 18] : + (version === 2 && isMetaPool) ? pool.underlyingDecimals : + pool.decimals + ); + let volume = 0; + + let events = await poolContract.getPastEvents(eventName, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) + + events.map((trade) => { + + let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] + volume += t + + }) + + + if (version == '2') { + let events2 = await poolContract.getPastEvents(eventName2, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) + + events2.map((trade) => { + let t = trade.returnValues[2] / 10 ** decimals[trade.returnValues[1]] + volume += t + }) + + + } + + // Since we don't fetch blocks for the entirety of the past 24 hours, + // we multiply the split volume accordingly + const correctedVolume = volume * (DAY_BLOCKS_24H / DAY_BLOCKS); + + let vPriceFetch + try { + vPriceFetch = await poolContract.methods.get_virtual_price().call() + } catch (e) { + vPriceFetch = 1 * (10 ** 18) + } + + let vPrice = vPriceOldFetchFailed ? vPriceFetch : vPriceOldFetch + let vPriceNew = vPriceFetch + let apy = (vPriceNew - vPrice) / vPrice * 100 * 365 + let apyFormatted = `${apy.toFixed(2)}%` + totalVolume += correctedVolume + + let p = { + index, + 'poolAddress': pool.address, + 'poolSymbol': version === 1 ? pool.token.symbol : pool.symbol, + apyFormatted, + apy, + 'virtualPrice': vPriceFetch, + volume: correctedVolume, + } + poolDetails.push(p) + }) + ) + + poolDetails.sort((a, b) => (a.index > b.index) ? 1 : ((b.index > a.index) ? -1 : 0)) + + return { poolDetails, totalVolume, latest }; + +}, { + maxAge: 30, // 30s +}); diff --git a/pages/api/getTVL.js b/pages/api/getTVL.js index 276de92a..2bfd5f23 100644 --- a/pages/api/getTVL.js +++ b/pages/api/getTVL.js @@ -40,6 +40,7 @@ export default fn(async () => { 'getTVLCelo', 'getTVLZkevm', 'getTVLZksync', + 'getTVLBase', ] let sideChainTVL = 0 diff --git a/pages/api/getTVLBase.js b/pages/api/getTVLBase.js new file mode 100644 index 00000000..30ee076d --- /dev/null +++ b/pages/api/getTVLBase.js @@ -0,0 +1,59 @@ +import Web3 from 'web3'; +import configs from 'constants/configs'; + +import getPoolsFn from 'pages/api/getPools'; +import { fn } from 'utils/api'; +import erc20Abi from 'constants/abis/erc20.json'; +import aavePool from 'constants/abis/pools/aave.json'; + +const web3 = new Web3(configs.base.rpcUrl); + + +export default fn(async () => { + + + let price_feed = await (await fetch('https://api.coingecko.com/api/v3/simple/price?ids=tether,ethereum,bitcoin&vs_currencies=usd')).json() + + let pools = { + } + let tvl = 0 + for (const [key, pool] of Object.entries(pools)) { + + let poolC = new web3.eth.Contract(aavePool, pool.address); + + let multiplier = (pool.type == 'stable' || pool.type == 'crypto') ? 1 : price_feed[pool.type].usd + + await Promise.all( + pool.decimals.map(async (decimal, index) => { + let balance = await poolC.methods.balances(index).call() + balance = balance / (10 ** decimal) + + if (pool.type == 'crypto') { + multiplier = price_feed[pool.keys[index]].usd + } + + pools[key].tvl += (balance * multiplier) + tvl += (parseFloat(balance) * multiplier) + + }) + ) + + if (pool.type == 'crypto') { + let tokenContract = new web3.eth.Contract(erc20Abi, pool.token); + let supply = await tokenContract.methods.totalSupply().call(); + pools[key].lpPrice = pools[key].tvl / (supply / 10 ** 18) + } + } + + const factoDetails = await getPoolsFn.straightCall({ blockchainId: 'base', registryId: 'factory' }) + tvl += factoDetails.tvlAll + const factory = { + tvl: factoDetails.tvlAll + }; + + return { tvl, pools, factory }; + + +}, { + maxAge: 15 * 60, // 15 min +}); From 0b910eeb8336cda57837f523bf42a1190a4a3a8c Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 10 Aug 2023 18:16:30 +0200 Subject: [PATCH 40/83] Update coin id used as reference --- pages/api/getPools/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 6165018a..08377156 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -72,7 +72,7 @@ const IGNORED_COINS = { // Tokens for which to use Defillama as external price oracle const EXTERNAL_ORACLE_COINS_ADDRESSES = { ethereum: [ - '0x95dfdc8161832e4ff7816ac4b6367ce201538253', // ibKRW (no curve crypto pool to act as oracle) + '0x269895a3df4d73b077fc823dd6da1b95f72aaf9b', // sKRW (no curve crypto pool to act as oracle) '0x5555f75e3d5278082200fb451d1b6ba946d8e13b', // ibJPY (no curve crypto pool to act as oracle) '0xF48e200EAF9906362BB1442fca31e0835773b8B4', // sAUD (no curve crypto pool to act as oracle) '0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F', // sGBP (no curve crypto pool to act as oracle) From 95148afb720bfae54265fdf856c8ead86a089a4b Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 10 Aug 2023 18:30:14 +0200 Subject: [PATCH 41/83] Override USDC.e arbi symbol --- pages/api/getPools/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 08377156..992bc130 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -94,6 +94,7 @@ const CURVE_POOL_SYMBOLS_OVERRIDES = new Map([ ['kava-0xfa9343c3897324496a05fc75abed6bac29f8a40f', 'multiUSDC'], ['kava-0x765277eebeca2e31912c9946eae1021199b39c61', 'multiDAI'], ['kava-0xb44a9b6905af7c801311e8f4e76932ee959c663c', 'multiUSDT'], + ['arbitrum-0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', 'USDC.e'], ]); const overrideSymbol = (coin, blockchainId) => ({ From e8ec8a3ca6c98a0b50f4e4fd23068d4aeef9cd3d Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 13 Aug 2023 19:24:35 +0200 Subject: [PATCH 42/83] Update fallback data --- constants/AppConstants.js | 2 +- .../getSubgraphData-arbitrum.json | 278 +-- .../getSubgraphData-aurora.json | 12 +- .../getSubgraphData-avalanche.json | 268 +-- .../_fallback-data/getSubgraphData-celo.json | 40 +- .../getSubgraphData-ethereum.json | 2100 +++++++++-------- .../getSubgraphData-moonbeam.json | 40 +- .../getSubgraphData-optimism.json | 138 +- .../getSubgraphData-polygon.json | 624 ++--- .../_fallback-data/getSubgraphData-xdai.json | 74 +- utils/Graphql/fallback-data/crvusd-amms.json | 14 +- 11 files changed, 1813 insertions(+), 1777 deletions(-) diff --git a/constants/AppConstants.js b/constants/AppConstants.js index babc186d..38274100 100644 --- a/constants/AppConstants.js +++ b/constants/AppConstants.js @@ -17,7 +17,7 @@ const USE_FALLBACK_THEGRAPH_DATA = false; // place that's querying thegraph will dump its output, prefixed with // "FALLBACK_THEGRAPH_DATA_POPULATE_MODE" and the filename where to store // this data, in order to update that filename easily. -const FALLBACK_THEGRAPH_DATA_POPULATE_MODE = true; +const FALLBACK_THEGRAPH_DATA_POPULATE_MODE = false; module.exports = { IS_DEV, diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-arbitrum.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-arbitrum.json index 1a2376af..872a9975 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-arbitrum.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-arbitrum.json @@ -3,11 +3,11 @@ { "type": "main", "address": "0x7f90122BF0700F9E7e1F688fe926940E8839F353", - "rawVolume": 2030543.1105809999, - "volumeUSD": 2031704.66233897, - "latestDailyApy": 0.8287511963349203, - "latestWeeklyApy": 0.6439571150783863, - "virtualPrice": 1013593546432499300 + "rawVolume": 322562.10899900005, + "volumeUSD": 322652.96846818144, + "latestDailyApy": 0.307605893781715, + "latestWeeklyApy": 0.46146415783647754, + "virtualPrice": 1013660379797876600 }, { "type": "main", @@ -15,62 +15,62 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1001649240475598100 + "latestWeeklyApy": 0.0569716842905299, + "virtualPrice": 1001660211693318400 }, { "type": "crypto", "address": "0x960ea3e3C7FB317332d990873d354E18d7645590", - "rawVolume": 439897.60474238044, - "volumeUSD": 941704.8831076233, - "latestDailyApy": 0.8007386336145839, - "latestWeeklyApy": 0.5581509988462185, - "virtualPrice": 1036464917128788600 + "rawVolume": 193400.0991347071, + "volumeUSD": 485485.55366126524, + "latestDailyApy": 0.3568039138747814, + "latestWeeklyApy": 0.36231861283042566, + "virtualPrice": 1036570397125246700 }, { "type": "stable-factory", "address": "0x30dF229cefa463e991e29D42DB0bae2e122B2AC7", - "rawVolume": 414460.4363410193, - "volumeUSD": 414895.40075340425, - "latestDailyApy": 0.29906108692172584, - "latestWeeklyApy": 2.169858364423427, - "virtualPrice": 1015900306147001700 + "rawVolume": 34432.52609831567, + "volumeUSD": 34359.66221518432, + "latestDailyApy": 0.6478010201746986, + "latestWeeklyApy": 0.45105768531468193, + "virtualPrice": 1015979928507959700 }, { "type": "stable-factory", "address": "0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5", - "rawVolume": 36229.37370986545, - "volumeUSD": 36214.339556465806, - "latestDailyApy": 0.126851913251258, - "latestWeeklyApy": 0.8165544235831934, - "virtualPrice": 1009006688114640500 + "rawVolume": 87833.5093308578, + "volumeUSD": 87795.74301301899, + "latestDailyApy": 1.2011185030723182, + "latestWeeklyApy": 0.7492708176542795, + "virtualPrice": 1009148060689218200 }, { "type": "main", "address": "0x6eB2dc694eB516B16Dc9FBc678C60052BbdD7d80", - "rawVolume": 1.559023790692889, - "volumeUSD": 2854.0893375442765, - "latestDailyApy": 2.0628697088173498, - "latestWeeklyApy": 1.7704628776427533, - "virtualPrice": 1024422978083323500 + "rawVolume": 0.12182967248052358, + "volumeUSD": 225.56299995879803, + "latestDailyApy": 1.9221926402239964, + "latestWeeklyApy": 1.7110422362442756, + "virtualPrice": 1024700047967629800 }, { "type": "stable-factory", "address": "0xE9dcF2d2A17eAD11fab8b198578B20535370Be6a", - "rawVolume": 10.998030542143132, - "volumeUSD": 10.954279159628229, - "latestDailyApy": 1.0824525776492289, - "latestWeeklyApy": 0.830161641082694, - "virtualPrice": 1233290250178020600 + "rawVolume": 1.1348254363977108, + "volumeUSD": 1.1340148409041138, + "latestDailyApy": 0.3342484968001713, + "latestWeeklyApy": 0.3103307067338523, + "virtualPrice": 1233327364443656200 }, { "type": "stable-factory", "address": "0xF92C2A3C91bf869F77f9cB221C5AB1B1ada8a586", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.8437863967553083, - "latestWeeklyApy": 0.4343886167728295, - "virtualPrice": 27799601537426915000 + "rawVolume": 15.755686988642772, + "volumeUSD": 15.758231003915347, + "latestDailyApy": 0.37031517840113715, + "latestWeeklyApy": 0.3393753653144538, + "virtualPrice": 27800772975961180000 }, { "type": "stable-factory", @@ -131,9 +131,9 @@ "address": "0xf07d553B195080F84F582e88ecdD54bAa122b279", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3125881189343316, - "latestWeeklyApy": 0.24303745419207434, - "virtualPrice": 32808742716637135000 + "latestDailyApy": 0.1172174745609933, + "latestWeeklyApy": 0.17782885580692742, + "virtualPrice": 32809583220223685000 }, { "type": "stable-factory", @@ -156,20 +156,20 @@ { "type": "stable-factory", "address": "0xd0DD5D76cF0fC06DaBC48632735566DCa241a35e", - "rawVolume": 469.114845715946, - "volumeUSD": 464.49209571761224, - "latestDailyApy": 0.4438836319140327, - "latestWeeklyApy": 0.44988518625106444, - "virtualPrice": 1015575060358346400 + "rawVolume": 58.17327106290843, + "volumeUSD": 57.624860372461136, + "latestDailyApy": 0.12352970907147931, + "latestWeeklyApy": 0.3951916734186378, + "virtualPrice": 1015639774957184000 }, { "type": "stable-factory", "address": "0x2ce5Fd6f6F4a159987eac99FF5158B7B62189Acf", - "rawVolume": 5886.0871289832085, - "volumeUSD": 5878.594630609188, - "latestDailyApy": 0.9233155395621084, - "latestWeeklyApy": 0.4100129881812409, - "virtualPrice": 1006607509908645900 + "rawVolume": 10836.697930062674, + "volumeUSD": 10780.239620226159, + "latestDailyApy": 0.14777700741077648, + "latestWeeklyApy": 0.31565204935994906, + "virtualPrice": 1006643174785456400 }, { "type": "stable-factory", @@ -201,11 +201,11 @@ { "type": "stable-factory", "address": "0x76b44e0Cf9bD024dbEd09E1785DF295D59770138", - "rawVolume": 7.987943488231708, - "volumeUSD": 7.937067612322553, - "latestDailyApy": 0.49312616812029475, - "latestWeeklyApy": 0.7873542774498254, - "virtualPrice": 1014149108247612400 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.23330498227414065, + "latestWeeklyApy": 0.28236730269943777, + "virtualPrice": 1014190436396551200 }, { "type": "stable-factory", @@ -219,11 +219,11 @@ { "type": "stable-factory", "address": "0x59bF0545FCa0E5Ad48E13DA269faCD2E8C886Ba4", - "rawVolume": 20655.468790067192, - "volumeUSD": 20647.12349848352, - "latestDailyApy": 0.07844479783711833, - "latestWeeklyApy": 0.12173742173720026, - "virtualPrice": 1005234326214976600 + "rawVolume": 38603.419074765174, + "volumeUSD": 38586.93017188215, + "latestDailyApy": 0.01860521010190741, + "latestWeeklyApy": 0.09427241005861564, + "virtualPrice": 1005250382717753600 }, { "type": "stable-factory", @@ -302,18 +302,18 @@ "address": "0xE013593CEA239E445d2271106836b00C9E7356ae", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 4.749699785628514, - "latestWeeklyApy": 4.214916298260873, - "virtualPrice": 1031296596936520800 + "latestDailyApy": 4.118880938128844, + "latestWeeklyApy": 3.664409514234923, + "virtualPrice": 1031879894174952600 }, { "type": "stable-factory", "address": "0x37C9Be6C81990398e9B87494484Afc6a4608C25d", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 4.411582066040576, - "latestWeeklyApy": 4.277241473647053, - "virtualPrice": 1028117383783614500 + "latestDailyApy": 3.891128217485562, + "latestWeeklyApy": 3.517736254857562, + "virtualPrice": 1028679946939629600 }, { "type": "stable-factory", @@ -453,11 +453,11 @@ { "type": "stable-factory", "address": "0xc5536d59D026BE19b4267810f43aC083cD607b64", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.10297536537282603, - "latestWeeklyApy": 0.08008359866169545, - "virtualPrice": 1539904400011552500 + "rawVolume": 0.11229474707226589, + "volumeUSD": 0.11212836700040028, + "latestDailyApy": 0.03831040913151451, + "latestWeeklyApy": 0.0574364321372256, + "virtualPrice": 1539917062123899400 }, { "type": "stable-factory", @@ -563,27 +563,27 @@ "address": "0x2CB445366FbE025569D6883Aa931E79deF202802", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": -100, - "latestWeeklyApy": 1000000, - "virtualPrice": 0 + "latestDailyApy": 0.09894669500747355, + "latestWeeklyApy": 0.14836965079663145, + "virtualPrice": 1002920438944721300 }, { "type": "stable-factory", "address": "0xbb8a6436e0E9A22bb7F1dC76aFB4421D8195620E", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.1611211350150077, - "latestWeeklyApy": 0.12530077074555113, - "virtualPrice": 1002756163698034800 + "latestDailyApy": 0.05992716861777936, + "latestWeeklyApy": 0.08985313810230267, + "virtualPrice": 1002769060492933900 }, { "type": "stable-factory", "address": "0x48E8DCb9fbE51899Df8960415fB11dfb8745C2DB", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.2569004774032768, - "latestWeeklyApy": 0.19976075856742437, - "virtualPrice": 1003968706937117600 + "latestDailyApy": 0.09552367043539345, + "latestWeeklyApy": 0.14323585209770062, + "virtualPrice": 1003989285556210800 }, { "type": "stable-factory", @@ -615,11 +615,11 @@ { "type": "stable-factory", "address": "0x15a1C069Fcf6F79a3D5Bb5d4A8ba004FbF4fABAc", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.0008330224610997305, - "latestWeeklyApy": 0.01772945594871178, - "virtualPrice": 6118457813213390000 + "rawVolume": 1.000142, + "volumeUSD": 0.9998484453370461, + "latestDailyApy": 0, + "latestWeeklyApy": 0.03246063361530549, + "virtualPrice": 6118495861776045000 }, { "type": "stable-factory", @@ -635,9 +635,9 @@ "address": "0x6BF6fc7EaF84174bb7e1610Efd865f0eBD2AA96D", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.4210133399650928, - "latestWeeklyApy": 0.32729563608870915, - "virtualPrice": 1238849172475349200 + "latestDailyApy": 0.15647144449260075, + "latestWeeklyApy": 0.23465253610330805, + "virtualPrice": 1238890754227798300 }, { "type": "stable-factory", @@ -689,36 +689,36 @@ "address": "0x63171ae9A9886e49547dd40aDB70F04EABA39D6b", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.03201220123436599, - "latestWeeklyApy": 0.2055486472889001, - "virtualPrice": 1011790238990379000 + "latestDailyApy": 0.3019325100689363, + "latestWeeklyApy": 0.18867726152616004, + "virtualPrice": 1011826031004682000 }, { "type": "stable-factory", "address": "0x9C907Ee3bC1da92095a81B806Ae8cBA6c597703c", - "rawVolume": 9.962399598126838, - "volumeUSD": 9.952321119906427, - "latestDailyApy": 1.0344934358866409, - "latestWeeklyApy": 0.3392719291967383, - "virtualPrice": 1006901186797482100 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.14039284309370625, + "latestWeeklyApy": 0.3150008859515774, + "virtualPrice": 1006933699006571100 }, { "type": "stable-factory", "address": "0xd92Be5A1c565Db5256cDD537B875ED46111Bd8b0", - "rawVolume": 147.3323265681999, - "volumeUSD": 147.18450150371783, - "latestDailyApy": 0.2814911986419366, - "latestWeeklyApy": 0.22595741167990013, - "virtualPrice": 1006042079455196500 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.10388186357701557, + "latestWeeklyApy": 0.16469654505735232, + "virtualPrice": 1006066170535338200 }, { "type": "stable-factory", "address": "0xaB174fFA530C888649C44C4d21C849BBAaBc723F", - "rawVolume": 74.24241561663356, - "volumeUSD": 74.20495751107558, - "latestDailyApy": 0.02268332102228765, - "latestWeeklyApy": 0.14144242354523495, - "virtualPrice": 1001409568044291800 + "rawVolume": 36.04258077348563, + "volumeUSD": 36.01597392840498, + "latestDailyApy": 0.22065938755004844, + "latestWeeklyApy": 0.14021064644689218, + "virtualPrice": 1001435929533037600 }, { "type": "stable-factory", @@ -779,9 +779,9 @@ "address": "0xd7bB79aeE866672419999a0496D99c54741D67B5", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3068879929845503, - "latestWeeklyApy": 0.23860738534016157, - "virtualPrice": 1001419730833622400 + "latestDailyApy": 0.11409804522817257, + "latestWeeklyApy": 0.17109039777678525, + "virtualPrice": 1001444245839756800 }, { "type": "stable-factory", @@ -806,9 +806,9 @@ "address": "0x5483e0F934f5d3964A2C4d0eC423353cF4a57ba2", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.4138240268865001, - "latestWeeklyApy": 0.32170943364462357, - "virtualPrice": 1000674975070775800 + "latestDailyApy": 0.1538030620306996, + "latestWeeklyApy": 0.23064945713235918, + "virtualPrice": 1000707990187521900 }, { "type": "stable-factory", @@ -833,9 +833,9 @@ "address": "0x7A56266db1CF99F26a3E737ba36C4004a66bD5b3", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.06182295522203507, - "latestWeeklyApy": 0.39727475840329873, - "virtualPrice": 1000896123282944400 + "latestDailyApy": 0.5838172407938602, + "latestWeeklyApy": 0.3646269217131737, + "virtualPrice": 1000964491502946600 }, { "type": "stable-factory", @@ -878,18 +878,18 @@ "address": "0xF0f89e16c2a86fB81675A0A39701A8B688025146", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.4136531787609421, - "latestWeeklyApy": 0.32157679974496034, - "virtualPrice": 1000398389964382300 + "latestDailyApy": 0.15373956642927844, + "latestWeeklyApy": 0.2305542699524432, + "virtualPrice": 1000431382346684000 }, { "type": "stable-factory", "address": "0xae0babD1483ed944BeEd2e112021Ed01301A83aC", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.45653378133874156, - "latestWeeklyApy": 0.33299435736204863, - "virtualPrice": 1000492860989178100 + "latestDailyApy": 0.15368518695544342, + "latestWeeklyApy": 0.23661044212213156, + "virtualPrice": 1000525848800051600 }, { "type": "stable-factory", @@ -921,11 +921,11 @@ { "type": "stable-factory", "address": "0x755D6688AD74661Add2FB29212ef9153D40fcA46", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.030586086216133346, - "latestWeeklyApy": 0.11912591754719148, - "virtualPrice": 1000779765970336800 + "rawVolume": 0.15182790502822496, + "volumeUSD": 4448.055196476845, + "latestDailyApy": 0.5176088594960326, + "latestWeeklyApy": 0.2053837002765624, + "virtualPrice": 1000818416902153100 }, { "type": "stable-factory", @@ -1092,11 +1092,11 @@ { "type": "stable-factory", "address": "0xb34a7d1444a707349Bc7b981B7F2E1f20F81F013", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.06350031647914811, - "latestWeeklyApy": 2.3296294818429653, - "virtualPrice": 1001367351310067100 + "rawVolume": 1821.786759455753, + "volumeUSD": 1821.0084959019573, + "latestDailyApy": 3.1641777935935034, + "latestWeeklyApy": 1.7478417033171878, + "virtualPrice": 1001699451397390700 }, { "type": "stable-factory", @@ -1146,11 +1146,11 @@ { "type": "crypto", "address": "0xA827a652Ead76c6B0b3D19dba05452E06e25c27e", - "rawVolume": 1524.499930244128, - "volumeUSD": 1586.480610954128, - "latestDailyApy": 0.6744695611825335, - "latestWeeklyApy": 0.7292479166341792, - "virtualPrice": 1008476283569247000 + "rawVolume": 4.413369688965756, + "volumeUSD": 4.601034088965756, + "latestDailyApy": 0.06600981433804165, + "latestWeeklyApy": 3.1455509952036387, + "virtualPrice": 1009950002521501600 }, { "type": "crypto-factory", @@ -1161,8 +1161,8 @@ "latestWeeklyApy": 0 } ], - "totalVolume": 3456200.299056679, - "cryptoVolume": 943291.3637185774, - "cryptoShare": 27.29272849076587, + "totalVolume": 986271.9699331429, + "cryptoVolume": 485490.1546953542, + "cryptoShare": 49.22477465604791, "subgraphHasErrors": false } diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-aurora.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-aurora.json index 7a6de9a6..f88a77d2 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-aurora.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-aurora.json @@ -3,14 +3,14 @@ { "type": "main", "address": "0xbF7E49483881C76487b0989CD7d9A8239B20CA41", - "rawVolume": 777.0105287738036, - "volumeUSD": 777.1866322907638, - "latestDailyApy": 0.5196139350562623, - "latestWeeklyApy": 0.29471108784029365, - "virtualPrice": 1028593821776579000 + "rawVolume": 225.9144214413364, + "volumeUSD": 225.86965471401564, + "latestDailyApy": 0.11574770053734973, + "latestWeeklyApy": 0.34071576371919043, + "virtualPrice": 1028646503619680600 } ], - "totalVolume": 777.1866322907638, + "totalVolume": 225.86965471401564, "cryptoVolume": 0, "cryptoShare": 0, "subgraphHasErrors": false diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-avalanche.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-avalanche.json index bde27de9..9a292034 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-avalanche.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-avalanche.json @@ -3,56 +3,56 @@ { "type": "main", "address": "0x7f90122BF0700F9E7e1F688fe926940E8839F353", - "rawVolume": 51362.47726799021, - "volumeUSD": 51362.47726799021, - "latestDailyApy": 2.988700582654902, - "latestWeeklyApy": 3.156779118433106, - "virtualPrice": 1047884204961998700 + "rawVolume": 25348.416524498243, + "volumeUSD": 25348.416524498243, + "latestDailyApy": 2.6814408198741146, + "latestWeeklyApy": 2.596229953807816, + "virtualPrice": 1048316509137357700 }, { "type": "main", "address": "0x16a7DA911A4DD1d83F3fF066fE28F3C792C50d90", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.006905803201973093, - "latestWeeklyApy": 0.0059030092578238325, - "virtualPrice": 1008243787112545500 + "latestDailyApy": 0.005383178357565299, + "latestWeeklyApy": 0.15133547178605156, + "virtualPrice": 1008272918346204000 }, { "type": "stable-factory", "address": "0xAEA2E71b631fA93683BCF256A8689dFa0e094fcD", - "rawVolume": 31009.346650057196, - "volumeUSD": 31009.689929244218, - "latestDailyApy": 0.8768740863140057, - "latestWeeklyApy": 1.3431128887276822, - "virtualPrice": 1109432931051837000 + "rawVolume": 9645.576222493239, + "volumeUSD": 9644.645808097992, + "latestDailyApy": 0.45013705253929004, + "latestWeeklyApy": 0.7786982340092452, + "virtualPrice": 1109571921356467500 }, { "type": "stable-factory", "address": "0x0149123760957395f283AF81fE8c904348aA33FC", - "rawVolume": 35956.835540269145, - "volumeUSD": 35885.097472537345, - "latestDailyApy": 3.87665513449138, - "latestWeeklyApy": 8.568646211309172, - "virtualPrice": 20414451840923197000 + "rawVolume": 8898.798234807715, + "volumeUSD": 8891.428694248803, + "latestDailyApy": 7.837421417416945, + "latestWeeklyApy": 21.038474245255735, + "virtualPrice": 20466317768997327000 }, { "type": "main", "address": "0xD2AcAe14ae2ee0f6557aC6C6D0e407a92C36214b", - "rawVolume": 18.086863739924617, - "volumeUSD": 18.086863739924617, - "latestDailyApy": 8.715071830718667, - "latestWeeklyApy": 9.524107667833892, - "virtualPrice": 1061582878964874900 + "rawVolume": 38.548812851911265, + "volumeUSD": 38.548812851911265, + "latestDailyApy": 8.637869825467725, + "latestWeeklyApy": 7.468190978434164, + "virtualPrice": 1062812988695230600 }, { "type": "stable-factory", "address": "0x30dF229cefa463e991e29D42DB0bae2e122B2AC7", - "rawVolume": 54.339483158664, - "volumeUSD": 53.00481823746911, - "latestDailyApy": 1.5806102394184895, - "latestWeeklyApy": 10483.115307808288, - "virtualPrice": 1178652381302240800 + "rawVolume": 387.791440224285, + "volumeUSD": 378.01058443354736, + "latestDailyApy": 3.6039795142096764, + "latestWeeklyApy": 1.4768312475462952, + "virtualPrice": 1178934163669611300 }, { "type": "stable-factory", @@ -102,20 +102,20 @@ { "type": "stable-factory", "address": "0xb0D2EB3C2cA3c6916FAb8DCbf9d9c165649231AE", - "rawVolume": 1991.491438099142, - "volumeUSD": 1942.0961688943084, - "latestDailyApy": 0.6206159653112664, - "latestWeeklyApy": 0.6487500563674864, - "virtualPrice": 1020774934895520600 + "rawVolume": 1347.2860470256958, + "volumeUSD": 1309.050405269042, + "latestDailyApy": 0.4525681906155432, + "latestWeeklyApy": 0.707213668408424, + "virtualPrice": 1020895997515288600 }, { "type": "stable-factory", "address": "0xF72beaCc6fD334E14a7DDAC25c3ce1Eb8a827E10", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.8375939809594168, - "latestWeeklyApy": 0.8845739487988613, - "virtualPrice": 2755814185605682700 + "latestDailyApy": 0.7509827222000887, + "latestWeeklyApy": 0.7336983530518815, + "virtualPrice": 2756138697154092500 }, { "type": "stable-factory", @@ -282,11 +282,11 @@ { "type": "stable-factory", "address": "0xbcda256079372C6FE5d1b813AB9DeF5C9D78Ab8F", - "rawVolume": 37.74920271952299, - "volumeUSD": 36.78900186750213, - "latestDailyApy": 2.4762127784413224, - "latestWeeklyApy": 1.4593648672009518, - "virtualPrice": 1018844431813110900 + "rawVolume": 99.58573961686426, + "volumeUSD": 96.96433965750657, + "latestDailyApy": 2.7495618738039074, + "latestWeeklyApy": 1.1325984853363558, + "virtualPrice": 1018996877629182500 }, { "type": "stable-factory", @@ -303,35 +303,35 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 1.5351372659819118, - "latestWeeklyApy": 22.720679131893018, - "virtualPrice": 1440674438926828800 + "latestWeeklyApy": 22.624935178948434, + "virtualPrice": 1445411710102967600 }, { "type": "stable-factory", "address": "0x3a43A5851A3e3E0e25A3c1089670269786be1577", - "rawVolume": 7971.349419, - "volumeUSD": 7968.039404661492, - "latestDailyApy": 0.5116461602466815, - "latestWeeklyApy": 1.641860601542522, - "virtualPrice": 1077370233127679600 + "rawVolume": 7518.903489500001, + "volumeUSD": 7515.753617841202, + "latestDailyApy": 0.7828722374696451, + "latestWeeklyApy": 0.9537315819188485, + "virtualPrice": 1077551884641262700 }, { "type": "stable-factory", "address": "0xa852739519fd46387e2163fc0FB0EfaA94Aa83c4", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.7162379173234488, - "latestWeeklyApy": 1.8123898109336345, - "virtualPrice": 1020996843559696400 + "latestDailyApy": 1.5410464770035714, + "latestWeeklyApy": 1.4925184288076654, + "virtualPrice": 1021240239236994200 }, { "type": "stable-factory", "address": "0x943F3B750447AbDd61cdF68AE6c3912cd3bedA04", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 2.736257226567207, - "latestWeeklyApy": 2.890046802546564, - "virtualPrice": 1037207699624482700 + "latestDailyApy": 2.4541434885505975, + "latestWeeklyApy": 2.377339770679976, + "virtualPrice": 1037599917690015400 }, { "type": "stable-factory", @@ -366,8 +366,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0.8039040035388689, - "latestWeeklyApy": 23.297283549937408, - "virtualPrice": 2052251266947011600 + "latestWeeklyApy": 23.196631329529893, + "virtualPrice": 2059154195979689500 }, { "type": "stable-factory", @@ -383,18 +383,18 @@ "address": "0xdC6eBB38Be3FDBA42Ff65da6Aafb9eDE6443DFDB", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.9373133886648732, - "latestWeeklyApy": 0.9898818918220975, - "virtualPrice": 1011573942018109400 + "latestDailyApy": 0, + "latestWeeklyApy": 0.8155689117398612, + "virtualPrice": 1011706131250956500 }, { "type": "stable-factory", "address": "0xb3F21Fc59Bc06209D5fb82c474F21582AEf09a20", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 1.4370392711835267, - "latestWeeklyApy": 1.661650058174935, - "virtualPrice": 1021274989469550800 + "rawVolume": 452.51748235404943, + "volumeUSD": 441.6720553584597, + "latestDailyApy": 1.539987933958531, + "latestWeeklyApy": 1.2817293062581614, + "virtualPrice": 1021485280810474500 }, { "type": "stable-factory", @@ -410,9 +410,9 @@ "address": "0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.7346518808558855, - "latestWeeklyApy": 0.7757311051511895, - "virtualPrice": 1008900059567242500 + "latestDailyApy": 0.6600165278993098, + "latestWeeklyApy": 0.6394084267494993, + "virtualPrice": 1009003510277694800 }, { "type": "stable-factory", @@ -437,18 +437,18 @@ "address": "0x4b043CDd981dBD9a0c229d23b80Cc1EB3c50b05B", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 7.514390140682936, - "latestWeeklyApy": 6.381471060305666, - "virtualPrice": 1108817041096731900 + "latestDailyApy": 7.456888275473927, + "latestWeeklyApy": 6.36317972453333, + "virtualPrice": 1109914465285777700 }, { "type": "stable-factory", "address": "0x3d49594Ed8c108F817512829C102E4059c76a220", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.1507302839911526, - "latestWeeklyApy": 1.2151108051553283, - "virtualPrice": 1013470605551069600 + "latestDailyApy": 1.0336107159160335, + "latestWeeklyApy": 1.0012089836215043, + "virtualPrice": 1013633050115789300 }, { "type": "stable-factory", @@ -509,9 +509,9 @@ "address": "0x7F2d1C7b8911901de7c9785d6E7A7A10d8dEff66", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.293595759508448, - "latestWeeklyApy": 1.365977761221293, - "virtualPrice": 1014521611205043800 + "latestDailyApy": 1.1618602950325796, + "latestWeeklyApy": 1.1253851410719884, + "virtualPrice": 1014704286298875500 }, { "type": "stable-factory", @@ -534,11 +534,11 @@ { "type": "stable-factory", "address": "0xD79138c49c49200a1Afc935171D1bDAd084FDc95", - "rawVolume": 30937.705821000003, - "volumeUSD": 50823.90432664053, - "latestDailyApy": 0.025557893953975785, - "latestWeeklyApy": 0.053546728373898844, - "virtualPrice": 1018470737704180000 + "rawVolume": 190.84608199999997, + "volumeUSD": 13534.855218451286, + "latestDailyApy": 0.018207871011899357, + "latestWeeklyApy": 0.013686089725672979, + "virtualPrice": 1018472705025264500 }, { "type": "stable-factory", @@ -573,7 +573,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.4628653421833828, + "latestWeeklyApy": 0, "virtualPrice": 6813082515988470000 }, { @@ -588,11 +588,11 @@ { "type": "stable-factory", "address": "0xd39016475200ab8957e9C772C949Ef54bDA69111", - "rawVolume": 86.42607563659278, - "volumeUSD": 86.49406822690023, - "latestDailyApy": 1.594602460207173, - "latestWeeklyApy": 2.03228958113002, - "virtualPrice": 1021485491225188600 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.4946723481855884, + "latestWeeklyApy": 1.3947522334703422, + "virtualPrice": 1021713406157587200 }, { "type": "stable-factory", @@ -633,11 +633,11 @@ { "type": "stable-factory", "address": "0x6BF6fc7EaF84174bb7e1610Efd865f0eBD2AA96D", - "rawVolume": 20987.44813283531, - "volumeUSD": 20656.79533713544, - "latestDailyApy": 0.8050109589555543, - "latestWeeklyApy": 0.7747264968011702, - "virtualPrice": 1013522531215146200 + "rawVolume": 8397.288176944085, + "volumeUSD": 8298.510601086462, + "latestDailyApy": 0.6867211915654092, + "latestWeeklyApy": 0.7263536503137713, + "virtualPrice": 1013641354559141000 }, { "type": "stable-factory", @@ -660,11 +660,11 @@ { "type": "stable-factory", "address": "0x1da20Ac34187b2d9c74F729B85acB225D3341b25", - "rawVolume": 63352.577069000006, - "volumeUSD": 63305.15924017529, - "latestDailyApy": 0.2115348107784465, - "latestWeeklyApy": 0.08150762005396661, - "virtualPrice": 1008938032235884400 + "rawVolume": 323917.8310520955, + "volumeUSD": 323703.3642265517, + "latestDailyApy": 0.13982566699171084, + "latestWeeklyApy": 0.18120225808342383, + "virtualPrice": 1008967319018157600 }, { "type": "stable-factory", @@ -734,27 +734,27 @@ "address": "0x6856860ce8913e98A2baC1A922F309D9a16651fA", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 2.1130011216954347, - "latestWeeklyApy": 2.2315236961691687, - "virtualPrice": 1019847105030836900 + "latestDailyApy": 1.8968261039740142, + "latestWeeklyApy": 1.8369245345393193, + "virtualPrice": 1020145846357386000 }, { "type": "stable-factory", "address": "0x90D5233b53436767fecACD1a783D3dA8Cc7395ED", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.07460042055993377, - "latestWeeklyApy": 0.07879324436199653, - "virtualPrice": 1008504569974049200 + "latestDailyApy": 0.06700916886512864, + "latestWeeklyApy": 0.06494701380048706, + "virtualPrice": 1008515101667752000 }, { "type": "stable-factory", "address": "0x39BA6943D7C0F415bce7A8c42A8C601eaD6Ee426", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 2.160167807964064, - "latestWeeklyApy": 2.2813891197698055, - "virtualPrice": 1019398920108960300 + "latestDailyApy": 1.9390597605057236, + "latestWeeklyApy": 1.877827799347731, + "virtualPrice": 1019704120311637400 }, { "type": "stable-factory", @@ -768,11 +768,11 @@ { "type": "stable-factory", "address": "0xd7bB79aeE866672419999a0496D99c54741D67B5", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.8941400186724069, - "virtualPrice": 1012904287254151600 + "rawVolume": 2.1342495, + "volumeUSD": 2.1173933262574685, + "latestDailyApy": 0.4237625364194919, + "latestWeeklyApy": 0.714640911960962, + "virtualPrice": 1013043025096903800 }, { "type": "stable-factory", @@ -921,11 +921,11 @@ { "type": "stable-factory", "address": "0x0974D9d3bc463Fa17497aAFc3a87535553298FbE", - "rawVolume": 1037.865029, - "volumeUSD": 1037.4741262276998, - "latestDailyApy": 0.4922841546360468, - "latestWeeklyApy": 0.18748401293764427, - "virtualPrice": 1001588683004650100 + "rawVolume": 569.335625, + "volumeUSD": 569.1073296233845, + "latestDailyApy": 0.13309598645261378, + "latestWeeklyApy": 0.19546505973715433, + "virtualPrice": 1001612821590416100 }, { "type": "stable-factory", @@ -984,33 +984,33 @@ { "type": "stable-factory", "address": "0x08135fcac68e8ABD7421d1FB3FDF1bcd176e1Ce0", - "rawVolume": 0.24827125844530157, - "volumeUSD": 0.3417952674880711, - "latestDailyApy": 4.326330818708279, - "latestWeeklyApy": 42.669945706742986, - "virtualPrice": 1009178506701836800 + "rawVolume": 39.389758681951214, + "volumeUSD": 41.10104584263409, + "latestDailyApy": 6.495893521004525, + "latestWeeklyApy": 1000000, + "virtualPrice": 1835915881918896400 }, { "type": "crypto", "address": "0xB755B949C126C04e0348DD881a5cF55d424742B2", - "rawVolume": 37241.857894912464, - "volumeUSD": 62961.8732064957, - "latestDailyApy": 1.2680628248835943, - "latestWeeklyApy": 1.4093143313036607, - "virtualPrice": 1031429982171095600 + "rawVolume": 10953.080651230814, + "volumeUSD": 19265.36310003038, + "latestDailyApy": 0.9513877474078614, + "latestWeeklyApy": 1.0312275888413769, + "virtualPrice": 1031426957536458500 }, { "type": "crypto", "address": "0x204f0620E7E7f07B780535711884835977679bba", - "rawVolume": 2110.4324559822016, - "volumeUSD": 1726.9936931242598, - "latestDailyApy": 0.20297151277341996, - "latestWeeklyApy": 0.10457554123075585, - "virtualPrice": 1001260982311236900 + "rawVolume": 757.7779604193726, + "volumeUSD": 417.4337478836129, + "latestDailyApy": 0.05741061349302523, + "latestWeeklyApy": 0.08895551609633401, + "virtualPrice": 1001272868805297700 } ], - "totalVolume": 328874.3167204658, - "cryptoVolume": 64688.86689961996, - "cryptoShare": 19.669783747389353, + "totalVolume": 419496.34350505244, + "cryptoVolume": 19682.796847913993, + "cryptoShare": 4.692006772563664, "subgraphHasErrors": false } diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-celo.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-celo.json index 9939d767..ef3819bc 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-celo.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-celo.json @@ -12,11 +12,11 @@ { "type": "main", "address": "0x32fD7e563c6521Ab4D59CE3277bcfBe3317CFd63", - "rawVolume": 14200.571426105269, - "volumeUSD": 14192.871872008627, - "latestDailyApy": 0.2583077597797079, - "latestWeeklyApy": 1.103695574606034, - "virtualPrice": 1002649605186608900 + "rawVolume": 151.3205281454791, + "volumeUSD": 151.25961709689304, + "latestDailyApy": 0.03610999456928887, + "latestWeeklyApy": 0.21161896224470844, + "virtualPrice": 1002683281550895100 }, { "type": "main", @@ -24,17 +24,17 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 122.47326212745926, - "virtualPrice": 17378027136750615000 + "latestWeeklyApy": 0.010493880779427478, + "virtualPrice": 17378062204813908000 }, { "type": "main", "address": "0x9Be5da31c7A42d7e045189ac1822D1fA5838e635", - "rawVolume": 6721.011078895062, - "volumeUSD": 6717.889468744192, - "latestDailyApy": 5.656443738854833, - "latestWeeklyApy": 3.8630884361038564, - "virtualPrice": 1004140904008910700 + "rawVolume": 14111.256695462997, + "volumeUSD": 14101.865920066075, + "latestDailyApy": 5.347140726448996, + "latestWeeklyApy": 3.4345477363228794, + "virtualPrice": 1004642171723468400 }, { "type": "main", @@ -42,8 +42,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.04758712131596177, - "virtualPrice": 1000680898476842100 + "latestWeeklyApy": 0.03423596999312384, + "virtualPrice": 1000687485737664500 }, { "type": "main", @@ -318,11 +318,11 @@ { "type": "main", "address": "0xf4cab10dC19695AaCe14b7A16d7705b600ad5F73", - "rawVolume": 23809.423923519695, - "volumeUSD": 23799.84101630818, - "latestDailyApy": 0.009314437669183384, - "latestWeeklyApy": 0.16150354362052255, - "virtualPrice": 1000423457885664400 + "rawVolume": 824.446098807467, + "volumeUSD": 824.115762725089, + "latestDailyApy": 0.00201350348516538, + "latestWeeklyApy": 0.009034760846859946, + "virtualPrice": 1000424940714768400 }, { "type": "main", @@ -343,7 +343,7 @@ "virtualPrice": 1000000000000000000 } ], - "totalVolume": 44710.602357061, + "totalVolume": 15077.241299888057, "cryptoVolume": 0, "cryptoShare": 0, "subgraphHasErrors": false diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-ethereum.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-ethereum.json index c3c2bf2e..8791bfc0 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-ethereum.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-ethereum.json @@ -3,74 +3,74 @@ { "type": "main", "address": "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7", - "rawVolume": 146867520.14877743, - "volumeUSD": 146858133.21885195, - "latestDailyApy": 1.6020937866985996, - "latestWeeklyApy": 0.6393800101247793, - "virtualPrice": 1026840870404025300 + "rawVolume": 24668134.919671796, + "volumeUSD": 24666619.100376092, + "latestDailyApy": 0.20231525214045032, + "latestWeeklyApy": 0.680416102084691, + "virtualPrice": 1026930084180834700 }, { "type": "main", "address": "0xDeBF20617708857ebe4F679508E7b7863a8A8EeE", - "rawVolume": 308938.3916985955, - "volumeUSD": 308938.3916985955, - "latestDailyApy": 6.453800195422277, - "latestWeeklyApy": 7.192182701890015, - "virtualPrice": 1120126501088206200 + "rawVolume": 168019.0421545, + "volumeUSD": 168019.0421545, + "latestDailyApy": 5.268931621972905, + "latestWeeklyApy": 5.063525783329714, + "virtualPrice": 1120999937336037000 }, { "type": "main", "address": "0xA96A65c051bF88B4095Ee1f2451C2A9d43F53Ae2", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 1.9091648995247839, - "latestWeeklyApy": 0.681866285123111, - "virtualPrice": 1075732942930917900 + "rawVolume": 3.673136242304941, + "volumeUSD": 6805.787959369423, + "latestDailyApy": 3.9185082933041118, + "latestWeeklyApy": 3.8616126639966266, + "virtualPrice": 1076097474203707000 }, { "type": "main", "address": "0x79a8C46DeA5aDa233ABaFFD40F3A0A2B1e5A4F27", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.2303437636173475, - "latestWeeklyApy": 1.3673269821396605, - "virtualPrice": 21858966583397870 + "latestDailyApy": 1.233314774242511, + "latestWeeklyApy": 1.0527103797105974, + "virtualPrice": 21862637544164910 }, { "type": "main", "address": "0xA2B47E3D5c44877cca798226B7B8118F9BFb7A56", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 5.287646615539332, - "latestWeeklyApy": 3.3689125192412517, - "virtualPrice": 1124712273804368800 + "rawVolume": 4.999981, + "volumeUSD": 4.999981, + "latestDailyApy": 4.004424721463806, + "latestWeeklyApy": 3.152807732671259, + "virtualPrice": 1125225413979983500 }, { "type": "main", "address": "0x0Ce6a5fF5217e38315f87032CF90686C96627CAA", - "rawVolume": 0, - "volumeUSD": 0, + "rawVolume": 30154.800780475456, + "volumeUSD": 33282.155500183435, "latestDailyApy": 0, - "latestWeeklyApy": 0.0008746937909309693, - "virtualPrice": 1005952635274406900 + "latestWeeklyApy": 0.1352763616975894, + "virtualPrice": 1005978788150472700 }, { "type": "main", "address": "0x4CA9b3063Ec5866A4B82E437059D2C43d1be596F", - "rawVolume": 1.009381145, - "volumeUSD": 29455.370874310756, - "latestDailyApy": 0.005563883448767015, - "latestWeeklyApy": 0.03973372492009908, - "virtualPrice": 1011573714321013800 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.46683904279403166, + "latestWeeklyApy": 0.8718001089194516, + "virtualPrice": 1011742461643532000 }, { "type": "main", "address": "0x2dded6Da1BF5DBdF597C45fcFaa3194e53EcfeAF", - "rawVolume": 732.94965732, - "volumeUSD": 8.328783344528464, - "latestDailyApy": 13.736670594468992, - "latestWeeklyApy": 13.116222253473264, - "virtualPrice": 1113259980998622100 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 8.205168044083067, + "latestWeeklyApy": 8.550178149113542, + "virtualPrice": 1114627441429735200 }, { "type": "main", @@ -78,8 +78,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.0007395979780833173, - "virtualPrice": 1002864528036528600 + "latestWeeklyApy": 0.0017244712850361665, + "virtualPrice": 1002864860612880600 }, { "type": "main", @@ -87,8 +87,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.28827095711310147, - "virtualPrice": 75340736332388930 + "latestWeeklyApy": 0.2267183820014118, + "virtualPrice": 75343500008872480 }, { "type": "main", @@ -96,251 +96,251 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.0005505491095014747, - "virtualPrice": 1024784940066115100 + "latestWeeklyApy": 0.0004032357128647135, + "virtualPrice": 1024785019533249900 }, { "type": "main", "address": "0xEB16Ae0052ed37f479f7fe63849198Df1765a733", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 3.8764429310499615, - "latestWeeklyApy": 4.916143281404883, - "virtualPrice": 1097641974811201200 + "latestDailyApy": 4.341636390175907, + "latestWeeklyApy": 3.6290889106094903, + "virtualPrice": 1098280779037439000 }, { "type": "main", "address": "0x7fC77b5c7614E1533320Ea6DDc2Eb61fa00A9714", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.005980154793494563, - "latestWeeklyApy": 0.017301907582956133, - "virtualPrice": 1020048466519858200 + "latestDailyApy": 0.00031602694334775805, + "latestWeeklyApy": 0.01955109282782974, + "virtualPrice": 1020052134250687600 }, { "type": "main", "address": "0xc5424B857f758E906013F3555Dad202e4bdB4567", - "rawVolume": 275.6981460270223, - "volumeUSD": 505298.8830841823, - "latestDailyApy": 0.14243237570736866, - "latestWeeklyApy": 0.12206371738503474, - "virtualPrice": 1018470963578326900 + "rawVolume": 6.49049118475498, + "volumeUSD": 12007.954189786502, + "latestDailyApy": 0.0010007124774835674, + "latestWeeklyApy": 0.0366297654847525, + "virtualPrice": 1018474165111173500 }, { "type": "main", "address": "0xDC24316b9AE028F1497c275EB9192a3Ea0f67022", - "rawVolume": 25277.994756301192, - "volumeUSD": 46361815.6675939, - "latestDailyApy": 2.0494675775561078, - "latestWeeklyApy": 1.7656584803144915, - "virtualPrice": 1077870506784250800 + "rawVolume": 1808.637770896089, + "volumeUSD": 3329264.737867681, + "latestDailyApy": 1.8928272520379874, + "latestWeeklyApy": 1.7472400857277748, + "virtualPrice": 1078169802770130300 }, { "type": "main", "address": "0xA5407eAE9Ba41422680e2e00537571bcC53efBfD", - "rawVolume": 6921181.371819259, - "volumeUSD": 6919767.096470159, - "latestDailyApy": 1.136854803469367, - "latestWeeklyApy": 0.3396969737973654, - "virtualPrice": 1064973612881342700 + "rawVolume": 123664.33091321123, + "volumeUSD": 123664.94100442102, + "latestDailyApy": 0.027590738335958598, + "latestWeeklyApy": 0.32411495878059693, + "virtualPrice": 1065006906488681500 }, { "type": "main", "address": "0x52EA46506B9CC5Ef470C5bf89f17Dc28bB35D85C", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 1.7909366651576608, - "latestWeeklyApy": 1.8160133848532878, - "virtualPrice": 2958801009994086400 + "rawVolume": 10.001744, + "volumeUSD": 10.006796631194327, + "latestDailyApy": 1.3669833596920755, + "latestWeeklyApy": 1.082486325176224, + "virtualPrice": 2959269905044137500 }, { "type": "main", "address": "0x45F783CCE6B7FF23B2ab2D70e416cdb7D6055f51", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 12.460644226966622, - "latestWeeklyApy": 6.785517963337573, - "virtualPrice": 11992792962699596 + "latestDailyApy": 12.756463284880315, + "latestWeeklyApy": 10.732225168887965, + "virtualPrice": 12012508412152894 }, { "type": "main", "address": "0x8038C01A0390a8c547446a0b2c18fc9aEFEcc10c", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.48278445543867843, - "latestWeeklyApy": 0.19332769153370677, - "virtualPrice": 1025222789439724200 + "latestDailyApy": 0.06126739186513852, + "latestWeeklyApy": 0.20571931135953125, + "virtualPrice": 1025249781026184600 }, { "type": "main", "address": "0x4f062658EaAF2C1ccf8C8e36D6824CDf41167956", - "rawVolume": 169766.612082, - "volumeUSD": 167602.21196865826, - "latestDailyApy": 3.662305149687617, - "latestWeeklyApy": 1.2795340457195659, - "virtualPrice": 1038289282520471300 + "rawVolume": 227253.4637965, + "volumeUSD": 224511.35833062534, + "latestDailyApy": 0.8416985256731291, + "latestWeeklyApy": 1.721820118887396, + "virtualPrice": 1038527976602846000 }, { "type": "main", "address": "0x3eF6A01A0f81D6046290f3e2A8c5b843e738E604", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.15451048932124678, - "latestWeeklyApy": 0.06193790339816818, - "virtualPrice": 1055142697887715000 + "latestDailyApy": 0.0196335492792743, + "latestWeeklyApy": 0.06589859899270856, + "virtualPrice": 1055151602165952800 }, { "type": "main", "address": "0xE7a24EF0C5e95Ffb0f6684b813A78F2a3AD7D171", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6706426353569661, - "latestWeeklyApy": 0.26840227242035386, - "virtualPrice": 1013285644126182000 + "latestDailyApy": 0.0850359924139843, + "latestWeeklyApy": 0.28560728978754835, + "virtualPrice": 1013322666985222800 }, { "type": "main", "address": "0x8474DdbE98F5aA3179B3B3F5942D724aFcdec9f6", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.863990161641004, - "latestWeeklyApy": 0.32141973109418576, - "virtualPrice": 1022264376101449000 + "latestDailyApy": 0.25359021658173386, + "latestWeeklyApy": 0.45214101729402767, + "virtualPrice": 1022328977536334100 }, { "type": "main", "address": "0xC18cC39da8b11dA8c3541C598eE022258F9744da", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.5960801207041344, - "latestWeeklyApy": 0.23861407728478223, - "virtualPrice": 1032187381709992200 + "latestDailyApy": 0.07560731730220649, + "latestWeeklyApy": 0.2539104943156012, + "virtualPrice": 1032220914876018400 }, { "type": "main", "address": "0x3E01dD8a5E1fb3481F0F589056b428Fc308AF0Fb", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.0741514605891123, - "latestWeeklyApy": 0.4293666199468804, - "virtualPrice": 2084361265700746200 + "latestDailyApy": 0.13628011796875672, + "latestWeeklyApy": 0.4961271484306806, + "virtualPrice": 2084498651220508400 }, { "type": "main", "address": "0x0f9cb53Ebe405d49A0bbdBD291A65Ff571bC83e1", - "rawVolume": 277.366857436722, - "volumeUSD": 275.3563971207569, - "latestDailyApy": 0.1884538091276644, - "latestWeeklyApy": 0.13685192912797906, - "virtualPrice": 1066668333248525300 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.01848444271232985, + "latestWeeklyApy": 0.06910067561904931, + "virtualPrice": 1066677000944940300 }, { "type": "main", "address": "0x42d7025938bEc20B69cBae5A77421082407f053A", - "rawVolume": 735.1619279407862, - "volumeUSD": 726.0071611586786, - "latestDailyApy": 0.33718631990606873, - "latestWeeklyApy": 0.13557802616859238, - "virtualPrice": 1010983306222412400 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.045238589441520816, + "latestWeeklyApy": 0.15803283038962057, + "virtualPrice": 1011004684115929200 }, { "type": "main", "address": "0x890f4e345B1dAED0367A877a1612f86A1f86985f", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.2468147457620029, - "latestWeeklyApy": 0.11408011481472968, - "virtualPrice": 1068907813191306200 + "latestDailyApy": 0.03135054715122099, + "latestWeeklyApy": 0.10523846666696812, + "virtualPrice": 1068922215984654600 }, { "type": "main", "address": "0x071c661B4DeefB59E2a3DdB20Db036821eeE8F4b", - "rawVolume": 0.072914335, - "volumeUSD": 2074.329998466917, - "latestDailyApy": 0.06914970017670719, - "latestWeeklyApy": 0.3115706746481539, - "virtualPrice": 1023334558788405500 + "rawVolume": 0.12077492, + "volumeUSD": 3508.8760442864937, + "latestDailyApy": 0.00008848550121509646, + "latestWeeklyApy": 0.0989281915111162, + "virtualPrice": 1023352080218952000 }, { "type": "main", "address": "0xd81dA8D904b52208541Bade1bD6595D8a251F8dd", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.0014800487394550643, - "latestWeeklyApy": 0.004281930960470248, - "virtualPrice": 1009113986178807200 + "latestDailyApy": 0.00007821645884309447, + "latestWeeklyApy": 0.004838539202345338, + "virtualPrice": 1009114884207587200 }, { "type": "main", "address": "0x7F55DDe206dbAD629C080068923b36fe9D6bDBeF", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.08628498675276042, - "latestWeeklyApy": 0.039020945624401726, - "virtualPrice": 1012336961052726800 + "latestDailyApy": 0.010883437600139878, + "latestWeeklyApy": 0.030149344865382233, + "virtualPrice": 1012340437583512600 }, { "type": "main", "address": "0xC25099792E9349C7DD09759744ea681C7de2cb66", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.005374503978905487, - "latestWeeklyApy": 0.016959872258004438, - "virtualPrice": 1014608403858369000 + "latestDailyApy": 0.00028402166318830524, + "latestWeeklyApy": 0.017570909778630295, + "virtualPrice": 1014611682563592800 }, { "type": "main", "address": "0xEcd5e75AFb02eFa118AF914515D6521aaBd189F1", - "rawVolume": 55918.80702912893, - "volumeUSD": 55170.69383894955, - "latestDailyApy": 0.9146953006444747, - "latestWeeklyApy": 1.2609245699097382, - "virtualPrice": 1013253279876492900 + "rawVolume": 169571.71161591422, + "volumeUSD": 167318.4219204663, + "latestDailyApy": 0.14903501713769973, + "latestWeeklyApy": 0.5589460275500446, + "virtualPrice": 1013336629055378400 }, { "type": "stable-factory", "address": "0xEd279fDD11cA84bEef15AF5D39BB4d4bEE23F0cA", - "rawVolume": 1990505.894462074, - "volumeUSD": 1964062.8889930346, - "latestDailyApy": 1.5416080034034385, - "latestWeeklyApy": 0.6179810928701679, - "virtualPrice": 1025275378509612400 + "rawVolume": 1101696.5625707835, + "volumeUSD": 1086063.1571624056, + "latestDailyApy": 0.41068803064456816, + "latestWeeklyApy": 0.8479334991770449, + "virtualPrice": 1025398920831755500 }, { "type": "stable-factory", "address": "0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B", - "rawVolume": 314225.50858391414, - "volumeUSD": 310670.7437908164, - "latestDailyApy": 0.6950868790650766, - "latestWeeklyApy": 0.374655591861317, - "virtualPrice": 1011068575633077800 + "rawVolume": 87826.88833036467, + "volumeUSD": 86601.82238654965, + "latestDailyApy": 0.1524532108352572, + "latestWeeklyApy": 0.7339640552650684, + "virtualPrice": 1011191603525191800 }, { "type": "main", "address": "0x4807862AA8b2bF68830e4C8dc86D0e9A998e085a", - "rawVolume": 849933.0022212055, - "volumeUSD": 838650.4634113406, - "latestDailyApy": 1.250577706676026, - "latestWeeklyApy": 1.9816377629207294, - "virtualPrice": 1021192530432490800 + "rawVolume": 1.999792111248046, + "volumeUSD": 1.97389985337561, + "latestDailyApy": 0.1243109127626374, + "latestWeeklyApy": 1.269454057687125, + "virtualPrice": 1021405571543210000 }, { "type": "main", "address": "0xF9440930043eb3997fc70e1339dBb11F341de7A8", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.892135241646109, - "latestWeeklyApy": 1.6092321029003154, - "virtualPrice": 1037839092989410700 + "latestDailyApy": 1.36854451277999, + "latestWeeklyApy": 1.6938759637159073, + "virtualPrice": 1038121181390508800 }, { "type": "stable-factory", "address": "0x43b4FdFD4Ff969587185cDB6f0BD875c5Fc83f8c", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.5388548101716406, - "latestWeeklyApy": 0.20779308129805774, - "virtualPrice": 1012076870270759200 + "rawVolume": 39067.30371279098, + "volumeUSD": 38512.47608748864, + "latestDailyApy": 0.06360009653152421, + "latestWeeklyApy": 0.22577299340187373, + "virtualPrice": 1012105863969111800 }, { "type": "main", @@ -348,26 +348,26 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 3.628939717330648, - "virtualPrice": 1024231379142217000 + "latestWeeklyApy": 0.26531328065271254, + "virtualPrice": 1024283572042846600 }, { "type": "main", "address": "0x618788357D0EBd8A37e763ADab3bc575D54c2C7d", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.6951850092311362, - "latestWeeklyApy": 0.39474746068639543, - "virtualPrice": 978282796171557100 + "rawVolume": 7991.2136129933915, + "volumeUSD": 21236.492783587048, + "latestDailyApy": 0.10633126181260888, + "latestWeeklyApy": 0.34732184840051694, + "virtualPrice": 978329462467234600 }, { "type": "stable-factory", "address": "0x5a6A4D54456819380173272A5E8E9B9904BdF41B", - "rawVolume": 1429165.4895196618, - "volumeUSD": 1409806.424860551, - "latestDailyApy": 0.46998692290241006, - "latestWeeklyApy": 0.9310813757702041, - "virtualPrice": 1011384053261371600 + "rawVolume": 1999.82869245363, + "volumeUSD": 1970.8558386260484, + "latestDailyApy": 0.08206023340646684, + "latestWeeklyApy": 0.19822371225821644, + "virtualPrice": 1011409578361714700 }, { "type": "stable-factory", @@ -384,62 +384,62 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.020851778008390554, - "virtualPrice": 1007534375600997400 + "latestWeeklyApy": 0.0003776248887144007, + "virtualPrice": 1007534448768185700 }, { "type": "main", "address": "0x1005F7406f32a61BD760CfA14aCCd2737913d546", - "rawVolume": 8.164184, - "volumeUSD": 8.162729696738758, - "latestDailyApy": 0.21381156982642757, - "latestWeeklyApy": 0.1870020502553249, + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.03043276011669427, "virtualPrice": 1006799568309908200 }, { "type": "main", "address": "0xDcEF968d416a41Cdac0ED8702fAC8128A64241A2", - "rawVolume": 2180894.406167563, - "volumeUSD": 2180670.4684152897, - "latestDailyApy": 0.04123254285068878, - "latestWeeklyApy": 0.07505587007352599, - "virtualPrice": 1001337338058810000 + "rawVolume": 990189.6257254008, + "volumeUSD": 990088.4711002228, + "latestDailyApy": 0.012312411531723022, + "latestWeeklyApy": 0.020329753325465383, + "virtualPrice": 1001340121540158700 }, { "type": "main", "address": "0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577", - "rawVolume": 1347.2839458920218, - "volumeUSD": 2468430.188299284, - "latestDailyApy": 0.06546133185207914, - "latestWeeklyApy": 0.12994698559232187, - "virtualPrice": 1001267467771013100 + "rawVolume": 397.51402498208404, + "volumeUSD": 735795.0865600811, + "latestDailyApy": 0.01368744300238589, + "latestWeeklyApy": 0.054356886196837984, + "virtualPrice": 1001276136423986600 }, { "type": "main", "address": "0xf253f83AcA21aAbD2A20553AE0BF7F65C755A07F", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.04211775119147276, - "latestWeeklyApy": 0.14132977679759406, - "virtualPrice": 1002159683433236700 + "latestDailyApy": 0.5535433980263793, + "latestWeeklyApy": 0.32372055566174396, + "virtualPrice": 1002220820647232900 }, { "type": "main", "address": "0xaE34574AC03A15cd58A92DC79De7B1A0800F1CE3", - "rawVolume": 743815.8726175368, - "volumeUSD": 743739.6237709124, - "latestDailyApy": 0.051203112160758124, - "latestWeeklyApy": 0.305111272484182, - "virtualPrice": 1000288957359861000 + "rawVolume": 636665.3990688167, + "volumeUSD": 636599.4445251204, + "latestDailyApy": 0.015376652501553068, + "latestWeeklyApy": 0.02250731989068555, + "virtualPrice": 1000291883605943800 }, { "type": "main", "address": "0xBfAb6FA95E0091ed66058ad493189D2cB29385E6", - "rawVolume": 33.833621724558476, - "volumeUSD": 62162.22413401627, - "latestDailyApy": 2.8069496515027437, - "latestWeeklyApy": 3.495303909399672, - "virtualPrice": 1008099227528094600 + "rawVolume": 0.5373065297291459, + "volumeUSD": 993.130339666382, + "latestDailyApy": 5.668817570250595, + "latestWeeklyApy": 2.5274649895232315, + "virtualPrice": 1008506982746947700 }, { "type": "stable-factory", @@ -456,17 +456,17 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1004513099702841500 + "latestWeeklyApy": 0.02630923616389058, + "virtualPrice": 1004518181375340800 }, { "type": "stable-factory", "address": "0x19b080FE1ffA0553469D20Ca36219F17Fcf03859", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.03749763723888133, - "virtualPrice": 1013472471603086600 + "rawVolume": 30253.0410513214, + "volumeUSD": 33104.322005702, + "latestDailyApy": 0.16521929965118698, + "latestWeeklyApy": 0.13212483322946333, + "virtualPrice": 1013498206525258500 }, { "type": "stable-factory", @@ -516,38 +516,38 @@ { "type": "stable-factory", "address": "0x87650D7bbfC3A9F10587d7778206671719d9910D", - "rawVolume": 139359.78853156161, - "volumeUSD": 137548.037534343, - "latestDailyApy": 1.0977850656544774, - "latestWeeklyApy": 0.43707702848483354, - "virtualPrice": 1008359819267009400 + "rawVolume": 3088.712837035307, + "volumeUSD": 3047.601140499799, + "latestDailyApy": 0.09774428308966243, + "latestWeeklyApy": 0.6541912346841983, + "virtualPrice": 1008456121822687600 }, { "type": "stable-factory", "address": "0x6A274dE3e2462c7614702474D64d376729831dCa", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 5.9261400099645645, - "latestWeeklyApy": 7.057370803226259, - "virtualPrice": 1045844527194751000 + "latestDailyApy": 5.514650732663018, + "latestWeeklyApy": 5.299027531335976, + "virtualPrice": 1046719446233244300 }, { "type": "stable-factory", "address": "0x06cb22615BA53E60D67Bf6C341a0fD5E718E1655", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.812209347809989, - "latestWeeklyApy": 0.37473826617160366, - "virtualPrice": 1008371986968898600 + "latestDailyApy": 0.12541232272189617, + "latestWeeklyApy": 0.4804422281697196, + "virtualPrice": 1008442593191292300 }, { "type": "stable-factory", "address": "0xf5A95ccDe486B5fE98852bB02d8eC80a4b9422BD", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.07391548203241616, - "latestWeeklyApy": 0.029636910240804504, - "virtualPrice": 17764104972985127000 + "latestDailyApy": 0.009396184027266052, + "latestWeeklyApy": 0.03153305381573546, + "virtualPrice": 17764176718726818000 }, { "type": "stable-factory", @@ -590,27 +590,27 @@ "address": "0x67d9eAe741944D4402eB0D1cB3bC3a168EC1764c", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3299542779270581, - "latestWeeklyApy": 0.13219106589930085, - "virtualPrice": 1137019040606397000 + "latestDailyApy": 0.04189933244134192, + "latestWeeklyApy": 0.14065848429274386, + "virtualPrice": 1137039514490973700 }, { "type": "stable-factory", "address": "0x9D0464996170c6B9e75eED71c68B99dDEDf279e8", - "rawVolume": 484058.3153271568, - "volumeUSD": 292223.09464639577, - "latestDailyApy": 1.108502417164825, - "latestWeeklyApy": 2.497477311677865, - "virtualPrice": 1026973607602793200 + "rawVolume": 561700.0432609715, + "volumeUSD": 323381.0578706684, + "latestDailyApy": 0.92364491989263, + "latestWeeklyApy": 0.6284961471799022, + "virtualPrice": 1027066345549457200 }, { "type": "stable-factory", "address": "0x5B3b5DF2BF2B6543f78e053bD91C4Bdd820929f1", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.15879704183021648, - "latestWeeklyApy": 0.06365525724141285, - "virtualPrice": 1004588179828596900 + "latestDailyApy": 0.020177980138158524, + "latestWeeklyApy": 0.0677261182118194, + "virtualPrice": 1004596892520404000 }, { "type": "stable-factory", @@ -626,9 +626,9 @@ "address": "0x9f6664205988C3bf4B12B851c075102714869535", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6860518248010594, - "latestWeeklyApy": 0.2745558935225656, - "virtualPrice": 1014386683203763600 + "latestDailyApy": 0.08698441698713477, + "latestWeeklyApy": 0.29215695108566475, + "virtualPrice": 1014424595097552300 }, { "type": "stable-factory", @@ -644,9 +644,9 @@ "address": "0xAA5A67c256e27A5d80712c51971408db3370927D", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6093254876150755, - "latestWeeklyApy": 0.3872746037159702, - "virtualPrice": 1012506103000338000 + "latestDailyApy": 0.7016369304744696, + "latestWeeklyApy": 0.5810255001075681, + "virtualPrice": 1012602074434122400 }, { "type": "stable-factory", @@ -654,8 +654,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1003831308748682600 + "latestWeeklyApy": 0.0014669313180837307, + "virtualPrice": 1003831591929722600 }, { "type": "stable-factory", @@ -663,8 +663,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1004252629396249700 + "latestWeeklyApy": 0.0002873586441021203, + "virtualPrice": 1004252684892458000 }, { "type": "stable-factory", @@ -672,8 +672,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.0007216554856581681, - "virtualPrice": 1003725688493777200 + "latestWeeklyApy": 0.06002176385446756, + "virtualPrice": 1003737270869890000 }, { "type": "stable-factory", @@ -681,8 +681,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.0011012002764321238, - "virtualPrice": 1003488377827266400 + "latestWeeklyApy": 0.0009718139904801859, + "virtualPrice": 1003488565365647100 }, { "type": "stable-factory", @@ -770,9 +770,9 @@ "address": "0xfa65aa60a9D45623c57D383fb4cf8Fb8b854cC4D", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.0003430272925486477, - "latestWeeklyApy": 0.0009924029656049882, - "virtualPrice": 1550089552087420200 + "latestDailyApy": 0.000018128117651450282, + "latestWeeklyApy": 0.0011214023805106166, + "virtualPrice": 1550089871801405200 }, { "type": "stable-factory", @@ -788,54 +788,54 @@ "address": "0xAc5f019a302c4c8caAC0a7F28183ac62E6e80034", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.8009198522083372, - "latestWeeklyApy": 0.3204135080552728, - "virtualPrice": 1003860887904098600 + "latestDailyApy": 0.1014977446517129, + "latestWeeklyApy": 0.3409586911564899, + "virtualPrice": 1003904663349736300 }, { "type": "stable-factory", "address": "0xbcb91E689114B9Cc865AD7871845C95241Df4105", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.8473936196160334, - "latestWeeklyApy": 1.2860368146429435, - "virtualPrice": 1065066324967738900 + "latestDailyApy": 1.2770389176231856, + "latestWeeklyApy": 1.2977874119431743, + "virtualPrice": 1065277099784049200 }, { "type": "stable-factory", "address": "0xC2F5FeA5197a3d92736500Fd7733Fcc7a3bBDf3F", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.539569560520059, - "latestWeeklyApy": 0.21602964121938406, - "virtualPrice": 1003198695128221700 + "latestDailyApy": 0.0684565202113907, + "latestWeeklyApy": 0.22987733444044256, + "virtualPrice": 1003228205060315000 }, { "type": "stable-factory", "address": "0x705DA2596cf6aaA2FEA36f2a59985EC9e8aeC7E2", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.1512633506358005, - "latestWeeklyApy": 0.4600886029073603, - "virtualPrice": 1007503892500045400 + "latestDailyApy": 0.1456663270916092, + "latestWeeklyApy": 0.48958958782947537, + "virtualPrice": 1007566933644334200 }, { "type": "stable-factory", "address": "0x6870F9b4DD5d34C7FC53D0d85D9dBd1aAB339BF7", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.2998791708936688, - "latestWeeklyApy": 0.12015600137815774, - "virtualPrice": 1005923017044172400 + "latestDailyApy": 0.038082686662099796, + "latestWeeklyApy": 0.1278453752104003, + "virtualPrice": 1005939481097708500 }, { "type": "stable-factory", "address": "0x55A8a39bc9694714E2874c1ce77aa1E599461E18", - "rawVolume": 11358.961062117112, - "volumeUSD": 10726.196412867226, - "latestDailyApy": 0.03064240886734293, - "latestWeeklyApy": 0.0043649167524639765, - "virtualPrice": 1011553601970512600 + "rawVolume": 4573.7276652027895, + "volumeUSD": 4412.419074782618, + "latestDailyApy": 0.02509270525949958, + "latestWeeklyApy": 0.01982441096610721, + "virtualPrice": 1011556608953572500 }, { "type": "stable-factory", @@ -867,20 +867,20 @@ { "type": "stable-factory", "address": "0x04c90C198b2eFF55716079bc06d7CCc4aa4d7512", - "rawVolume": 390.5442829078611, - "volumeUSD": 1249.6010016783896, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.38035014570625414, - "virtualPrice": 1003869884289026700 + "latestWeeklyApy": 0.004685054898279084, + "virtualPrice": 1003870788727816100 }, { "type": "stable-factory", "address": "0xCEAF7747579696A2F0bb206a14210e3c9e6fB269", - "rawVolume": 74470.75210313058, - "volumeUSD": 18113.998432727363, - "latestDailyApy": 13.458985708723903, - "latestWeeklyApy": 11.727009737683503, - "virtualPrice": 1059640782178048500 + "rawVolume": 77733.15480190952, + "volumeUSD": 18066.351562920994, + "latestDailyApy": 13.375410130982623, + "latestWeeklyApy": 11.633404105754863, + "virtualPrice": 1061523196669430700 }, { "type": "stable-factory", @@ -915,7 +915,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.005925799115114039, + "latestWeeklyApy": 0, "virtualPrice": 1006714037325754500 }, { @@ -930,20 +930,20 @@ { "type": "stable-factory", "address": "0xc270b3B858c335B6BA5D5b10e2Da8a09976005ad", - "rawVolume": 138688.81959871895, - "volumeUSD": 137275.32901865907, - "latestDailyApy": 8.031179529680399, - "latestWeeklyApy": 2.0513300899065445, - "virtualPrice": 1026864814555313900 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.09328253329825564, + "latestWeeklyApy": 1.527043289649277, + "virtualPrice": 1026946848432267400 }, { "type": "stable-factory", "address": "0xFbdCA68601f835b27790D98bbb8eC7f05FDEaA9B", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.00307569450730405, - "latestWeeklyApy": 0.00889842595959145, - "virtualPrice": 1007509651112059800 + "latestDailyApy": 0.0001584706474710984, + "latestWeeklyApy": 0.023389674752882783, + "virtualPrice": 1007514097508139100 }, { "type": "stable-factory", @@ -993,11 +993,11 @@ { "type": "stable-factory", "address": "0xb9446c4Ef5EBE66268dA6700D26f96273DE3d571", - "rawVolume": 164483.16880207526, - "volumeUSD": 179460.7216981476, - "latestDailyApy": 0.37097292114876, - "latestWeeklyApy": 0.20941003439700623, - "virtualPrice": 1008319342317174100 + "rawVolume": 108131.56942556337, + "volumeUSD": 118198.94878802764, + "latestDailyApy": 0.0003437168771824872, + "latestWeeklyApy": 0.3241171253431707, + "virtualPrice": 1008371865486257500 }, { "type": "stable-factory", @@ -1011,11 +1011,11 @@ { "type": "stable-factory", "address": "0x1033812EFeC8716BBaE0c19e5678698D25E26eDf", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.20601494738843318, - "latestWeeklyApy": 0.46187011967584457, - "virtualPrice": 1036610965009658900 + "rawVolume": 21042.68954299639, + "volumeUSD": 20974.021699083747, + "latestDailyApy": 0.45594038874925413, + "latestWeeklyApy": 0.17497265728605438, + "virtualPrice": 1036639971734447500 }, { "type": "stable-factory", @@ -1031,9 +1031,9 @@ "address": "0x6d8fF88973b15dF3e2dc6ABb9aF29Cad8C2B5Ef5", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.1524882790116866, - "latestWeeklyApy": 0.06112477095252533, - "virtualPrice": 1002125175780236500 + "latestDailyApy": 0.019379202946301355, + "latestWeeklyApy": 0.06503988103963021, + "virtualPrice": 1002133522697015300 }, { "type": "stable-factory", @@ -1049,9 +1049,9 @@ "address": "0x3b22B869ba3c0a495Cead0B8A009b70886d37fAC", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6925633145257404, - "latestWeeklyApy": 0.2771562908632452, - "virtualPrice": 1003247685093461600 + "latestDailyApy": 0.08780749800634258, + "latestWeeklyApy": 0.2949242136640162, + "virtualPrice": 1003285535329882600 }, { "type": "stable-factory", @@ -1086,7 +1086,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.08534011706549105, + "latestWeeklyApy": 0, "virtualPrice": 1010216431932291600 }, { @@ -1094,18 +1094,18 @@ "address": "0x76264772707c8Bc24261516b560cBF3Cbe6F7819", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.8336545152067165, - "latestWeeklyApy": 0.38216717568013703, - "virtualPrice": 1004128264903975700 + "latestDailyApy": 0.10563084657808641, + "latestWeeklyApy": 0.3548597353133287, + "virtualPrice": 1004173834210798600 }, { "type": "stable-factory", "address": "0xB37D6c07482Bc11cd28a1f11f1a6ad7b66Dec933", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.2489928256486973, - "virtualPrice": 1012608556023488900 + "rawVolume": 18887.55942250765, + "volumeUSD": 20287.142845960836, + "latestDailyApy": 0.3794536168227447, + "latestWeeklyApy": 0.13274889381453825, + "virtualPrice": 1012634390381770800 }, { "type": "stable-factory", @@ -1121,27 +1121,27 @@ "address": "0x8ed10E4e307822b969BCDaffD49095235f6F892b", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.41805252817317395, - "latestWeeklyApy": 0.16744463028515177, - "virtualPrice": 1001282315219055100 + "latestDailyApy": 0.053063147663734433, + "latestWeeklyApy": 0.17816417658882422, + "virtualPrice": 1001305148129025300 }, { "type": "stable-factory", "address": "0x3a70DfA7d2262988064A2D051dd47521E43c9BdD", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.43304260465553135, - "latestWeeklyApy": 0.17344061291053592, - "virtualPrice": 19759501891942720000 + "latestDailyApy": 0.05496233481012691, + "latestWeeklyApy": 0.18454458794145978, + "virtualPrice": 19759968603611927000 }, { "type": "stable-factory", "address": "0x7abD51BbA7f9F6Ae87aC77e1eA1C5783adA56e5c", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.4725269812031474, - "latestWeeklyApy": 0.18923159373860354, - "virtualPrice": 1003956852648218400 + "latestDailyApy": 0.059963685534669686, + "latestWeeklyApy": 0.20134813762389125, + "virtualPrice": 1003982722849669400 }, { "type": "stable-factory", @@ -1157,9 +1157,9 @@ "address": "0x0FaFaFD3C393ead5F5129cFC7e0E12367088c473", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.8625062570569497, - "latestWeeklyApy": 0.3449872662538489, - "virtualPrice": 1004044590373403000 + "latestDailyApy": 0.10927272505414365, + "latestWeeklyApy": 0.3671096693218301, + "virtualPrice": 1004091726077532200 }, { "type": "stable-factory", @@ -1200,11 +1200,11 @@ { "type": "stable-factory", "address": "0x447Ddd4960d9fdBF6af9a790560d0AF76795CB08", - "rawVolume": 82.69396458056676, - "volumeUSD": 151770.86089508154, - "latestDailyApy": 3.4945247478723642, - "latestWeeklyApy": 3.5743943084299747, - "virtualPrice": 1003261669987713200 + "rawVolume": 3.1540481828348637, + "volumeUSD": 5833.810600873363, + "latestDailyApy": 3.647560254229893, + "latestWeeklyApy": 3.815249970823093, + "virtualPrice": 1003294987094974100 }, { "type": "stable-factory", @@ -1293,26 +1293,26 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 1000000, + "latestWeeklyApy": 0, "virtualPrice": 0 }, { "type": "stable-factory", "address": "0x8c524635d52bd7b1Bd55E062303177a7d916C046", - "rawVolume": 163.3495317457452, - "volumeUSD": 1012.9782575840244, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.17540113970202498, - "virtualPrice": 1001875667045135100 + "latestWeeklyApy": 0.01857876707533901, + "virtualPrice": 1001879246273119200 }, { "type": "stable-factory", "address": "0x48fF31bBbD8Ab553Ebe7cBD84e1eA3dBa8f54957", - "rawVolume": 30355.508037477943, - "volumeUSD": 852.4895106118641, - "latestDailyApy": 0.020347466494707867, - "latestWeeklyApy": 0.027453836872415316, - "virtualPrice": 1002193723540072100 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.23013946727068468, + "latestWeeklyApy": 0.03849937231521494, + "virtualPrice": 1002200583526755600 }, { "type": "stable-factory", @@ -1346,9 +1346,9 @@ "address": "0xE95E4c2dAC312F31Dc605533D5A4d0aF42579308", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.8590720681731954, - "latestWeeklyApy": 1.6358922483890481, - "virtualPrice": 1031703069236031400 + "latestDailyApy": 1.8391218879472815, + "latestWeeklyApy": 1.6239724232025798, + "virtualPrice": 1031970752327582600 }, { "type": "stable-factory", @@ -1364,9 +1364,9 @@ "address": "0xDB8Cc7eCeD700A4bfFdE98013760Ff31FF9408D8", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.1859467007856672, - "latestWeeklyApy": 0.47389405768454296, - "virtualPrice": 1006001209643948700 + "latestDailyApy": 0.15003669625637261, + "latestWeeklyApy": 0.504294187611154, + "virtualPrice": 1006066043244177200 }, { "type": "stable-factory", @@ -1380,11 +1380,11 @@ { "type": "stable-factory", "address": "0xf7b55C3732aD8b2c2dA7c24f30A69f55c54FB717", - "rawVolume": 67276.43588700292, - "volumeUSD": 41026.60919804068, - "latestDailyApy": 0.45959640151729264, - "latestWeeklyApy": 0.912503415422039, - "virtualPrice": 1003763940742073100 + "rawVolume": 8797.337000234853, + "volumeUSD": 5133.470024121064, + "latestDailyApy": 0, + "latestWeeklyApy": 0.2371461110832529, + "virtualPrice": 1003797055733031200 }, { "type": "stable-factory", @@ -1418,9 +1418,9 @@ "address": "0x8EE017541375F6Bcd802ba119bdDC94dad6911A1", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.8111297549848517, - "latestWeeklyApy": 0.48810542229813514, - "virtualPrice": 1005271105897704100 + "latestDailyApy": 0.10278652950148626, + "latestWeeklyApy": 0.3452940745366062, + "virtualPrice": 1005315499280146800 }, { "type": "stable-factory", @@ -1443,20 +1443,20 @@ { "type": "stable-factory", "address": "0xe6b5CC1B4b47305c58392CE3D359B10282FC36Ea", - "rawVolume": 15202.709963710702, - "volumeUSD": 15198.484050919007, - "latestDailyApy": 0.8218971231585215, - "latestWeeklyApy": 0.3314132272749237, - "virtualPrice": 1006961329049177500 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.09539226552903735, + "latestWeeklyApy": 0.3825718258067434, + "virtualPrice": 1007012696288881800 }, { "type": "stable-factory", "address": "0x828b154032950C8ff7CF8085D841723Db2696056", - "rawVolume": 1166.83545757413, - "volumeUSD": 2126061.851822132, - "latestDailyApy": 4.727019407337685, - "latestWeeklyApy": 3.1482794572605943, - "virtualPrice": 1051336364092121500 + "rawVolume": 27.994632168993743, + "volumeUSD": 51788.374980645305, + "latestDailyApy": 2.2345705311545006, + "latestWeeklyApy": 2.4845373968958917, + "virtualPrice": 1051699810680654800 }, { "type": "stable-factory", @@ -1508,9 +1508,9 @@ "address": "0x5c6A6Cf9Ae657A73b98454D17986AF41fC7b44ee", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3399071633432893, - "latestWeeklyApy": 0.1361726098226379, - "virtualPrice": 1003670379245294000 + "latestDailyApy": 5.399754109549182, + "latestWeeklyApy": 0.9732426060397037, + "virtualPrice": 1003848039706647400 }, { "type": "stable-factory", @@ -1551,29 +1551,29 @@ { "type": "stable-factory", "address": "0xeE98d56f60A5905CbB52348c8719B247DaFe60ec", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1034155266965082600 + "rawVolume": 290861.99225065054, + "volumeUSD": 212.23032238794397, + "latestDailyApy": 2.853580488397789, + "latestWeeklyApy": 0.40161853210585186, + "virtualPrice": 1034234988511956500 }, { "type": "stable-factory", "address": "0x8116E7c29f60FdacF3954891A038f845565EF5A0", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3649925687779998, - "latestWeeklyApy": 0.1462164361723861, - "virtualPrice": 1053852262849792100 + "latestDailyApy": 0.046338625253428134, + "latestWeeklyApy": 0.15557505085181944, + "virtualPrice": 1053873249823381100 }, { "type": "stable-factory", "address": "0xdE495223F7cD7EE0cDe1AddbD6836046bBdf3ad3", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.0270100655776373, - "latestWeeklyApy": 0.010831582684844854, - "virtualPrice": 1003097120176829700 + "latestDailyApy": 0.003434107990818447, + "latestWeeklyApy": 0.011524164917608992, + "virtualPrice": 1003098600910676600 }, { "type": "stable-factory", @@ -1598,54 +1598,54 @@ "address": "0x63594B2011a0F2616586Bf3EeF8096d42272F916", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6961989028476223, - "latestWeeklyApy": 1.5668426020368997, - "virtualPrice": 1038904907648483600 + "latestDailyApy": 0.08826754436059847, + "latestWeeklyApy": 0.2964699319411901, + "virtualPrice": 1038944308333905900 }, { "type": "stable-factory", "address": "0x67C7f0a63BA70a2dAc69477B716551FC921aed00", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.1486619037937018, - "latestWeeklyApy": 0.459048114452032, - "virtualPrice": 1003263825504441600 + "latestDailyApy": 0.1453426089520038, + "latestWeeklyApy": 0.48849225370490856, + "virtualPrice": 1003326461300598000 }, { "type": "stable-factory", "address": "0x4606326b4Db89373F5377C316d3b0F6e55Bc6A20", - "rawVolume": 379.7290645, - "volumeUSD": 379.4622842123457, - "latestDailyApy": 0.020614438752342146, - "latestWeeklyApy": 0.06747000948201798, - "virtualPrice": 1003999505009202200 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.006139436642582652, + "latestWeeklyApy": 0.01195352651415238, + "virtualPrice": 1004001245847525000 }, { "type": "stable-factory", "address": "0xe3c190c57b5959Ae62EfE3B6797058B76bA2f5eF", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.02484778727829262, - "latestWeeklyApy": 1.803739596402787, - "virtualPrice": 1006094833624697500 + "latestDailyApy": 0.007565238637496918, + "latestWeeklyApy": 0.31099786992851985, + "virtualPrice": 1006154232565633400 }, { "type": "stable-factory", "address": "0x497CE58F34605B9944E6b15EcafE6b001206fd25", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.09410358653583195, - "latestWeeklyApy": 0.2427506114567768, - "virtualPrice": 1004604209661458300 + "latestDailyApy": 0.0036062329192398934, + "latestWeeklyApy": 0.15972293171906404, + "virtualPrice": 1004632454925950300 }, { "type": "stable-factory", "address": "0x04b727C7e246CA70d496ecF52E6b6280f3c8077D", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.019807130931015493, - "latestWeeklyApy": 0.036052031048883215, - "virtualPrice": 1002770246109174900 + "latestDailyApy": 0.005915043074744553, + "latestWeeklyApy": 0.009766486062079416, + "virtualPrice": 1002771585284491500 }, { "type": "stable-factory", @@ -1659,20 +1659,20 @@ { "type": "stable-factory", "address": "0x4e43151b78b5fbb16298C1161fcbF7531d5F8D93", - "rawVolume": 1465.561773891251, - "volumeUSD": 1465.9279190747402, - "latestDailyApy": 0.030439900535350617, - "latestWeeklyApy": 0.05540761363893587, - "virtualPrice": 1003985689913589500 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.009392532939322962, + "latestWeeklyApy": 0.04159466881323848, + "virtualPrice": 1003992882023613200 }, { "type": "stable-factory", "address": "0x8fdb0bB9365a46B145Db80D0B1C5C5e979C84190", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.02725817308046885, - "latestWeeklyApy": 1.0817735850848331, - "virtualPrice": 1005263600234690000 + "latestDailyApy": 0.008139945413976335, + "latestWeeklyApy": 0.01344017403777098, + "virtualPrice": 1005265447694108700 }, { "type": "stable-factory", @@ -1695,20 +1695,20 @@ { "type": "stable-factory", "address": "0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893", - "rawVolume": 5513.627631216639, - "volumeUSD": 5507.300091474308, - "latestDailyApy": 2.3726433603072694, - "latestWeeklyApy": 1.383688003785144, - "virtualPrice": 1006396874009066500 + "rawVolume": 4670.317276559186, + "volumeUSD": 4665.642871100708, + "latestDailyApy": 0.11060785847685217, + "latestWeeklyApy": 0.4327769496875966, + "virtualPrice": 1006415803407977200 }, { "type": "stable-factory", "address": "0xe7A3b38c39F97E977723bd1239C3470702568e7B", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3964545787833895, - "latestWeeklyApy": 0.2696538627533718, - "virtualPrice": 1002981906002688600 + "latestDailyApy": 0, + "latestWeeklyApy": 0.05848390940108583, + "virtualPrice": 1002982310655330300 }, { "type": "stable-factory", @@ -1722,11 +1722,11 @@ { "type": "stable-factory", "address": "0xB30dA2376F63De30b42dC055C93fa474F31330A5", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.028405361491268266, - "latestWeeklyApy": 0.031158668828168423, - "virtualPrice": 1002007318410261400 + "rawVolume": 39059.975883176834, + "volumeUSD": 39044.38079498388, + "latestDailyApy": 0.003997831122770634, + "latestWeeklyApy": 0.009276379940503787, + "virtualPrice": 1002008326150662100 }, { "type": "stable-factory", @@ -1769,9 +1769,9 @@ "address": "0xc9C32cd16Bf7eFB85Ff14e0c8603cc90F6F2eE49", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.7978707552143804, - "latestWeeklyApy": 0.33041295641367263, - "virtualPrice": 1002583596538224500 + "latestDailyApy": 0.10110726450129892, + "latestWeeklyApy": 0.3448886134875151, + "virtualPrice": 1002628154627158500 }, { "type": "stable-factory", @@ -1814,18 +1814,18 @@ "address": "0x0AaCe9b6c491d5cD9F80665A2fCc1af09e9CCf00", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.002679278316408684, - "latestWeeklyApy": 0.004876382074225916, - "virtualPrice": 1000320963626863100 + "latestDailyApy": 0.0008001666148338415, + "latestWeeklyApy": 0.001321156379119337, + "virtualPrice": 1000321144347884300 }, { "type": "stable-factory", "address": "0x92Da88e2e6f96cC7c667Cd1367BD090ADF3c6053", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.7713820285793371, - "latestWeeklyApy": 0.3086248552427451, - "virtualPrice": 1002331380925017700 + "latestDailyApy": 0.0977667704767482, + "latestWeeklyApy": 0.32841223354782567, + "virtualPrice": 1002373483771493500 }, { "type": "stable-factory", @@ -1850,9 +1850,9 @@ "address": "0xc5481720517e1B170CF1d19cEaaBE07c37896Eb2", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.0652989570531846, - "latestWeeklyApy": 0.4258467807506605, - "virtualPrice": 1003205753405913200 + "latestDailyApy": 0.13484084662731544, + "latestWeeklyApy": 0.4531470354435907, + "virtualPrice": 1003263863237430800 }, { "type": "stable-factory", @@ -1875,19 +1875,19 @@ { "type": "stable-factory", "address": "0xBa3436Fd341F2C8A928452Db3C5A3670d1d5Cc73", - "rawVolume": 127345.38894187109, - "volumeUSD": 138986.84053860558, - "latestDailyApy": 0.34067662575028024, - "latestWeeklyApy": 0.21429898947322723, - "virtualPrice": 1005284290668104700 + "rawVolume": 355776.63310869597, + "volumeUSD": 389936.347398694, + "latestDailyApy": 0.5859499097321974, + "latestWeeklyApy": 0.3247070535099539, + "virtualPrice": 1005337600947267800 }, { "type": "stable-factory", "address": "0x6e8d2b6Fb24117c675C2fABC524f28CC5D81f18a", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.17420128501774307, - "latestWeeklyApy": 0.17420128501774307, + "latestDailyApy": 0.16922597446048274, + "latestWeeklyApy": 0.16922597446048274, "virtualPrice": 1113823422658835600 }, { @@ -1967,27 +1967,27 @@ "address": "0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.020994200897761495, - "latestWeeklyApy": 0.29441471342588343, - "virtualPrice": 1002819258277320700 + "latestDailyApy": 0.006269512649015319, + "latestWeeklyApy": 0.010351772353511812, + "virtualPrice": 1002820677772161900 }, { "type": "stable-factory", "address": "0x66E335622ad7a6C9c72c98dbfCCE684996a20Ef9", - "rawVolume": 60099.878379014204, - "volumeUSD": 60394.13802506554, - "latestDailyApy": 0.5415061220583217, - "latestWeeklyApy": 0.20024601494157412, - "virtualPrice": 1010600547650518300 + "rawVolume": 6626.824977, + "volumeUSD": 6618.581888828947, + "latestDailyApy": 0.0009134563272450436, + "latestWeeklyApy": 0.12430016456519422, + "virtualPrice": 1010609737936306200 }, { "type": "stable-factory", "address": "0xE57180685E3348589E9521aa53Af0BCD497E884d", - "rawVolume": 194509.9060424579, - "volumeUSD": 194527.2962480884, - "latestDailyApy": 0.6379475873097951, - "latestWeeklyApy": 0.29212853116289406, - "virtualPrice": 1003722571405838600 + "rawVolume": 31242.062031774272, + "volumeUSD": 31215.193074753148, + "latestDailyApy": 0.1367325544604281, + "latestWeeklyApy": 0.40497442599163325, + "virtualPrice": 1003783103689120100 }, { "type": "stable-factory", @@ -1995,8 +1995,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.041494251325624454, - "virtualPrice": 1001228625601889400 + "latestWeeklyApy": 0.06014615573548543, + "virtualPrice": 1001240203100788600 }, { "type": "stable-factory", @@ -2127,11 +2127,11 @@ { "type": "stable-factory", "address": "0x453D92C7d4263201C69aACfaf589Ed14202d83a4", - "rawVolume": 58571.024568605615, - "volumeUSD": 35515.23495401438, - "latestDailyApy": 2.598703306599548, - "latestWeeklyApy": 2.915405795967252, - "virtualPrice": 1022239152486818400 + "rawVolume": 6664.317958179683, + "volumeUSD": 3856.5622119024347, + "latestDailyApy": 2.2286177239736027, + "latestWeeklyApy": 1.598707000924171, + "virtualPrice": 1022479219872035000 }, { "type": "stable-factory", @@ -2280,11 +2280,11 @@ { "type": "stable-factory", "address": "0xF9078Fb962A7D13F55d40d49C8AA6472aBD1A5a6", - "rawVolume": 19060.436782207307, - "volumeUSD": 61523.434131784146, - "latestDailyApy": 0.09487589917021033, - "latestWeeklyApy": 0.0703971844354001, - "virtualPrice": 1001898860605031400 + "rawVolume": 2178.4131688044963, + "volumeUSD": 6816.92736388958, + "latestDailyApy": 0.04343302722928932, + "latestWeeklyApy": 0.0946011300760663, + "virtualPrice": 1001914476471172700 }, { "type": "stable-factory", @@ -2318,9 +2318,9 @@ "address": "0xC0Ec468c1B6B94a107B0A83c7a0f6529B388f43A", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.7996718601680719, - "latestWeeklyApy": 0.3199155418945665, - "virtualPrice": 1002319032982380500 + "latestDailyApy": 0.1013400693632649, + "latestWeeklyApy": 0.3404285583585631, + "virtualPrice": 1002362673336624300 }, { "type": "stable-factory", @@ -2363,9 +2363,9 @@ "address": "0xbeDca4252b27cc12ed7DaF393F331886F86cd3CE", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.16583066136939273, - "latestWeeklyApy": 0.0664699756059095, - "virtualPrice": 1013574551456527900 + "latestDailyApy": 0.021073915245617414, + "latestWeeklyApy": 0.07072836023986895, + "virtualPrice": 1013583731890745200 }, { "type": "stable-factory", @@ -2381,9 +2381,9 @@ "address": "0x8D35ECe39566d65d06c9207C571934DD3C3a3916", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6720921357044496, - "latestWeeklyApy": 0.2689800520061514, - "virtualPrice": 1002171163489513600 + "latestDailyApy": 0.08522021882895192, + "latestWeeklyApy": 0.28622470968842073, + "virtualPrice": 1002207859389850600 }, { "type": "stable-factory", @@ -2406,11 +2406,11 @@ { "type": "stable-factory", "address": "0x326290A1B0004eeE78fa6ED4F1d8f4b2523ab669", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.1849535691643256, - "latestWeeklyApy": 0.07900763802530797, - "virtualPrice": 1001418477456879000 + "rawVolume": 116462.86918391501, + "volumeUSD": 116243.4037046636, + "latestDailyApy": 0.1379732101113973, + "latestWeeklyApy": 0.07286883962041024, + "virtualPrice": 1001427435976968000 }, { "type": "stable-factory", @@ -2462,9 +2462,9 @@ "address": "0xA77d09743F77052950C4eb4e6547E9665299BecD", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.45749838865980497, - "latestWeeklyApy": 0.18322166157849207, - "virtualPrice": 1007110336149471900 + "latestDailyApy": 0.05806026651031804, + "latestWeeklyApy": 0.19495280745638333, + "virtualPrice": 1007135464079669000 }, { "type": "stable-factory", @@ -2478,11 +2478,11 @@ { "type": "stable-factory", "address": "0x413928a25D6ea1A26F2625d633207755f67Bf97c", - "rawVolume": 8899.93569699966, - "volumeUSD": 9732.818911549795, - "latestDailyApy": 0.24395765264180191, - "latestWeeklyApy": 1.1661546932054234, - "virtualPrice": 1003948340490713300 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.10262333383530553, + "latestWeeklyApy": 2.3545985901743727, + "virtualPrice": 1004391263234181900 }, { "type": "stable-factory", @@ -2500,7 +2500,7 @@ "volumeUSD": 0, "latestDailyApy": 0, "latestWeeklyApy": 0, - "virtualPrice": 4.1400628018065994e+22 + "virtualPrice": 0 }, { "type": "stable-factory", @@ -2517,7 +2517,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.1486099694629761, + "latestWeeklyApy": 0, "virtualPrice": 1000938285147440600 }, { @@ -2534,9 +2534,9 @@ "address": "0x84C333e94AEA4a51a21F6cf0C7F528C50Dc7592C", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.02570668561896472, - "latestWeeklyApy": 0.2535940780832302, - "virtualPrice": 1001276870512001800 + "latestDailyApy": 0.005005036618821457, + "latestWeeklyApy": 0.01016520751466743, + "virtualPrice": 1001278122659397600 }, { "type": "stable-factory", @@ -2553,8 +2553,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1000424027057385300 + "latestWeeklyApy": 0.03795953881013947, + "virtualPrice": 1000431328758249200 }, { "type": "stable-factory", @@ -2570,9 +2570,9 @@ "address": "0x1c899dED01954d0959E034b62a728e7fEbE593b0", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.029502953362836593, - "latestWeeklyApy": 2.4520445969303806, - "virtualPrice": 1015536803380249200 + "latestDailyApy": 4.947112208618942, + "latestWeeklyApy": 2.0888345661765673, + "virtualPrice": 1015939961113777700 }, { "type": "stable-factory", @@ -2598,7 +2598,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.007790054691136916, + "latestWeeklyApy": 0, "virtualPrice": 1000889813896436400 }, { @@ -2606,9 +2606,9 @@ "address": "0x2863a328A0B7fC6040f11614FA0728587DB8e353", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.003397284331407846, - "latestWeeklyApy": 0.06313322264559496, - "virtualPrice": 1004245846955392400 + "latestDailyApy": 0.038772086136007466, + "latestWeeklyApy": 0.2165230766865589, + "virtualPrice": 1004287526728916000 }, { "type": "stable-factory", @@ -2622,11 +2622,11 @@ { "type": "stable-factory", "address": "0xF95AAa7EBB1620e46221B73588502960Ef63dBa0", - "rawVolume": 57.61981407899611, - "volumeUSD": 57.52251302006976, - "latestDailyApy": 0.2281285806516875, - "latestWeeklyApy": 0.515723079634478, - "virtualPrice": 1000870537500380700 + "rawVolume": 34.331899064167295, + "volumeUSD": 34.243847516231284, + "latestDailyApy": 2.544170308072724, + "latestWeeklyApy": 1.5207140225145244, + "virtualPrice": 1001154910151658600 }, { "type": "stable-factory", @@ -2651,18 +2651,18 @@ "address": "0x23afFc32cBe3c1a2a79376361A2D6f51CA7C9005", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.0664121173662222, - "latestWeeklyApy": 0.4262885446689513, - "virtualPrice": 3.81266704197167e+21 + "latestDailyApy": 0.13498023242497492, + "latestWeeklyApy": 0.45361856261114664, + "virtualPrice": 3.812888116623265e+21 }, { "type": "stable-factory", "address": "0xc3b19502F8c02be75F3f77fd673503520DEB51dD", - "rawVolume": 3117.468286, - "volumeUSD": 3112.4437495749708, - "latestDailyApy": 0.020209674399729316, - "latestWeeklyApy": 0.5614638026169239, - "virtualPrice": 1001341969428900400 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.008691476870192894, + "latestWeeklyApy": 0.014025029245368081, + "virtualPrice": 1001344115612846800 }, { "type": "stable-factory", @@ -2670,17 +2670,17 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 8.786965568885167e+34 + "latestWeeklyApy": 1000000, + "virtualPrice": 0 }, { "type": "stable-factory", "address": "0xB657B895B265C38c53FFF00166cF7F6A3C70587d", - "rawVolume": 0.33634745114764103, - "volumeUSD": 619.1137481397262, - "latestDailyApy": 0.07703224341402137, - "latestWeeklyApy": 2.8454338119836553, - "virtualPrice": 1161856567254871000 + "rawVolume": 30.840649800374102, + "volumeUSD": 56917.51798227637, + "latestDailyApy": 0.02377761990806082, + "latestWeeklyApy": 0.15181522346892073, + "virtualPrice": 1161888012500453400 }, { "type": "stable-factory", @@ -2705,9 +2705,9 @@ "address": "0x0245918fA513E0641509bb519389A49258A2699F", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.4962073608201889, - "latestWeeklyApy": 0.19869470055888794, - "virtualPrice": 1001193814777903100 + "latestDailyApy": 0.06296708844721888, + "latestWeeklyApy": 0.21143053634378184, + "virtualPrice": 1001220904786754200 }, { "type": "stable-factory", @@ -2732,18 +2732,18 @@ "address": "0xEC0de6A9da9cc464Da0011214D586C21f1Fbe6D4", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.8021065465242616, - "latestWeeklyApy": 0.32088707486770396, - "virtualPrice": 1014283061497950200 + "latestDailyApy": 0.1016476205645711, + "latestWeeklyApy": 0.3414627083278221, + "virtualPrice": 1014327356702010400 }, { "type": "stable-factory", "address": "0xcD0148e3f3350f4B98A48535f63A38fC630e80f1", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.7990481432475827, - "latestWeeklyApy": 0.31966707296842145, - "virtualPrice": 1001634874745133300 + "latestDailyApy": 0.10126092364672878, + "latestWeeklyApy": 0.34016313622937666, + "virtualPrice": 1001678451330973400 }, { "type": "stable-factory", @@ -2777,9 +2777,9 @@ "address": "0xfC8c34a3B3CFE1F1Dd6DBCCEC4BC5d3103b80FF0", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1000309765598076700 + "latestDailyApy": 0.13731183848075812, + "latestWeeklyApy": 0.019550653572442123, + "virtualPrice": 1000313526157399900 }, { "type": "stable-factory", @@ -2795,36 +2795,36 @@ "address": "0x6D09C6513e620778632D36784F5C3b4b2309bd96", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.02061661761887379, - "latestWeeklyApy": 0.037525540962057846, - "virtualPrice": 1000112231503155500 + "latestDailyApy": 0.006156763795006626, + "latestWeeklyApy": 0.010165605239587094, + "virtualPrice": 1000113621708054900 }, { "type": "stable-factory", "address": "0xC61557C5d177bd7DC889A3b621eEC333e168f68A", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.7983509972363967, - "latestWeeklyApy": 0.3193883973027889, - "virtualPrice": 1001765323050822700 + "latestDailyApy": 0.10117326838960938, + "latestWeeklyApy": 0.33986758101787196, + "virtualPrice": 1001808867539888300 }, { "type": "stable-factory", "address": "0xe9123CBC5d1EA65301D417193c40A72Ac8D53501", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.2913412802071802, - "latestWeeklyApy": 0.1167334698089384, - "virtualPrice": 1002490925034567000 + "latestDailyApy": 0.03716325922573649, + "latestWeeklyApy": 0.13015391426256517, + "virtualPrice": 1002508011236649500 }, { "type": "stable-factory", "address": "0x3685646651FCcC80e7CCE7Ee24c5f47Ed9b434ac", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.12949549433003416, - "latestWeeklyApy": 0.05191406511511065, - "virtualPrice": 1000417956024905200 + "latestDailyApy": 0.01645685543549824, + "latestWeeklyApy": 0.05523400147318114, + "virtualPrice": 1000425032583516000 }, { "type": "stable-factory", @@ -2865,20 +2865,20 @@ { "type": "stable-factory", "address": "0x4d9f9D15101EEC665F77210cB999639f760F831E", - "rawVolume": 374.07115789369914, - "volumeUSD": 686856.5382536844, - "latestDailyApy": 1.602562426988663, - "latestWeeklyApy": 1.5636198073416985, - "virtualPrice": 1012639445089457200 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.6482946366052964, + "latestWeeklyApy": 1.785983703754801, + "virtualPrice": 1012940229074773000 }, { "type": "stable-factory", "address": "0x663aC72a1c3E1C4186CD3dCb184f216291F4878C", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.093381875659726, - "virtualPrice": 1000843267186074100 + "latestDailyApy": 0.1184441979242834, + "latestWeeklyApy": 0.09409629115246787, + "virtualPrice": 1000861369861696800 }, { "type": "stable-factory", @@ -2892,11 +2892,11 @@ { "type": "stable-factory", "address": "0xAEda92e6A3B1028edc139A4ae56Ec881f3064D4F", - "rawVolume": 253513.74248830316, - "volumeUSD": 253434.4072392238, - "latestDailyApy": 0.4207485706680947, - "latestWeeklyApy": 0.2083498110998283, - "virtualPrice": 1000853871139180400 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.005873698572012032, + "latestWeeklyApy": 0.09534659607879359, + "virtualPrice": 1000860701298237800 }, { "type": "stable-factory", @@ -2910,29 +2910,29 @@ { "type": "stable-factory", "address": "0x892D701d94a43bDBCB5eA28891DaCA2Fa22A690b", - "rawVolume": 73206.60159397766, - "volumeUSD": 72248.06482700286, - "latestDailyApy": 1.2948263913808766, - "latestWeeklyApy": 2.0039565959573347, - "virtualPrice": 1011520870816694100 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 2.440976434868314, + "latestWeeklyApy": 2.726722764789935, + "virtualPrice": 1012008914684662400 }, { "type": "stable-factory", "address": "0x99f5aCc8EC2Da2BC0771c32814EFF52b712de1E5", - "rawVolume": 316099.57652569783, - "volumeUSD": 192357.62494683664, - "latestDailyApy": 2.681271416631148, - "latestWeeklyApy": 3.6890683325967455, - "virtualPrice": 1002686195464957800 + "rawVolume": 236030.0893108247, + "volumeUSD": 137321.39880904413, + "latestDailyApy": 0.8850839712769121, + "latestWeeklyApy": 0.9607626267860159, + "virtualPrice": 1002797923010285000 }, { "type": "stable-factory", "address": "0xE60986759872393a8360A4a7abEAb3A6e0BA7848", - "rawVolume": 487.2697943030799, - "volumeUSD": 486.80233872218616, - "latestDailyApy": 0.03055164391225773, - "latestWeeklyApy": 0.13620040694397595, - "virtualPrice": 1000275785552996400 + "rawVolume": 9805.575336292362, + "volumeUSD": 9801.837804021075, + "latestDailyApy": 0.005749390492648665, + "latestWeeklyApy": 0.13184066547771156, + "virtualPrice": 1000300293624129900 }, { "type": "stable-factory", @@ -2946,29 +2946,29 @@ { "type": "stable-factory", "address": "0x971add32Ea87f10bD192671630be3BE8A11b8623", - "rawVolume": 410881.9857555945, - "volumeUSD": 247939.45592603812, - "latestDailyApy": 0.5581049785377878, - "latestWeeklyApy": 0.9354451762829674, - "virtualPrice": 1003660881007524500 + "rawVolume": 204653.37271154998, + "volumeUSD": 117991.57439245383, + "latestDailyApy": 0.22293326357887278, + "latestWeeklyApy": 0.26382004859024644, + "virtualPrice": 1003696433662908300 }, { "type": "stable-factory", "address": "0x68934F60758243eafAf4D2cFeD27BF8010bede3a", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.2130879901289573, - "latestWeeklyApy": 0.05235025979024588, - "virtualPrice": 1001309979751059000 + "rawVolume": 1022.0142943230672, + "volumeUSD": 1020.7208606155383, + "latestDailyApy": 0.0033734671051721676, + "latestWeeklyApy": 0.11380553942086369, + "virtualPrice": 1001326042793569900 }, { "type": "stable-factory", "address": "0xfBB481A443382416357fA81F16dB5A725DC6ceC8", - "rawVolume": 31466.729051759863, - "volumeUSD": 45930.74425190799, - "latestDailyApy": 0.6190588918066009, - "latestWeeklyApy": 1.257457327290945, - "virtualPrice": 1003784745207210000 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.08771226560453371, + "latestWeeklyApy": 0.4095266351561433, + "virtualPrice": 1003846672848404100 }, { "type": "stable-factory", @@ -2984,9 +2984,9 @@ "address": "0x7C0d189E1FecB124487226dCbA3748bD758F98E4", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.06083023843237445, - "latestWeeklyApy": 0.012192970796021108, - "virtualPrice": 1000911579321327900 + "latestDailyApy": 0, + "latestWeeklyApy": 0.013922949279976393, + "virtualPrice": 1000912591479512400 }, { "type": "stable-factory", @@ -3012,7 +3012,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.1148559852320652, + "latestWeeklyApy": 0, "virtualPrice": 1010177933949226400 }, { @@ -3021,7 +3021,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 3.7483971482288325e-7, + "latestWeeklyApy": 0, "virtualPrice": 1000056944250855800 }, { @@ -3075,44 +3075,44 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.007607844179724488, - "virtualPrice": 1000121326668930200 + "latestWeeklyApy": 1.189712560759304, + "virtualPrice": 1000348872491530500 }, { "type": "stable-factory", "address": "0x94B17476A93b3262d87B9a326965D1E91f9c13E7", - "rawVolume": 213.67642543636583, - "volumeUSD": 390977.6568170864, - "latestDailyApy": 0.1633921808675387, - "latestWeeklyApy": 0.2287407218612758, - "virtualPrice": 1000597233303686000 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0048098158892173615, + "latestWeeklyApy": 0.042695228475464475, + "virtualPrice": 1000600971633000400 }, { "type": "stable-factory", "address": "0x96AAE323E111A19b1E0e26F55e8De21F1dD01f26", - "rawVolume": 29859.949258094814, - "volumeUSD": 861.1512038965092, - "latestDailyApy": 0.05336781019611436, - "latestWeeklyApy": 0.14525965303655575, - "virtualPrice": 1000268362137832000 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.4476096693217144, + "latestWeeklyApy": 0.35520406586873055, + "virtualPrice": 1000335112624408200 }, { "type": "stable-factory", "address": "0xCA0253A98D16e9C1e3614caFDA19318EE69772D0", - "rawVolume": 858410.2861220554, - "volumeUSD": 522179.84249812114, - "latestDailyApy": 0.902579944339621, - "latestWeeklyApy": 1.4629172205791852, - "virtualPrice": 1000772038249665500 + "rawVolume": 61540.221186553485, + "volumeUSD": 35868.895815099066, + "latestDailyApy": 0.03720313028037214, + "latestWeeklyApy": 0.45819266658853053, + "virtualPrice": 1000835392290992600 }, { "type": "stable-factory", "address": "0x71c91B173984d3955f7756914bBF9a7332538595", - "rawVolume": 22.012014562164854, - "volumeUSD": 138.76166174568036, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.07735447907506465, - "virtualPrice": 1000388536806388700 + "latestWeeklyApy": 0.004065156588506369, + "virtualPrice": 1000389318856035500 }, { "type": "stable-factory", @@ -3120,17 +3120,17 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1000175279144142800 + "latestWeeklyApy": 0.23223989445431137, + "virtualPrice": 1000219899686445800 }, { "type": "stable-factory", "address": "0x21E27a5E5513D6e65C4f830167390997aA84843a", - "rawVolume": 1794.3155552584915, - "volumeUSD": 3272811.475110785, - "latestDailyApy": 2.7649689987347292, - "latestWeeklyApy": 2.5336699898361736, - "virtualPrice": 1007282850737308300 + "rawVolume": 47.29799687712446, + "volumeUSD": 87577.01255521495, + "latestDailyApy": 2.3294942167549237, + "latestWeeklyApy": 2.158204721366097, + "virtualPrice": 1007621423708160600 }, { "type": "stable-factory", @@ -3146,9 +3146,9 @@ "address": "0x400d4C984779A747462e88373c3fE369EF9F5b50", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.020169801352842853, - "latestWeeklyApy": 0.053295129517527684, - "virtualPrice": 1000088201765247600 + "latestDailyApy": 0.006128410667138873, + "latestWeeklyApy": 0.051002588905713075, + "virtualPrice": 1000097455868600700 }, { "type": "stable-factory", @@ -3156,7 +3156,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.0007585399258935865, + "latestWeeklyApy": 0, "virtualPrice": 1000446304113295400 }, { @@ -3171,11 +3171,11 @@ { "type": "stable-factory", "address": "0x3175f54A354C83e8ADe950c14FA3e32fc794c0Dc", - "rawVolume": 46552.23534696112, - "volumeUSD": 46679.69141059313, - "latestDailyApy": 1.029216265592292, - "latestWeeklyApy": 0.16931875367129923, - "virtualPrice": 1000673112554490400 + "rawVolume": 4432.997481003803, + "volumeUSD": 4431.767704547068, + "latestDailyApy": 0.0018552331982224501, + "latestWeeklyApy": 0.5346247556240469, + "virtualPrice": 1000747661002313600 }, { "type": "stable-factory", @@ -3209,27 +3209,27 @@ "address": "0x52EBcE664aC1C3A1a5a0568599493C5d71f4772b", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.7252123636011687, - "latestWeeklyApy": 0.29015503889942007, - "virtualPrice": 1000414336793599700 + "latestDailyApy": 0.09194497014795022, + "latestWeeklyApy": 0.3089978835720597, + "virtualPrice": 1000453891396237200 }, { "type": "stable-factory", "address": "0xB00eA2Bcad321850Bc8055e7C311b05d54875CaD", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.34396294042668973, - "latestWeeklyApy": 187.03829471703162, - "virtualPrice": 1497254150049551400 + "latestDailyApy": 0.14915987349874982, + "latestWeeklyApy": 187.18167089143986, + "virtualPrice": 1497350080972425700 }, { "type": "stable-factory", "address": "0x35dd22fC3eC5a82D207BEDd8FA1F658915F97C33", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.2067993746800898, - "latestWeeklyApy": 129.03451009608992, - "virtualPrice": 1017588974687490800 + "latestDailyApy": 0.15265623276126128, + "latestWeeklyApy": 0.513123339251198, + "virtualPrice": 1017655700044127400 }, { "type": "stable-factory", @@ -3261,47 +3261,47 @@ { "type": "stable-factory", "address": "0xfC89b519658967fCBE1f525f1b8f4bf62d9b9018", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.4749076864776436, - "virtualPrice": 1000813025399881000 + "rawVolume": 1.6618612741486833, + "volumeUSD": 3076.5701533954043, + "latestDailyApy": 0.2547527256007376, + "latestWeeklyApy": 1.1756258641087314, + "virtualPrice": 1001038047285078300 }, { "type": "stable-factory", "address": "0xd82C2eB10F4895CABED6EDa6eeee234bd1A9838B", - "rawVolume": 89.8914242659911, - "volumeUSD": 164628.53726467004, - "latestDailyApy": 0.07320680060693974, - "latestWeeklyApy": 0.48594781890887173, - "virtualPrice": 1000442781076075800 + "rawVolume": 90.79418656494948, + "volumeUSD": 168126.3907902709, + "latestDailyApy": 0.10781205205041555, + "latestWeeklyApy": 0.1178584004913219, + "virtualPrice": 1000463437743846900 }, { "type": "stable-factory", "address": "0x6a9014FB802dCC5efE3b97Fd40aAa632585636D0", - "rawVolume": 2701.6386189851733, - "volumeUSD": 17193.04956316602, - "latestDailyApy": 0.17854186518835302, - "latestWeeklyApy": 1.8800173351784188, - "virtualPrice": 1002293092750146600 + "rawVolume": 276.5714336710295, + "volumeUSD": 1779.0457062132582, + "latestDailyApy": 0.5593079133198398, + "latestWeeklyApy": 0.39218607953179774, + "virtualPrice": 1002363648008612600 }, { "type": "stable-factory", "address": "0xc1F6110D42781aaccD16d716Ca7B814F2aEee18F", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 2.9399288047789796, - "latestWeeklyApy": 2.1381417132955827, - "virtualPrice": 1002921490735177900 + "latestDailyApy": 2.229701781839566, + "latestWeeklyApy": 2.1592933661116254, + "virtualPrice": 1003254127852104200 }, { "type": "stable-factory", "address": "0xC73151DcA19ffF7A16aE421a9fb35455832d66d3", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.024487449689392093, - "latestWeeklyApy": 0.04457174831042909, - "virtualPrice": 1000108839232870500 + "latestDailyApy": 0.0073126133828482764, + "latestWeeklyApy": 0.01207410385095642, + "virtualPrice": 1000110490415296500 }, { "type": "stable-factory", @@ -3335,9 +3335,9 @@ "address": "0xbC90FEC043e6DF6A084E18Df9435Ee037C940B2d", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.0070936777368357795, - "latestWeeklyApy": 0.012910946584621108, - "virtualPrice": 1000137381956955400 + "latestDailyApy": 0.002118495521008512, + "latestWeeklyApy": 0.003497863894441622, + "virtualPrice": 1000137860337161000 }, { "type": "stable-factory", @@ -3371,9 +3371,9 @@ "address": "0x20955CB69Ae1515962177D164dfC9522feef567E", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.640271906444001, - "latestWeeklyApy": 0.256270560459515, - "virtualPrice": 1347329658618958300 + "latestDailyApy": 0.1045082681577103, + "latestWeeklyApy": 0.2760251441891848, + "virtualPrice": 1347377524252951300 }, { "type": "stable-factory", @@ -3381,8 +3381,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.1684306269374547, - "virtualPrice": 1000179436079310100 + "latestWeeklyApy": 0.00026173294502829236, + "virtualPrice": 1000179486421538200 }, { "type": "stable-factory", @@ -3393,14 +3393,23 @@ "latestWeeklyApy": 0, "virtualPrice": 0 }, + { + "type": "stable-factory", + "address": "0xAb3435bd2959fD713F7e50389Ff374Bfee2E3B4b", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 0 + }, { "type": "crypto", "address": "0xD51a44d3FaE010294C616388b506AcdA1bfAAE46", - "rawVolume": 2277321.612864847, - "volumeUSD": 4792214.048794902, - "latestDailyApy": 0.34568144613522644, - "latestWeeklyApy": 0.2911736047979785, - "virtualPrice": 1032656600630758700 + "rawVolume": 1711572.2882458386, + "volumeUSD": 4076533.0272705965, + "latestDailyApy": 0.2152494063418109, + "latestWeeklyApy": 0.23776940089734744, + "virtualPrice": 1032694625487683800 }, { "type": "crypto", @@ -3408,35 +3417,35 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.13036679154627695, - "virtualPrice": 1007633062634375400 + "latestWeeklyApy": 0.3567432657286984, + "virtualPrice": 1007904846240822900 }, { "type": "crypto", "address": "0x98a7F18d4E56Cfe84E3D081B40001B3d5bD3eB8B", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.006067597831216354, - "latestWeeklyApy": 0.04614753750065148, - "virtualPrice": 1003343690751647900 + "rawVolume": 2089.475968, + "volumeUSD": 1089.8849876513325, + "latestDailyApy": 0, + "latestWeeklyApy": 0.28789568142926214, + "virtualPrice": 1003498001185354000 }, { "type": "crypto", "address": "0x8301AE4fc9c624d1D396cbDAa1ed877821D7C511", - "rawVolume": 6146.6022916733855, - "volumeUSD": 3709.8073396241034, - "latestDailyApy": 4.696239883830455, - "latestWeeklyApy": 39.9809276842219, - "virtualPrice": 538804621997879550 + "rawVolume": 528572550.28511715, + "volumeUSD": 310948453.46001524, + "latestDailyApy": 0.2610677902590286, + "latestWeeklyApy": 0.7693852713517746, + "virtualPrice": 538848290753078660 }, { "type": "crypto", "address": "0xB576491F1E6e5E62f1d8F26062Ee822B40B0E0d4", - "rawVolume": 93700.60818309146, - "volumeUSD": 605090.5583067115, - "latestDailyApy": 0.6159830328566374, - "latestWeeklyApy": 1.043563573982742, - "virtualPrice": 1028238140738636300 + "rawVolume": 37003.59494867739, + "volumeUSD": 230351.06767236086, + "latestDailyApy": 1.0458821638341442, + "latestWeeklyApy": 0.6209898172613082, + "virtualPrice": 1028348850303909900 }, { "type": "crypto", @@ -3450,29 +3459,29 @@ { "type": "crypto", "address": "0x98638FAcf9a3865cd033F36548713183f6996122", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.42039720446886975, + "rawVolume": 399757.10689322324, + "volumeUSD": 392.9933793280127, + "latestDailyApy": 0, "latestWeeklyApy": 0.05978452744856977, "virtualPrice": 1058156265101005400 }, { "type": "crypto", "address": "0x752eBeb79963cf0732E9c0fec72a49FD1DEfAEAC", - "rawVolume": 292013.38478626986, - "volumeUSD": 25618.982251052286, - "latestDailyApy": 0.7594137142235002, - "latestWeeklyApy": 0.7736719286213445, - "virtualPrice": 1030129522736123800 + "rawVolume": 477400.2077327778, + "volumeUSD": 42406.568116758834, + "latestDailyApy": 0.9529607233306869, + "latestWeeklyApy": 0.498682620202584, + "virtualPrice": 1030383690720359000 }, { "type": "crypto", "address": "0xE84f5b1582BA325fDf9cE6B0c1F087ccfC924e54", - "rawVolume": 8307.840912959568, - "volumeUSD": 4410.1704370125935, - "latestDailyApy": 0.10195857810915143, - "latestWeeklyApy": 0.08956484202864434, - "virtualPrice": 1024711334469484000 + "rawVolume": 4893.914475244787, + "volumeUSD": 2593.7718269259535, + "latestDailyApy": 0.06730693940324439, + "latestWeeklyApy": 0.046396841211482354, + "virtualPrice": 1024691863951553900 }, { "type": "crypto-factory", @@ -3504,20 +3513,20 @@ { "type": "crypto-factory", "address": "0x941Eb6F616114e4Ecaa85377945EA306002612FE", - "rawVolume": 1439.9897649921347, - "volumeUSD": 17927.31209856864, - "latestDailyApy": 0.31233398472914065, - "latestWeeklyApy": 1.1191212695655262, - "virtualPrice": 1027593276495165800 + "rawVolume": 144.91715369740322, + "volumeUSD": 1865.5705580203778, + "latestDailyApy": 0.24518559122725936, + "latestWeeklyApy": 0.566526189701877, + "virtualPrice": 1027655022005183700 }, { "type": "crypto-factory", "address": "0x50f3752289e1456BfA505afd37B241bca23e685d", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.19087564044726335, - "latestWeeklyApy": 0.1563809859742138, - "virtualPrice": 1007959220094842200 + "latestDailyApy": 0.13911815997407206, + "latestWeeklyApy": 0.0773254713284599, + "virtualPrice": 1007988073025843700 }, { "type": "crypto-factory", @@ -3549,11 +3558,11 @@ { "type": "crypto-factory", "address": "0xC26b89A667578ec7b3f11b2F98d6Fd15C07C54ba", - "rawVolume": 16.272014555438002, - "volumeUSD": 46239.61746658422, - "latestDailyApy": 0.17308659257502246, - "latestWeeklyApy": 0.615432534756466, - "virtualPrice": 1018109271261466000 + "rawVolume": 61.32573382127507, + "volumeUSD": 175662.1834596248, + "latestDailyApy": 0.46398230500046544, + "latestWeeklyApy": 0.3010608751109478, + "virtualPrice": 1018208929309748100 }, { "type": "crypto-factory", @@ -3570,17 +3579,17 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1204576187010011100 + "latestWeeklyApy": 0.13442196654773753, + "virtualPrice": 1204639423636725500 }, { "type": "crypto-factory", "address": "0xfB8814D005C5f32874391e888da6eB2fE7a27902", - "rawVolume": 2165.6064788111653, - "volumeUSD": 1507.582792599405, - "latestDailyApy": 0, - "latestWeeklyApy": 0.22054967727977992, - "virtualPrice": 1012215060498309100 + "rawVolume": 5001.558981343018, + "volumeUSD": 3495.027186950358, + "latestDailyApy": 0.00216249866629159, + "latestWeeklyApy": 0.11789499832155492, + "virtualPrice": 1012234870093947800 }, { "type": "crypto-factory", @@ -3605,8 +3614,8 @@ "address": "0x1dFF955CdDD55fba58Db3CD658F9E3E3C31851eb", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.1299528152882365, - "latestWeeklyApy": 1.1299528152882365, + "latestDailyApy": 1.2092974933954455, + "latestWeeklyApy": 1.2092974933954455, "virtualPrice": 0 }, { @@ -3630,20 +3639,20 @@ { "type": "crypto-factory", "address": "0xF43b15Ab692fDe1F9c24a9FCE700AdCC809D5391", - "rawVolume": 0, - "volumeUSD": 0, + "rawVolume": 0.5186098457230764, + "volumeUSD": 66.59104541542924, "latestDailyApy": 0, - "latestWeeklyApy": 3.4059410651900768, - "virtualPrice": 1055176870712748800 + "latestWeeklyApy": 0.03593194325131055, + "virtualPrice": 1055658176855754500 }, { "type": "crypto-factory", "address": "0xd658A338613198204DCa1143Ac3F01A722b5d94A", - "rawVolume": 21689.67469748851, - "volumeUSD": 130195.97330512486, - "latestDailyApy": 0.06435394287034324, - "latestWeeklyApy": 0.6430193723591993, - "virtualPrice": 1005728783987464700 + "rawVolume": 22094.692422486143, + "volumeUSD": 138400.95815423704, + "latestDailyApy": 0.029691698284572965, + "latestWeeklyApy": 0.15800079608327966, + "virtualPrice": 1006030381185665900 }, { "type": "crypto-factory", @@ -3666,11 +3675,11 @@ { "type": "crypto-factory", "address": "0x6ec38b3228251a0C5D491Faf66858e2E23d7728B", - "rawVolume": 19.39854157023174, - "volumeUSD": 405.1320596524673, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1012066064532794900 + "latestWeeklyApy": 0.05610081718885329, + "virtualPrice": 1012114744030637300 }, { "type": "crypto-factory", @@ -3678,17 +3687,17 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.028639169199684567, + "latestWeeklyApy": 0, "virtualPrice": 1031783124572619400 }, { "type": "crypto-factory", "address": "0x80aa1a80a30055DAA084E599836532F3e58c95E2", - "rawVolume": 41747.84029555649, - "volumeUSD": 18148.22753735593, - "latestDailyApy": 0.6997100683141078, - "latestWeeklyApy": 0.31377767580611504, - "virtualPrice": 1017322528708082400 + "rawVolume": 4022.6359217523127, + "volumeUSD": 1793.3283380211863, + "latestDailyApy": 0.26684127437457406, + "latestWeeklyApy": 4.160952538972484, + "virtualPrice": 1017873615843742300 }, { "type": "crypto-factory", @@ -3720,11 +3729,11 @@ { "type": "crypto-factory", "address": "0x1570af3dF649Fc74872c5B8F280A162a3bdD4EB6", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.07293159135617344, - "virtualPrice": 1007570961933805800 + "rawVolume": 51137.07189394318, + "volumeUSD": 53089.46758742254, + "latestDailyApy": 0.06675351104967753, + "latestWeeklyApy": 0.10190308368029921, + "virtualPrice": 1007611723338673000 }, { "type": "crypto-factory", @@ -3750,8 +3759,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1027522184085652500 + "latestWeeklyApy": 0.5917295296662406, + "virtualPrice": 1027652990674024100 }, { "type": "crypto-factory", @@ -3768,8 +3777,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1034937894020062600 + "latestWeeklyApy": 14.673042191448094, + "virtualPrice": 1045664071720694100 }, { "type": "crypto-factory", @@ -3810,29 +3819,29 @@ { "type": "crypto-factory", "address": "0x3211C6cBeF1429da3D0d58494938299C92Ad5860", - "rawVolume": 685513.6222467913, - "volumeUSD": 550387.0884297435, - "latestDailyApy": 0.9648518139249607, - "latestWeeklyApy": 0.7423783153279961, - "virtualPrice": 1039300698428454400 + "rawVolume": 792171.0271680171, + "volumeUSD": 704218.1599417755, + "latestDailyApy": 0.3185368269219113, + "latestWeeklyApy": 1.4546811459773767, + "virtualPrice": 1039539067887716000 }, { "type": "crypto-factory", "address": "0x75A6787C7EE60424358B449B539A8b774c9B4862", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.233177625686265, - "virtualPrice": 1005924667264966300 + "rawVolume": 37689.43468268511, + "volumeUSD": 4072.7909424161007, + "latestDailyApy": 1.2599644166509716, + "latestWeeklyApy": 0.38019302514462616, + "virtualPrice": 1005975421691972000 }, { "type": "crypto-factory", "address": "0x21410232B484136404911780bC32756D5d1a9Fa9", - "rawVolume": 96.74784527918452, - "volumeUSD": 10015.141431038142, - "latestDailyApy": 0, - "latestWeeklyApy": 0.051272471695118504, - "virtualPrice": 1011244935445001600 + "rawVolume": 95.30199226647976, + "volumeUSD": 9991.76252351481, + "latestDailyApy": 0.07162474206763303, + "latestWeeklyApy": 0.04329614137470461, + "virtualPrice": 1011269820759148400 }, { "type": "crypto-factory", @@ -3864,11 +3873,11 @@ { "type": "crypto-factory", "address": "0x7E050cf658777cc1Da4a4508E79d71859044B60E", - "rawVolume": 2500000.783228082, - "volumeUSD": 2873.0321181061013, - "latestDailyApy": 0.6160083028343477, - "latestWeeklyApy": 1.0000821497573753, - "virtualPrice": 1021215934316853500 + "rawVolume": 14771426.797096761, + "volumeUSD": 15383.900664088087, + "latestDailyApy": 0.20224680011466933, + "latestWeeklyApy": 0.5992441181630781, + "virtualPrice": 1020957887104116500 }, { "type": "crypto-factory", @@ -3882,11 +3891,11 @@ { "type": "crypto-factory", "address": "0x838af967537350D2C44ABB8c010E49E32673ab94", - "rawVolume": 6732.02376397542, - "volumeUSD": 103830.83472578405, - "latestDailyApy": 0.6314658538624229, - "latestWeeklyApy": 0.3802725637447546, - "virtualPrice": 1040817379842017000 + "rawVolume": 27123.413847900614, + "volumeUSD": 65561.28976430105, + "latestDailyApy": 1.185879530907763, + "latestWeeklyApy": 0.5703426043256687, + "virtualPrice": 1040919021491734800 }, { "type": "crypto-factory", @@ -3912,8 +3921,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.17390121817051352, - "virtualPrice": 1002102670166707700 + "latestWeeklyApy": 0.0001445807131128518, + "virtualPrice": 1002102753558478500 }, { "type": "crypto-factory", @@ -3948,8 +3957,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.010047848793304226, - "virtualPrice": 1009016109232459500 + "latestWeeklyApy": 0.0009391250272994256, + "virtualPrice": 1009013373269731000 }, { "type": "crypto-factory", @@ -3972,11 +3981,11 @@ { "type": "crypto-factory", "address": "0xe0e970a99bc4F53804D8145beBBc7eBc9422Ba7F", - "rawVolume": 22736.996153950866, - "volumeUSD": 25732.132216708043, - "latestDailyApy": 0.4545982404257076, - "latestWeeklyApy": 0.12156886548906343, - "virtualPrice": 1004334918211426000 + "rawVolume": 6070.177771188016, + "volumeUSD": 7455.518029391681, + "latestDailyApy": 0.25847485135988, + "latestWeeklyApy": 0.44721663377942367, + "virtualPrice": 1004413555735084200 }, { "type": "crypto-factory", @@ -4191,8 +4200,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1000094198019546100 + "latestWeeklyApy": 0.0015398012700007513, + "virtualPrice": 1000095086424808100 }, { "type": "crypto-factory", @@ -4242,11 +4251,11 @@ { "type": "crypto-factory", "address": "0x6e314039f4C56000F4ebb3a7854A84cC6225Fb92", - "rawVolume": 40.678956311052495, - "volumeUSD": 5327.344969826131, - "latestDailyApy": 0.19035791331651897, - "latestWeeklyApy": 0.5757001180923371, - "virtualPrice": 1015895550170124300 + "rawVolume": 94.37775720291596, + "volumeUSD": 12650.109645594548, + "latestDailyApy": 0.20050479605742133, + "latestWeeklyApy": 0.40191897245112074, + "virtualPrice": 1016007855432827500 }, { "type": "crypto-factory", @@ -4289,18 +4298,18 @@ "address": "0xD4e2fdC354c5DFfb865798Ca98c2b9d5382F687C", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 3022.9176472209733, - "virtualPrice": 6994385657484359000 + "latestDailyApy": 1000000, + "latestWeeklyApy": 1796.8714493587352, + "virtualPrice": 7575487981391889000 }, { "type": "crypto-factory", "address": "0x5FAE7E604FC3e24fd43A72867ceBaC94c65b404A", - "rawVolume": 21.474619549000366, - "volumeUSD": 39701.00194194756, - "latestDailyApy": 1.6610590838840458, - "latestWeeklyApy": 1.6228493811698699, - "virtualPrice": 1011015465690634800 + "rawVolume": 46.07969011722454, + "volumeUSD": 87257.46898636999, + "latestDailyApy": 1.4989387730947223, + "latestWeeklyApy": 1.5209821464880102, + "virtualPrice": 1010977660242178600 }, { "type": "crypto-factory", @@ -4323,38 +4332,38 @@ { "type": "crypto-factory", "address": "0x21d158d95C2e150e144c36FC64E3653B8D6c6267", - "rawVolume": 27075.109916819205, - "volumeUSD": 37465.29657451397, - "latestDailyApy": 0.2559660793623575, - "latestWeeklyApy": 0.919872661359733, - "virtualPrice": 1011353370841770000 + "rawVolume": 6565.214170731721, + "volumeUSD": 6602.403102010902, + "latestDailyApy": 0.506363857318215, + "latestWeeklyApy": 0.5264551717098831, + "virtualPrice": 1011431531559402800 }, { "type": "crypto-factory", "address": "0xBEc570d92AFB7fFc553bdD9d4B4638121000b10D", - "rawVolume": 13105.311787375176, - "volumeUSD": 20053.832687731418, - "latestDailyApy": 0.5457196339657466, - "latestWeeklyApy": 0.5804442622266315, - "virtualPrice": 1009066337909469400 + "rawVolume": 3820.975404611525, + "volumeUSD": 5780.622087098942, + "latestDailyApy": 0.6949927296039382, + "latestWeeklyApy": 0.3582529448580285, + "virtualPrice": 1009116096970967700 }, { "type": "crypto-factory", "address": "0x4149d1038575CE235E03E03B39487a80FD709D31", - "rawVolume": 2073.1438000156036, - "volumeUSD": 3825.137013431942, - "latestDailyApy": 0.14754741297491325, - "latestWeeklyApy": 0.24240025513988517, - "virtualPrice": 1009383366137369000 + "rawVolume": 13166.571204129315, + "volumeUSD": 24564.13442040453, + "latestDailyApy": 0.15001310110498434, + "latestWeeklyApy": 0.07484704746292259, + "virtualPrice": 1009414319999992000 }, { "type": "crypto-factory", "address": "0x31c325A01861c7dBd331a9270296a31296D797A0", - "rawVolume": 12033.05966360396, - "volumeUSD": 8999.309440824829, - "latestDailyApy": 0.18835057038599778, - "latestWeeklyApy": 1.76511200415006, - "virtualPrice": 1016562168444484500 + "rawVolume": 8633.033179466138, + "volumeUSD": 6251.333273444743, + "latestDailyApy": 0.16468934101487864, + "latestWeeklyApy": 0.2886826450436031, + "virtualPrice": 1016427187738146300 }, { "type": "crypto-factory", @@ -4386,11 +4395,11 @@ { "type": "crypto-factory", "address": "0x13B876C26Ad6d21cb87AE459EaF6d7A1b788A113", - "rawVolume": 2317.9255196100135, - "volumeUSD": 2932.246762344348, - "latestDailyApy": 0.1939886732903906, - "latestWeeklyApy": 0.08528439376529473, - "virtualPrice": 1004346597581378700 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.06983323655982421, + "virtualPrice": 1004311765055366900 }, { "type": "crypto-factory", @@ -4521,11 +4530,11 @@ { "type": "crypto-factory", "address": "0xDcb11E81C8B8a1e06BF4b50d4F6f3bb31f7478C3", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.0696662247174018, - "latestWeeklyApy": 0.9915027149218769, - "virtualPrice": 1008159541448694500 + "rawVolume": 37037.2101175526, + "volumeUSD": 20315.84078047024, + "latestDailyApy": 0.6993948814141282, + "latestWeeklyApy": 0.2125012552704142, + "virtualPrice": 1008228170979523000 }, { "type": "crypto-factory", @@ -4683,29 +4692,29 @@ { "type": "crypto-factory", "address": "0x74ED5d42203806c8CDCf2F04Ca5F60DC777b901c", - "rawVolume": 4103.264075862262, - "volumeUSD": 8953.552203030073, + "rawVolume": 2736.2492220462395, + "volumeUSD": 5954.152556328509, "latestDailyApy": 0, - "latestWeeklyApy": 0.029729356479202274, - "virtualPrice": 1005394533970417700 + "latestWeeklyApy": 0.026758573127971808, + "virtualPrice": 1005409945399212000 }, { "type": "crypto-factory", "address": "0x3e3C6c7db23cdDEF80B694679aaF1bCd9517D0Ae", - "rawVolume": 4729.622770262418, - "volumeUSD": 2439.1691125898874, + "rawVolume": 2193.772085560664, + "volumeUSD": 1136.6046733031485, "latestDailyApy": 0, - "latestWeeklyApy": 0.26867617524772847, - "virtualPrice": 1003478681643160800 + "latestWeeklyApy": 0.06952622425133725, + "virtualPrice": 1003428598468915100 }, { "type": "crypto-factory", "address": "0x6a6283aB6e31C2AeC3fA08697A8F806b740660b2", - "rawVolume": 5043059.183598681, - "volumeUSD": 20443.129788012422, - "latestDailyApy": 0.26266275529380767, - "latestWeeklyApy": 0.29219590618778657, - "virtualPrice": 1021269061116999300 + "rawVolume": 2874535.2739251284, + "volumeUSD": 12704.272630304464, + "latestDailyApy": 0.1067480077559857, + "latestWeeklyApy": 0.4398160136245277, + "virtualPrice": 1021354189401678600 }, { "type": "crypto-factory", @@ -4737,11 +4746,11 @@ { "type": "crypto-factory", "address": "0x342D1C4Aa76EA6F5E5871b7f11A019a0eB713A4f", - "rawVolume": 342.57177232429876, - "volumeUSD": 2927.75977324718, - "latestDailyApy": 0.46457858863493406, - "latestWeeklyApy": 1.635235539595259, - "virtualPrice": 1018443464076032500 + "rawVolume": 57.239801633658864, + "volumeUSD": 495.161371397257, + "latestDailyApy": 0.31488802485621914, + "latestWeeklyApy": 0.36989601831940444, + "virtualPrice": 1018505398989500900 }, { "type": "crypto-factory", @@ -4836,11 +4845,11 @@ { "type": "crypto-factory", "address": "0xf2f12B364F614925aB8E2C8BFc606edB9282Ba09", - "rawVolume": 601.6294655707492, - "volumeUSD": 348.38481710139826, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 1.8542576431711977, - "virtualPrice": 1034467847999705200 + "latestWeeklyApy": 0.07736976796088868, + "virtualPrice": 1034475412714046500 }, { "type": "crypto-factory", @@ -4892,18 +4901,18 @@ "address": "0x808dB6E464279C6A77a1164E0b34d64Bd6fB526E", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.03664753796999154, - "latestWeeklyApy": 0.028683032608123327, - "virtualPrice": 1008238941565394400 + "latestDailyApy": 0.043744121078459486, + "latestWeeklyApy": 0.05753160393875412, + "virtualPrice": 1008154433962450000 }, { "type": "crypto-factory", "address": "0xFc1e8bf3E81383Ef07Be24c3FD146745719DE48D", - "rawVolume": 6840.951088942918, - "volumeUSD": 12375.17312505896, - "latestDailyApy": 0.19128801165759768, - "latestWeeklyApy": 0.12473802932626565, - "virtualPrice": 1002623894964526200 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.558339273447328, + "latestWeeklyApy": 0.11860881944030233, + "virtualPrice": 1002692096892060900 }, { "type": "crypto-factory", @@ -4926,11 +4935,11 @@ { "type": "crypto-factory", "address": "0x867fe27FC2462cff8890B54DfD64E6d42a9D1aC8", - "rawVolume": 38688.57598335623, - "volumeUSD": 30304.776273104486, - "latestDailyApy": 0.6541900017689839, - "latestWeeklyApy": 0.49706963782554237, - "virtualPrice": 1008321017920968300 + "rawVolume": 79282.87389902788, + "volumeUSD": 70512.70759259527, + "latestDailyApy": 0.38244633488155877, + "latestWeeklyApy": 0.9145132919049059, + "virtualPrice": 1008466316270091100 }, { "type": "crypto-factory", @@ -5133,11 +5142,11 @@ { "type": "crypto-factory", "address": "0x6bfE880Ed1d639bF80167b93cc9c56a39C1Ba2dC", - "rawVolume": 16447.4473336489, - "volumeUSD": 21914.457832924396, - "latestDailyApy": 0.23353279188373932, - "latestWeeklyApy": 0.0676821707481512, - "virtualPrice": 1003740289722049800 + "rawVolume": 312.6037838082133, + "volumeUSD": 426.5607604873686, + "latestDailyApy": 0.029351514262287992, + "latestWeeklyApy": 0.1303529696142558, + "virtualPrice": 1003713441953672400 }, { "type": "crypto-factory", @@ -5205,11 +5214,11 @@ { "type": "crypto-factory", "address": "0x0E9B5B092caD6F1c5E6bc7f89Ffe1abb5c95F1C2", - "rawVolume": 1569943.1458980632, - "volumeUSD": 17140.42896404912, - "latestDailyApy": 0.9006237593345068, - "latestWeeklyApy": 1.0171065282788216, - "virtualPrice": 1015819615371077000 + "rawVolume": 1916262.8255838468, + "volumeUSD": 22114.519187959417, + "latestDailyApy": 0.7336388739200395, + "latestWeeklyApy": 0.7228581550101421, + "virtualPrice": 1015956260273878500 }, { "type": "crypto-factory", @@ -5232,10 +5241,10 @@ { "type": "crypto-factory", "address": "0x51Bcba35e5fa277592Cea83Ad14408A0963b86f8", - "rawVolume": 0, - "volumeUSD": 0, + "rawVolume": 8030.779378429327, + "volumeUSD": 277.6563687713359, "latestDailyApy": 0, - "latestWeeklyApy": 0.010742161010135476, + "latestWeeklyApy": 0, "virtualPrice": 1001182438976821200 }, { @@ -5243,9 +5252,9 @@ "address": "0x4CC9385d9909d2Bf529A4c1E847Dc4eE01F4927A", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1000301659691246700 + "latestDailyApy": 0.07809036270924885, + "latestWeeklyApy": 0.011121479153874958, + "virtualPrice": 1000308075546037600 }, { "type": "crypto-factory", @@ -5313,20 +5322,20 @@ { "type": "crypto-factory", "address": "0x9409280DC1e6D33AB7A8C6EC03e5763FB61772B5", - "rawVolume": 65834.75865533367, - "volumeUSD": 242321.536730146, - "latestDailyApy": 0.9404890268499111, - "latestWeeklyApy": 0.6293289166126481, - "virtualPrice": 1013410689788813700 + "rawVolume": 4912.521752798721, + "volumeUSD": 18043.4994020168, + "latestDailyApy": 0.03881192741785888, + "latestWeeklyApy": 0.5433653884042045, + "virtualPrice": 1013433559803886700 }, { "type": "crypto-factory", "address": "0xB5ae2A6b084f59ff9EF6b2E79302A1878306D58c", - "rawVolume": 5135980.430732528, - "volumeUSD": 76522.89143420651, - "latestDailyApy": 0, - "latestWeeklyApy": 0.5568580318291882, - "virtualPrice": 1004451453437759100 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.16950839684686247, + "latestWeeklyApy": 1.042730255885349, + "virtualPrice": 1005152331608905500 }, { "type": "crypto-factory", @@ -5358,20 +5367,20 @@ { "type": "crypto-factory", "address": "0xBDFAe7D2cF2E69E27b75a5287ECD3808F62B5a76", - "rawVolume": 10699.64355557739, - "volumeUSD": 1046.106840473947, - "latestDailyApy": 0.09724788171159293, - "latestWeeklyApy": 0.7457408018363365, - "virtualPrice": 1001823976268810000 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.16453306514552235, + "latestWeeklyApy": 1.1532139210077563, + "virtualPrice": 1002115926782208500 }, { "type": "crypto-factory", "address": "0x0f3159811670c117c372428D4E69AC32325e4D0F", - "rawVolume": 654.4753650039477, - "volumeUSD": 1249813.2363713568, - "latestDailyApy": 2.4279158743863043, - "latestWeeklyApy": 2.2359420193789497, - "virtualPrice": 1017980135421999500 + "rawVolume": 221.41854765383567, + "volumeUSD": 428943.53085247, + "latestDailyApy": 1.868998929557988, + "latestWeeklyApy": 2.237462956877392, + "virtualPrice": 1017552392779272700 }, { "type": "crypto-factory", @@ -5406,8 +5415,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.07613957951759787, - "virtualPrice": 1003861486002597800 + "latestWeeklyApy": 0.010135552511725265, + "virtualPrice": 1003879405832692400 }, { "type": "crypto-factory", @@ -5421,11 +5430,11 @@ { "type": "crypto-factory", "address": "0x442F37cfD85D3f35e576AD7D63bBa7Bb36fCFe4a", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.5754229144710354, - "virtualPrice": 1014112996373705000 + "rawVolume": 14.190888435430102, + "volumeUSD": 8.267589674509006, + "latestDailyApy": 0.33475062398791167, + "latestWeeklyApy": 0.04762219119027744, + "virtualPrice": 1014168817815293400 }, { "type": "crypto-factory", @@ -5439,29 +5448,29 @@ { "type": "crypto-factory", "address": "0xe7c6E0A739021CdbA7aAC21b4B728779EeF974D9", - "rawVolume": 13.192842792741267, - "volumeUSD": 12656.832956616316, - "latestDailyApy": 1.3158194918526356, - "latestWeeklyApy": 1.316013081650006, - "virtualPrice": 1000169799704501900 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 1.4377346219038558, + "latestWeeklyApy": 1.5106881112959472, + "virtualPrice": 1000211874669909100 }, { "type": "crypto-factory", "address": "0x41eA4045de2676727883aa0B4E43D7e32261f559", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.2435160461730063, - "latestWeeklyApy": 0.24603768280011265, - "virtualPrice": 1000534794492865300 + "latestDailyApy": 1.45020384931249, + "latestWeeklyApy": 1.4655552064580777, + "virtualPrice": 1000543653199660200 }, { "type": "crypto-factory", "address": "0x73069892f6750CCaaAbabaDC54b6b6b36B3A057D", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.3865977369184572, - "latestWeeklyApy": 1.482554260774757, - "virtualPrice": 1000605037631803800 + "latestDailyApy": 1.3493007216606974, + "latestWeeklyApy": 1.388813068698615, + "virtualPrice": 1000627835465784000 }, { "type": "crypto-factory", @@ -5547,11 +5556,11 @@ { "type": "crypto-factory", "address": "0x72725C0C879489986D213A9A6D2116dE45624c1c", - "rawVolume": 13467.849497941903, - "volumeUSD": 21388.39330039182, - "latestDailyApy": 0.9345579681062199, - "latestWeeklyApy": 0.8766004370135416, - "virtualPrice": 1004030047329785900 + "rawVolume": 7199.318651196293, + "volumeUSD": 11143.812284394991, + "latestDailyApy": 3.9898857746141436, + "latestWeeklyApy": 2.2024212871002202, + "virtualPrice": 1004358333285823600 }, { "type": "crypto-factory", @@ -5574,38 +5583,38 @@ { "type": "crypto-factory", "address": "0x056ef502C1Fc5335172bc95EC4cAE16C2eB9b5b6", - "rawVolume": 92141.31197764997, - "volumeUSD": 6536.679661284893, - "latestDailyApy": 0.002093627381971608, - "latestWeeklyApy": 0.04147526044595562, - "virtualPrice": 1000305437617770800 + "rawVolume": 9060.735444140806, + "volumeUSD": 699.6288406332085, + "latestDailyApy": 0.012857728364901178, + "latestWeeklyApy": 0.06813387812436567, + "virtualPrice": 1000344557964029200 }, { "type": "crypto-factory", "address": "0x47D5E1679Fe5f0D9f0A657c6715924e33Ce05093", - "rawVolume": 1184.8320731417596, - "volumeUSD": 3795.5230344442616, - "latestDailyApy": 0.08580272635621, - "latestWeeklyApy": 0.21848007524585267, - "virtualPrice": 1001105968190319200 + "rawVolume": 3742.608858601752, + "volumeUSD": 11608.533618972146, + "latestDailyApy": 0.32916878301632035, + "latestWeeklyApy": 0.09323674197674325, + "virtualPrice": 1001131065032986800 }, { "type": "crypto-factory", "address": "0x5ac4fceE123dcaDfAe22bc814c4Cc72b96c93F38", - "rawVolume": 31861.412191259427, - "volumeUSD": 11593.33302189958, - "latestDailyApy": 0.15871012444441668, - "latestWeeklyApy": 0.2663085745782112, - "virtualPrice": 1004690797379205600 + "rawVolume": 16614.941994430883, + "volumeUSD": 12210.989988072777, + "latestDailyApy": 0.0014419715721469828, + "latestWeeklyApy": 0.11700959780587272, + "virtualPrice": 1004659715097702300 }, { "type": "crypto-factory", "address": "0xAF4264916B467e2c9C8aCF07Acc22b9EDdDaDF33", - "rawVolume": 840.9343802321224, - "volumeUSD": 507.10987653728944, - "latestDailyApy": 0.167237007480181, - "latestWeeklyApy": 0.21179728470428483, - "virtualPrice": 1003670765695653200 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.030338020927334064, + "virtualPrice": 1003655265250552300 }, { "type": "crypto-factory", @@ -5622,7 +5631,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.03839491410502216, + "latestWeeklyApy": 0, "virtualPrice": 1006298043196510700 }, { @@ -5637,11 +5646,11 @@ { "type": "crypto-factory", "address": "0x7E650c700b0801e717B352E55a582AFd928aa094", - "rawVolume": 2363.125016347703, - "volumeUSD": 1270.618382274322, - "latestDailyApy": 0.49410381912402546, - "latestWeeklyApy": 0.2832459608334448, - "virtualPrice": 1000442319993954800 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.2649969297533916, + "latestWeeklyApy": 0.28323620873345057, + "virtualPrice": 1000645789459435800 }, { "type": "crypto-factory", @@ -5691,11 +5700,11 @@ { "type": "crypto-factory", "address": "0x880F2fB3704f1875361DE6ee59629c6c6497a5E3", - "rawVolume": 306393.37084069225, - "volumeUSD": 155514.7461241079, - "latestDailyApy": 0.10760447926845274, - "latestWeeklyApy": 0.12388842923920507, - "virtualPrice": 1001736760511643500 + "rawVolume": 153331.68372649726, + "volumeUSD": 77698.72852651219, + "latestDailyApy": 0.048937613233901445, + "latestWeeklyApy": 0.06495985381305136, + "virtualPrice": 1001860611087392900 }, { "type": "crypto-factory", @@ -5703,8 +5712,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.026744810806045294, - "virtualPrice": 1001006693761490400 + "latestWeeklyApy": 0.14842846020293177, + "virtualPrice": 1001139604652346000 }, { "type": "crypto-factory", @@ -5748,8 +5757,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.007823462773970391, - "virtualPrice": 1000139094962721500 + "latestWeeklyApy": 0.005165121255901184, + "virtualPrice": 1000142074814923400 }, { "type": "crypto-factory", @@ -5783,9 +5792,9 @@ "address": "0x7fb53345f1B21aB5d9510ADB38F7d3590BE6364b", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.16735568576820015, - "latestWeeklyApy": 0.04537687388004308, - "virtualPrice": 1000177762227275000 + "latestDailyApy": 0, + "latestWeeklyApy": 0.02447118000286075, + "virtualPrice": 1000170356671436700 }, { "type": "crypto-factory", @@ -6114,11 +6123,11 @@ { "type": "crypto-factory", "address": "0x50AC42817A6De2997fA012C444896ab78A7e8DEa", - "rawVolume": 14222.306580867005, - "volumeUSD": 29359.071059905404, - "latestDailyApy": 0.026438882619594928, - "latestWeeklyApy": 0.16955123456334764, - "virtualPrice": 1001038749740596200 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.006520242511487417, + "latestWeeklyApy": 0.012203799482746192, + "virtualPrice": 1001043618534035700 }, { "type": "crypto-factory", @@ -6132,47 +6141,47 @@ { "type": "factory-crvusd", "address": "0x4DEcE678ceceb27446b35C672dC7d61F30bAD69E", - "rawVolume": 4825036.18442383, - "volumeUSD": 4824562.533823876, - "latestDailyApy": 0.5716168825002921, - "latestWeeklyApy": 0.33007623724568, - "virtualPrice": 1003792909422126300 + "rawVolume": 962597.100932353, + "volumeUSD": 962501.5136970077, + "latestDailyApy": 0.04075679915442887, + "latestWeeklyApy": 0.16778506116603698, + "virtualPrice": 1003809596826821900 }, { "type": "factory-crvusd", "address": "0x390f3595bCa2Df7d23783dFd126427CCeb997BF4", - "rawVolume": 2533862.412789793, - "volumeUSD": 2534797.7747125356, - "latestDailyApy": 0.6929922500641617, - "latestWeeklyApy": 0.3898812763918791, - "virtualPrice": 1003797155245857000 + "rawVolume": 1098062.118595174, + "volumeUSD": 1098110.9442468649, + "latestDailyApy": 0.13897258451165406, + "latestWeeklyApy": 0.21385277537757652, + "virtualPrice": 1003819402352317800 }, { "type": "factory-crvusd", "address": "0xCa978A0528116DDA3cbA9ACD3e68bc6191CA53D0", - "rawVolume": 44165.542228927516, - "volumeUSD": 44161.22953174321, - "latestDailyApy": 0.05970422309262702, - "latestWeeklyApy": 0.12110196930783523, - "virtualPrice": 1001882345967473700 + "rawVolume": 386627.84652807616, + "volumeUSD": 386594.94603739533, + "latestDailyApy": 0.19398025725838597, + "latestWeeklyApy": 0.12717956815833098, + "virtualPrice": 1001905196582806100 }, { "type": "factory-crvusd", "address": "0x34D655069F4cAc1547E4C8cA284FfFF5ad4A8db0", - "rawVolume": 145160.31768748726, - "volumeUSD": 145157.29931556387, - "latestDailyApy": 0.1076653978802522, - "latestWeeklyApy": 0.2326000175991494, - "virtualPrice": 1001081726293980000 + "rawVolume": 387409.75007690076, + "volumeUSD": 387361.0044074675, + "latestDailyApy": 0.040202257636501315, + "latestWeeklyApy": 0.08434512076231915, + "virtualPrice": 1001095006223322400 }, { "type": "factory-crvusd", "address": "0x0CD6f267b2086bea681E922E19D40512511BE538", - "rawVolume": 20806.684582672406, - "volumeUSD": 20805.87099771673, - "latestDailyApy": 0.07374688544701247, - "latestWeeklyApy": 0.21537765656758356, - "virtualPrice": 1000546678142271900 + "rawVolume": 39599.1091438386, + "volumeUSD": 39600.6775442608, + "latestDailyApy": 0.018034641394937267, + "latestWeeklyApy": 0.04777430808640126, + "virtualPrice": 1000553847624641400 }, { "type": "factory-crvusd", @@ -6186,123 +6195,132 @@ { "type": "factory-crvusd", "address": "0xBe426b0f37c112dd20d5866769c8034171567b31", - "rawVolume": 44052.56446622339, - "volumeUSD": 44074.90754764085, - "latestDailyApy": 0.07177497884875983, - "latestWeeklyApy": 0.1827613366120584, - "virtualPrice": 1000258818549694300 + "rawVolume": 1001.2614764536302, + "volumeUSD": 999.9052700675804, + "latestDailyApy": 0.19255453956961155, + "latestWeeklyApy": 0.06398277010315478, + "virtualPrice": 1000269156141064100 }, { "type": "factory-crvusd", "address": "0x94cC50e4521bD271C1a997a3A4Dc815C2F920b41", - "rawVolume": 143686.33895103875, - "volumeUSD": 143682.34362743498, - "latestDailyApy": 0.062394607218840825, - "latestWeeklyApy": 0.08887639163903671, - "virtualPrice": 1000165367181761300 + "rawVolume": 112565.0982875551, + "volumeUSD": 112553.23722512409, + "latestDailyApy": 0.14999234453303423, + "latestWeeklyApy": 0.0933196447516993, + "virtualPrice": 1000181599127916800 }, { "type": "factory-crvusd", "address": "0x86152dF0a0E321Afb3B0B9C4deb813184F365ADa", - "rawVolume": 11624.652681024476, - "volumeUSD": 11630.805668942314, - "latestDailyApy": 0.0001447310290281223, - "latestWeeklyApy": 0.6543772488574628, - "virtualPrice": 1000495374375978200 + "rawVolume": 35994.34404527431, + "volumeUSD": 35866.2259171483, + "latestDailyApy": 1.4610641675698366, + "latestWeeklyApy": 0.8809037157323951, + "virtualPrice": 1000664159429880600 }, { "type": "factory-crvusd", "address": "0x1982Fe483f4bff067A2183c98fA231423d41E92B", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.43787498403875524, - "latestWeeklyApy": 0, - "virtualPrice": 1000072870726150800 + "latestDailyApy": 0, + "latestWeeklyApy": 1.3871895781817134, + "virtualPrice": 1000325954883408800 }, { "type": "factory-crvusd", "address": "0xA8a02c7D9ada50444F8c658F43Dc440675B21797", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.8092326749566725, - "latestWeeklyApy": 0, - "virtualPrice": 1000042672996369300 + "rawVolume": 4202.901404916023, + "volumeUSD": 4203.269006343647, + "latestDailyApy": 0.4690974840606543, + "latestWeeklyApy": 1.3828343731480564, + "virtualPrice": 1000284808655128000 }, { "type": "factory-crvusd", "address": "0xfC636D819d1a98433402eC9dEC633d864014F28C", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.0013643767528215278, - "latestWeeklyApy": 0.05653747426492828, - "virtualPrice": 1000260734035895900 + "latestDailyApy": 0, + "latestWeeklyApy": 0.14762035616338043, + "virtualPrice": 1000289072846008000 }, { "type": "factory-crvusd", "address": "0x8272E1A3dBef607C04AA6e5BD3a1A134c8ac063B", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1000118426035313500 + "latestDailyApy": 0.10842658410086248, + "latestWeeklyApy": 1.0267844294351347, + "virtualPrice": 1000314958907087100 }, { "type": "factory-crvusd", "address": "0xeCDd0cE505da71cd9dE855CD6804BA1e8C7bdB07", + "rawVolume": 146079.34543724754, + "volumeUSD": 146378.0140519856, + "latestDailyApy": 0.6461015853941099, + "latestWeeklyApy": 0.3059444876449158, + "virtualPrice": 1000144415809607400 + }, + { + "type": "factory-crvusd", + "address": "0xAe9e8c9A548505c9ad22a412354186151363c09e", "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.28553145148044745, - "virtualPrice": 1000085659940404000 + "latestWeeklyApy": 0, + "virtualPrice": 0 }, { "type": "factory-tricrypto", "address": "0x7F86Bf177Dd4F3494b841a37e810A34dD56c829B", - "rawVolume": 656350.6280547056, - "volumeUSD": 1375931.138732212, - "latestDailyApy": 0.33200928446244227, - "latestWeeklyApy": 0.19720087665797692, - "virtualPrice": 1001579443084926500 + "rawVolume": 1093847.3898980739, + "volumeUSD": 3379457.299369884, + "latestDailyApy": 0.3561305988445618, + "latestWeeklyApy": 0.1642401045646391, + "virtualPrice": 1001620079259317100 }, { "type": "factory-tricrypto", "address": "0xf5f5B97624542D72A9E06f04804Bf81baA15e2B4", - "rawVolume": 591097.6079775054, - "volumeUSD": 1233976.075954827, - "latestDailyApy": 0.25503137961391253, - "latestWeeklyApy": 0.25696277207709617, - "virtualPrice": 1000368115353210600 + "rawVolume": 768203.9344276238, + "volumeUSD": 1683284.5519975224, + "latestDailyApy": 0.06821720174541301, + "latestWeeklyApy": 0.12382789468623479, + "virtualPrice": 1000380161157220400 }, { "type": "factory-tricrypto", "address": "0x2889302a794dA87fBF1D6Db415C1492194663D13", - "rawVolume": 45306.28417064734, - "volumeUSD": 44040.80952129084, - "latestDailyApy": 1.5421326350532778, - "latestWeeklyApy": 1.5414392986708154, - "virtualPrice": 1000340660496260400 + "rawVolume": 24822.996510559085, + "volumeUSD": 46276.37455870238, + "latestDailyApy": 1.4774256442455422, + "latestWeeklyApy": 1.5108330136540313, + "virtualPrice": 1000310180533828100 }, { "type": "factory-tricrypto", "address": "0x5426178799ee0a0181A89b4f57eFddfAb49941Ec", - "rawVolume": 5276.330172476369, - "volumeUSD": 28209.221135857126, - "latestDailyApy": 1.3045877315399634, - "latestWeeklyApy": 0.48189012759987104, - "virtualPrice": 1001066601471379800 + "rawVolume": 646.8096541298258, + "volumeUSD": 6224.276439993103, + "latestDailyApy": 1.334846119066535, + "latestWeeklyApy": 0.8292553674782432, + "virtualPrice": 1001278026356866800 }, { "type": "factory-tricrypto", "address": "0x4eBdF703948ddCEA3B11f675B4D1Fba9d2414A14", - "rawVolume": 520074.58833406173, - "volumeUSD": 457416.12705740426, - "latestDailyApy": 1.5040698090539095, - "latestWeeklyApy": 6.139416027934841, - "virtualPrice": 1020450444727747500 + "rawVolume": 649729.706327671, + "volumeUSD": 608961.8003355569, + "latestDailyApy": 0.2809088845322494, + "latestWeeklyApy": 0.7549462249182071, + "virtualPrice": 1020682744805217200 } ], - "totalVolume": 240020761.1930441, - "cryptoVolume": 11525356.093785543, - "cryptoShare": 4.801816324761973, + "totalVolume": 360378315.95956296, + "cryptoVolume": 323044482.1627055, + "cryptoShare": 89.64037730809348, "subgraphHasErrors": false } diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-moonbeam.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-moonbeam.json index 5096bb23..4b60d4c4 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-moonbeam.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-moonbeam.json @@ -6,8 +6,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1006907334818289400 + "latestWeeklyApy": 9.900784192495848e-7, + "virtualPrice": 1006907335010004200 }, { "type": "stable-factory", @@ -21,10 +21,10 @@ { "type": "stable-factory", "address": "0x0fFc46cD9716a96d8D89E1965774A70Dcb851E50", - "rawVolume": 0, - "volumeUSD": 0, + "rawVolume": 5.9760902699, + "volumeUSD": 29.9884584670414, "latestDailyApy": 0, - "latestWeeklyApy": 0.008275489166020833, + "latestWeeklyApy": 0, "virtualPrice": 1001595389227764700 }, { @@ -42,7 +42,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.022272812864265745, + "latestWeeklyApy": 0, "virtualPrice": 1006873091849009800 }, { @@ -138,11 +138,11 @@ { "type": "stable-factory", "address": "0xc6e37086D09ec2048F151D11CdB9F9BbbdB7d685", - "rawVolume": 82.53926011415, - "volumeUSD": 447.37782371285215, - "latestDailyApy": 0.022406615287029474, - "latestWeeklyApy": 0.024320337953276372, - "virtualPrice": 1081871041408105100 + "rawVolume": 741.5255973735999, + "volumeUSD": 4019.505571698267, + "latestDailyApy": 0, + "latestWeeklyApy": 0.01156711335048577, + "virtualPrice": 1081872783773719400 }, { "type": "stable-factory", @@ -165,7 +165,7 @@ { "type": "stable-factory", "address": "0x94A97FEF4D1Bf4707Cc1679CabbcC100d9a63439", - "rawVolume": 0, + "rawVolume": 0.000510035, "volumeUSD": 0, "latestDailyApy": 0, "latestWeeklyApy": 0, @@ -174,11 +174,11 @@ { "type": "stable-factory", "address": "0xFF6DD348e6eecEa2d81D4194b60c5157CD9e64f4", - "rawVolume": 33630.107472342606, - "volumeUSD": 33559.47726431963, - "latestDailyApy": 0.9708825012147759, - "latestWeeklyApy": 0.4670473070543135, - "virtualPrice": 1001506071048134700 + "rawVolume": 6666.6643282044915, + "volumeUSD": 6660.944557239035, + "latestDailyApy": 0.07261979056167878, + "latestWeeklyApy": 0.4836069986628999, + "virtualPrice": 1001572487695694700 }, { "type": "stable-factory", @@ -246,14 +246,14 @@ { "type": "stable-factory", "address": "0x255834B4F17610cA8CbEfceB177235F15DaDF9D2", - "rawVolume": 33728645.17448731, - "volumeUSD": 24020780.77518283, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, "latestWeeklyApy": 5.05198438147938, "virtualPrice": 1373538070754374100 } ], - "totalVolume": 24054787.63027086, + "totalVolume": 10710.438587404344, "cryptoVolume": 0, "cryptoShare": 0, "subgraphHasErrors": false diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-optimism.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-optimism.json index 87afe258..44a39cc8 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-optimism.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-optimism.json @@ -3,47 +3,47 @@ { "type": "main", "address": "0x1337BedC9D22ecbe766dF105c9623922A27963EC", - "rawVolume": 5109672.061048977, - "volumeUSD": 5109818.201102232, - "latestDailyApy": 1.3266871098569721, - "latestWeeklyApy": 1.179375014511841, - "virtualPrice": 1019643212215520800 + "rawVolume": 2034699.4050282717, + "volumeUSD": 2034667.5662111195, + "latestDailyApy": 0.888379360584235, + "latestWeeklyApy": 1.1549074527386072, + "virtualPrice": 1019831624046260100 }, { "type": "stable-factory", "address": "0x29A3d66B30Bc4AD674A4FDAF27578B64f6afbFe7", - "rawVolume": 52.824255574222434, - "volumeUSD": 52.76944012864408, - "latestDailyApy": 1.1788880780209787, - "latestWeeklyApy": 1.2184872511874278, - "virtualPrice": 1004403158758359200 + "rawVolume": 99.22038989673375, + "volumeUSD": 99.18263227518196, + "latestDailyApy": 0.8453699189757247, + "latestWeeklyApy": 2.3657159463766675, + "virtualPrice": 1004822826063019600 }, { "type": "main", "address": "0x66B5792ED50a2a7405Ea75C4B6B1913eF4E46661", - "rawVolume": 1.0170185, - "volumeUSD": 1.0171971789891605, - "latestDailyApy": 3.751718449561592, - "latestWeeklyApy": 2.907808015717128, - "virtualPrice": 1225243588556053500 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 5.675123569511653, + "latestWeeklyApy": 3.9230619389138743, + "virtualPrice": 1226027572396842800 }, { "type": "main", "address": "0xB90B9B1F91a01Ea22A182CD84C1E22222e39B415", - "rawVolume": 1.235798888641354, - "volumeUSD": 2269.976984242507, - "latestDailyApy": 2.004551699063395, - "latestWeeklyApy": 1.8450588331833995, - "virtualPrice": 1033247180851749200 + "rawVolume": 40.463151251677374, + "volumeUSD": 75021.59015746435, + "latestDailyApy": 1.948318629428547, + "latestWeeklyApy": 1.701085657490986, + "virtualPrice": 1033526308783305500 }, { "type": "stable-factory", "address": "0x061b87122Ed14b9526A813209C8a59a633257bAb", - "rawVolume": 214647.69432107112, - "volumeUSD": 213508.91575123402, - "latestDailyApy": 1.0020740868961209, - "latestWeeklyApy": 0.8441497761739303, - "virtualPrice": 1016816453902197500 + "rawVolume": 168785.36029093576, + "volumeUSD": 167723.23543263797, + "latestDailyApy": 0.3981176880414772, + "latestWeeklyApy": 0.9911463884757721, + "virtualPrice": 1016981583273973900 }, { "type": "stable-factory", @@ -51,8 +51,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 68231531718821890000 + "latestWeeklyApy": 0.004491629167024946, + "virtualPrice": 68231590654255060000 }, { "type": "stable-factory", @@ -75,11 +75,11 @@ { "type": "stable-factory", "address": "0x6645237fb81fe7227AA2Fa2A244D23A5AC0DA1cd", - "rawVolume": 323.9026072283403, - "volumeUSD": 320.83688746694304, - "latestDailyApy": 0.43036244559278014, - "latestWeeklyApy": 0.37831593574164657, - "virtualPrice": 1029850858421794600 + "rawVolume": 179.23193357787738, + "volumeUSD": 177.02676428872977, + "latestDailyApy": 0.1504205592264718, + "latestWeeklyApy": 0.8399972761060637, + "virtualPrice": 1030004445027484900 }, { "type": "stable-factory", @@ -129,11 +129,11 @@ { "type": "stable-factory", "address": "0x7Bc5728BC2b59B45a58d9A576E2Ffc5f0505B35E", - "rawVolume": 2.2337274215966456, - "volumeUSD": 4060.8287624425498, - "latestDailyApy": 0.15232332421637462, - "latestWeeklyApy": 0.10731170279267843, - "virtualPrice": 1005816990523177300 + "rawVolume": 4.10411079023371, + "volumeUSD": 7609.207687818346, + "latestDailyApy": 0.031351306038329696, + "latestWeeklyApy": 0.2530670822221248, + "virtualPrice": 1005861687575720300 }, { "type": "stable-factory", @@ -147,11 +147,11 @@ { "type": "stable-factory", "address": "0x9F2fE3500B1a7E285FDc337acacE94c480e00130", - "rawVolume": 0.000003144441738935, - "volumeUSD": 0.09115409724556267, - "latestDailyApy": 0.008294417872622972, - "latestWeeklyApy": 0.13871907689348983, - "virtualPrice": 1003171798505278300 + "rawVolume": 0.29981302358852174, + "volumeUSD": 8806.308882446952, + "latestDailyApy": 0.002862964543681734, + "latestWeeklyApy": 0.0047648273935108065, + "virtualPrice": 1003172489748135300 }, { "type": "stable-factory", @@ -194,9 +194,9 @@ "address": "0x54DCFE120d608551f9010d3b66620D230fD5c11B", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6441735617183086, - "latestWeeklyApy": 0.6657927849036849, - "virtualPrice": 1655891524527072300 + "latestDailyApy": 0.34676188590214707, + "latestWeeklyApy": 1.8183567378178056, + "virtualPrice": 1656436519911639800 }, { "type": "stable-factory", @@ -365,18 +365,18 @@ "address": "0xAE13DFf69D84d87aE50ad841377d5F9d33d857Cf", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.0891105424541747, - "latestWeeklyApy": 0.9683467987439354, - "virtualPrice": 1003275958394898000 + "latestDailyApy": 0.7295701235112029, + "latestWeeklyApy": 0.9482703396572312, + "virtualPrice": 1003428323535510300 }, { "type": "stable-factory", "address": "0xa2f1E7E65bfdBD264D6e3cB4dA50eDF7fc77b861", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3916220100909751, - "latestWeeklyApy": 0.3483727509333123, - "virtualPrice": 1003235059779289300 + "latestDailyApy": 0.26263772734698154, + "latestWeeklyApy": 0.341170466487406, + "virtualPrice": 1003290032460211500 }, { "type": "stable-factory", @@ -453,11 +453,11 @@ { "type": "stable-factory", "address": "0x810D1AaA4Cd8F21c23bB648F2dfb9DC232A01F09", - "rawVolume": 27853.773022274196, - "volumeUSD": 27814.163408122, - "latestDailyApy": 0.6967203841191649, - "latestWeeklyApy": 1.338133932236829, - "virtualPrice": 1003896554702986200 + "rawVolume": 25094.56320797222, + "volumeUSD": 24998.10970209165, + "latestDailyApy": 0.8641758800013388, + "latestWeeklyApy": 0.6661752034980539, + "virtualPrice": 1004005664155408400 }, { "type": "stable-factory", @@ -570,11 +570,11 @@ { "type": "stable-factory", "address": "0xBBaf6181FBf0C624699c7E56Ba109a53ECa846F2", - "rawVolume": 0.03981810821776807, - "volumeUSD": 0.03981810821776807, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1000000000000000000 + "latestWeeklyApy": 0.20822134527305192, + "virtualPrice": 1000040003335843800 }, { "type": "stable-factory", @@ -597,11 +597,11 @@ { "type": "stable-factory", "address": "0x1Dc5c0f8668a9F54ED922171d578011850ca0341", - "rawVolume": 0.000248164590088719, - "volumeUSD": 7.209910087740265, - "latestDailyApy": 0.00032893661190414036, - "latestWeeklyApy": 0.09429619732730377, - "virtualPrice": 1000206297730427800 + "rawVolume": 0.010089413166776225, + "volumeUSD": 296.74527105218726, + "latestDailyApy": 0, + "latestWeeklyApy": 0.02732046036881819, + "virtualPrice": 1000211543058821500 }, { "type": "stable-factory", @@ -653,9 +653,9 @@ "address": "0x518D6ae98818C971B3fa1e4186CC573F1E3ebE68", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 4.364045968891039, - "latestWeeklyApy": 3.6092036318889242, - "virtualPrice": 1002445107354454300 + "latestDailyApy": 4.872681697368986, + "latestWeeklyApy": 4.000267521370748, + "virtualPrice": 1003084706715047800 }, { "type": "stable-factory", @@ -667,7 +667,7 @@ "virtualPrice": 0 } ], - "totalVolume": 5357854.050415341, + "totalVolume": 2319398.972741195, "cryptoVolume": 0, "cryptoShare": 0, "subgraphHasErrors": false diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-polygon.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-polygon.json index aedff74f..31cd7817 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-polygon.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-polygon.json @@ -3,20 +3,20 @@ { "type": "main", "address": "0xC2d95EEF97Ec6C17551d45e77B590dc1F9117C67", - "rawVolume": 0.00185622, - "volumeUSD": 54.23995922271905, - "latestDailyApy": 0.004303632467728136, - "latestWeeklyApy": 0.01900389558184834, - "virtualPrice": 1011020974330572500 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.0010698567641131973, + "latestWeeklyApy": 0.01264430322227561, + "virtualPrice": 1011023313374552200 }, { "type": "main", "address": "0x445FE580eF8d70FF569aB36e80c647af338db351", - "rawVolume": 1257767.8447107854, - "volumeUSD": 1257762.9631370166, - "latestDailyApy": 3.6415250884938466, - "latestWeeklyApy": 2.5669119462821577, - "virtualPrice": 1080871586863099300 + "rawVolume": 12945.628092715186, + "volumeUSD": 12945.628092715186, + "latestDailyApy": 1.8022223200310217, + "latestWeeklyApy": 1.9127632051660681, + "virtualPrice": 1081159681813322600 }, { "type": "stable-factory", @@ -41,9 +41,9 @@ "address": "0x10f38a56720fF3A16bD04754e9b49E1f39d4aA4a", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 3.107407311536803, - "latestWeeklyApy": 2.192262020564084, - "virtualPrice": 1071468148389478800 + "latestDailyApy": 1.5398596046129809, + "latestWeeklyApy": 1.6342833695291548, + "virtualPrice": 1071712474704345200 }, { "type": "stable-factory", @@ -68,18 +68,18 @@ "address": "0xcE113ffc5B4C9F088Bb0ad9459e10387f232C3e3", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.9348809238896028, - "latestWeeklyApy": 0.6617049806908026, - "virtualPrice": 13480517452487102000 + "latestDailyApy": 0.5499369546812849, + "latestWeeklyApy": 0.5970578926303816, + "virtualPrice": 13481717222484204000 }, { "type": "stable-factory", "address": "0x78A8cC2A24FcC5B358Bb8A371072403CE092D599", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.5025228294876625, - "latestWeeklyApy": 1.3536312953958074, - "virtualPrice": 4753560833879647000 + "latestDailyApy": 1.5109373910683566, + "latestWeeklyApy": 1.2877573171764967, + "virtualPrice": 4754536680378875000 }, { "type": "stable-factory", @@ -102,29 +102,29 @@ { "type": "stable-factory", "address": "0x43910e07554312FC7A43e4B71D16A72dDCB5Ec5F", - "rawVolume": 10.734387470889628, - "volumeUSD": 6.30791498381352, - "latestDailyApy": 0, - "latestWeeklyApy": 1.0945342894308263, - "virtualPrice": 1015276636928222800 + "rawVolume": 1.4008386675908187, + "volumeUSD": 0.7672011849246646, + "latestDailyApy": 0.2781688438881824, + "latestWeeklyApy": 0.18972907084282564, + "virtualPrice": 1015313647603531100 }, { "type": "stable-factory", "address": "0xc729a8bFeBB7f9089112c081565EB4A0031612Ba", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.233822319650546, - "latestWeeklyApy": 0.87291056904506, - "virtualPrice": 2797143621685419000 + "latestDailyApy": 0.6143551226514887, + "latestWeeklyApy": 0.6519023321589046, + "virtualPrice": 2797399230953681400 }, { "type": "stable-factory", "address": "0x5e5A23b52Cb48F5E70271Be83079cA5bC9c9e9ac", - "rawVolume": 418.62453983858387, - "volumeUSD": 410.86460814736347, - "latestDailyApy": 4.501945625963488, - "latestWeeklyApy": 3.3540945147106482, - "virtualPrice": 1475753896044349000 + "rawVolume": 125.76015681372357, + "volumeUSD": 123.39110407198478, + "latestDailyApy": 1.2434956112018725, + "latestWeeklyApy": 3.3480672336917428, + "virtualPrice": 1476511257565931300 }, { "type": "stable-factory", @@ -141,17 +141,17 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 1.5382692766748862, - "virtualPrice": 1007909339925984900 + "latestWeeklyApy": 0.03895456380609286, + "virtualPrice": 1007916889053754400 }, { "type": "stable-factory", "address": "0x850e1B0b203f9B0EBFC9648EF8c7A6f211A200AE", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.23840845611489137, - "latestWeeklyApy": 0.1689626643731179, - "virtualPrice": 1018111719574319700 + "latestDailyApy": 0.11897732618368906, + "latestWeeklyApy": 0.12625832466357512, + "virtualPrice": 1018129782824204500 }, { "type": "stable-factory", @@ -284,9 +284,9 @@ "address": "0xE4Eb7E0eCB5099fCe9505fA0DaE72EFaFF73c4cb", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": -100, - "latestWeeklyApy": 0, - "virtualPrice": 0 + "latestDailyApy": 0, + "latestWeeklyApy": 0.6081642503928286, + "virtualPrice": 1072057405331865600 }, { "type": "stable-factory", @@ -311,9 +311,9 @@ "address": "0x162B21ba1a90Dd9384C615192FA4053217D2A8Db", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3457724308923771, - "latestWeeklyApy": 0.1819163852511796, - "virtualPrice": 1009195787233766800 + "latestDailyApy": 0.12260068188847395, + "latestWeeklyApy": 0.14446289122604927, + "virtualPrice": 1009214260904653400 }, { "type": "stable-factory", @@ -354,11 +354,11 @@ { "type": "stable-factory", "address": "0xAd326c253A84e9805559b73A08724e11E49ca651", - "rawVolume": 18823.662119996086, - "volumeUSD": 20456.799614854335, - "latestDailyApy": 0.9642294344331725, - "latestWeeklyApy": 0.7819518542112824, - "virtualPrice": 1018098619156207100 + "rawVolume": 998.4358753299231, + "volumeUSD": 1098.2087154540313, + "latestDailyApy": 0, + "latestWeeklyApy": 0.3574617595363039, + "virtualPrice": 1018141720343632000 }, { "type": "stable-factory", @@ -429,7 +429,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.6147658868202122, + "latestWeeklyApy": 0, "virtualPrice": 9745706107757418000 }, { @@ -437,9 +437,9 @@ "address": "0x0E9b542172200dF93eaF4C6EDC919F9923567517", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 3.2090309165707653, - "latestWeeklyApy": 2.2635953776553697, - "virtualPrice": 1391868085435559700 + "latestDailyApy": 1.58982684513167, + "latestWeeklyApy": 1.6873209802201528, + "virtualPrice": 1392195691480300300 }, { "type": "stable-factory", @@ -464,9 +464,9 @@ "address": "0xcc3520A1DDb017740f1a7a267FFBeD797aDf9d49", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.24079504896630244, - "latestWeeklyApy": 0.17066349663763525, - "virtualPrice": 1003816226012093700 + "latestDailyApy": 0.1201570358402071, + "latestWeeklyApy": 0.1275163417676417, + "virtualPrice": 1003834212710669300 }, { "type": "stable-factory", @@ -491,9 +491,9 @@ "address": "0x20e3f345E229bE9CE08488Ae79E906955183EBAB", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.3247671503723737, - "latestWeeklyApy": 0.2301481764587443, - "virtualPrice": 1004421581826944400 + "latestDailyApy": 0.16202507157607737, + "latestWeeklyApy": 0.1719495090021672, + "virtualPrice": 1004445845525429100 }, { "type": "stable-factory", @@ -545,9 +545,9 @@ "address": "0x69FC13493240C274a798e9DC9ce2219bfa1B1235", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 2.9365325487263005, - "latestWeeklyApy": 2.072160132830003, - "virtualPrice": 1034604120971087400 + "latestDailyApy": 1.45589974442355, + "latestWeeklyApy": 1.5451004797290446, + "virtualPrice": 1034827262816724700 }, { "type": "stable-factory", @@ -644,9 +644,9 @@ "address": "0x9a30e9A76aFbDf52f44B8b8Bc2dC3cd941282789", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.9951205186465861, - "latestWeeklyApy": 0.5859630745820077, - "virtualPrice": 1022227185771884200 + "latestDailyApy": 0.4089719405725223, + "latestWeeklyApy": 0.4587105222986221, + "virtualPrice": 1022289431884284900 }, { "type": "stable-factory", @@ -669,11 +669,11 @@ { "type": "stable-factory", "address": "0x81212149b983602474fcD0943E202f38b38d7484", - "rawVolume": 73.50134745315367, - "volumeUSD": 80.1584548754527, - "latestDailyApy": 0.6541195221264173, - "latestWeeklyApy": 0.11346309483617478, - "virtualPrice": 1006629522288910800 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.2209552280740601, + "virtualPrice": 1006654269163259600 }, { "type": "stable-factory", @@ -689,9 +689,9 @@ "address": "0x8Aa1D5874e9Cd918d66FDbE0D3cAA65301995Be0", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.7387557555090796, - "latestWeeklyApy": 0.5231440145337274, - "virtualPrice": 1009041642696284800 + "latestDailyApy": 0.36822007351429153, + "latestWeeklyApy": 0.3907608025994769, + "virtualPrice": 1009096980062920000 }, { "type": "stable-factory", @@ -786,11 +786,11 @@ { "type": "stable-factory", "address": "0xE8dCeA7Fb2Baf7a9F4d9af608F06d78a687F8d9A", - "rawVolume": 7559.81827779489, - "volumeUSD": 53.05024633784889, - "latestDailyApy": 0.06726261356004848, - "latestWeeklyApy": 0.019090767966800648, - "virtualPrice": 1005304565858412000 + "rawVolume": 18751.668914655103, + "volumeUSD": 128.71429555426124, + "latestDailyApy": 0.0391540473728913, + "latestWeeklyApy": 0.042234604014068644, + "virtualPrice": 1005310877379996900 }, { "type": "stable-factory", @@ -858,11 +858,11 @@ { "type": "stable-factory", "address": "0x27c23852Ff93254cAE7d5Fd4183b331f700E09E8", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 7.720558919036824, - "latestWeeklyApy": 8.324672150831969, - "virtualPrice": 1835131490974146000 + "rawVolume": 0.8958868751874676, + "volumeUSD": 0.03553485217167354, + "latestDailyApy": 0, + "latestWeeklyApy": 1.10696918463431, + "virtualPrice": 1835146171583016200 }, { "type": "stable-factory", @@ -932,7 +932,7 @@ "address": "0xB6f8e5ddF3B03e475e8eeE609231397dE23b87d9", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0, + "latestDailyApy": -100, "latestWeeklyApy": 0, "virtualPrice": 0 }, @@ -984,11 +984,11 @@ { "type": "stable-factory", "address": "0x447646e84498552e62eCF097Cc305eaBFFF09308", - "rawVolume": 13121.665747094325, - "volumeUSD": 12871.793911084997, - "latestDailyApy": 0.527967091435233, - "latestWeeklyApy": 0.41496850642279703, - "virtualPrice": 1022909979870851000 + "rawVolume": 11867.361037756704, + "volumeUSD": 11670.711192999279, + "latestDailyApy": 0.30966973183119695, + "latestWeeklyApy": 0.38800937090530674, + "virtualPrice": 1022971409039969900 }, { "type": "stable-factory", @@ -1004,9 +1004,9 @@ "address": "0x309be34ADb7866cB3bDe9770fbeDc2cb3Be2bD26", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.10823946709719312, - "latestWeeklyApy": 0.07671044667105775, - "virtualPrice": 1005338773174468400 + "latestDailyApy": 0.05405104309696984, + "latestWeeklyApy": 0.057348766983955635, + "virtualPrice": 1005346877955082400 }, { "type": "stable-factory", @@ -1020,11 +1020,11 @@ { "type": "stable-factory", "address": "0xDa43Bfd7Ecc6835AA6f1761ced30b986A574c0d2", - "rawVolume": 2067.145252404326, - "volumeUSD": 2073.9228354659213, - "latestDailyApy": 2.437673143985375, - "latestWeeklyApy": 1.823598113128777, - "virtualPrice": 1035127218527958300 + "rawVolume": 449.84034931140866, + "volumeUSD": 451.148100725974, + "latestDailyApy": 0.8235267722424444, + "latestWeeklyApy": 0.9467336270092774, + "virtualPrice": 1035246530048026900 }, { "type": "stable-factory", @@ -1041,7 +1041,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.14837883571592325, + "latestWeeklyApy": 0, "virtualPrice": 1033071209714733400 }, { @@ -1112,7 +1112,7 @@ "address": "0x6CDA7AE2Ce3E6995E4f038BdCAA9F3319dC00f16", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0, + "latestDailyApy": -100, "latestWeeklyApy": 0, "virtualPrice": 0 }, @@ -1220,9 +1220,9 @@ "address": "0x7168C51e6E37AacED3AA7A15a03F77eBC90197c0", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.28363392457120273, - "latestWeeklyApy": 0.20101248064763322, - "virtualPrice": 1002358913888685000 + "latestDailyApy": 0.14151789962724148, + "latestWeeklyApy": 0.1501861985920394, + "virtualPrice": 1002380065222669200 }, { "type": "stable-factory", @@ -1283,18 +1283,18 @@ "address": "0xcECf60B95109Cb4C897b22877612228f0C76E52c", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.8463881403133922, - "latestWeeklyApy": 0.5992575134059042, - "virtualPrice": 1006767841957747000 + "latestDailyApy": 0.421758184074017, + "latestWeeklyApy": 0.4475766283999594, + "virtualPrice": 1006831065564734600 }, { "type": "stable-factory", "address": "0x1271A6Bdc04CDEC2C8863361b11F2C95f2dff3e4", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.0471827570501802, - "latestWeeklyApy": 0.7411733738470705, - "virtualPrice": 1009753231823461100 + "latestDailyApy": 0.521570063769361, + "latestWeeklyApy": 0.5534952164863105, + "virtualPrice": 1009831610299311400 }, { "type": "stable-factory", @@ -1389,11 +1389,11 @@ { "type": "stable-factory", "address": "0xAdf577B69eEaC9Df325536cf1aF106372f2Da263", - "rawVolume": 527.7709709524182, - "volumeUSD": 527.6463483682558, - "latestDailyApy": 1.6347010882645119, - "latestWeeklyApy": 1.2642540249188539, - "virtualPrice": 1018438606809370200 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.8472445579407406, + "latestWeeklyApy": 0.8773385187367255, + "virtualPrice": 1018564480502604000 }, { "type": "stable-factory", @@ -1661,9 +1661,9 @@ "address": "0xDdE5FdB48B2ec6bc26bb4487f8E3a4EB99b3d633", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.2246605689468115, - "latestWeeklyApy": 1.177710048259617, - "virtualPrice": 1030606674078356900 + "latestDailyApy": 0.6098235043968669, + "latestWeeklyApy": 0.6470840170974768, + "virtualPrice": 1030700159683439100 }, { "type": "stable-factory", @@ -1715,9 +1715,9 @@ "address": "0x81c86081d533f280A8DAaE17F672Fb84B6ed65e3", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 3.0103708873810087, - "latestWeeklyApy": 2.543405813728694, - "virtualPrice": 1059058208347442200 + "latestDailyApy": 2.987785815213795, + "latestWeeklyApy": 2.514033775664437, + "virtualPrice": 1059478165780863000 }, { "type": "stable-factory", @@ -1823,9 +1823,9 @@ "address": "0x1ED0855c93bb3eB531232D4350f49861B026D087", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.8934858080925201, - "latestWeeklyApy": 0.6325529905947702, - "virtualPrice": 1009429628729951000 + "latestDailyApy": 0.4451784932019809, + "latestWeeklyApy": 0.4724297296211155, + "virtualPrice": 1009496531706301700 }, { "type": "stable-factory", @@ -1902,11 +1902,11 @@ { "type": "stable-factory", "address": "0x2fFbCE9099cBed86984286A54e5932414aF4B717", - "rawVolume": 4449.361572464647, - "volumeUSD": 4852.486353692213, - "latestDailyApy": 1.5377757216733068, - "latestWeeklyApy": 1.5605251060415437, - "virtualPrice": 1015441594702919400 + "rawVolume": 55.806746696210375, + "volumeUSD": 61.55370415591342, + "latestDailyApy": 0.2486518267453386, + "latestWeeklyApy": 0.8361643387329476, + "virtualPrice": 1015561777031803300 }, { "type": "stable-factory", @@ -1967,9 +1967,9 @@ "address": "0x9D5f024e1A83c783f47F38945654b13Ecaa26A5c", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.8319850098986956, - "latestWeeklyApy": 1.2948989558111634, - "virtualPrice": 1015287207252569100 + "latestDailyApy": 0.9108290059562263, + "latestWeeklyApy": 0.9665352482267631, + "virtualPrice": 1015424561259278500 }, { "type": "stable-factory", @@ -2010,11 +2010,11 @@ { "type": "stable-factory", "address": "0xfBA3b7Bb043415035220b1c44FB4756434639392", - "rawVolume": 658.466717, - "volumeUSD": 657.6217596639976, - "latestDailyApy": 4.618036429486572, - "latestWeeklyApy": 6.078459806709424, - "virtualPrice": 1041908000410236900 + "rawVolume": 1366.4821384999998, + "volumeUSD": 1365.1339899226853, + "latestDailyApy": 1.1438187552111234, + "latestWeeklyApy": 3.5057878088676553, + "virtualPrice": 1042470150489800400 }, { "type": "stable-factory", @@ -2039,9 +2039,9 @@ "address": "0xe4ae3Ee65bb687045e401827b404FeE34BE4BA53", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6310498656197705, - "latestWeeklyApy": 0.46747798131303586, - "virtualPrice": 1245845701045762000 + "latestDailyApy": 0.6308979117239932, + "latestWeeklyApy": 0.46736475314637094, + "virtualPrice": 1245935955603907300 }, { "type": "stable-factory", @@ -2291,9 +2291,9 @@ "address": "0x63E271a9A8b8eAa47C684732770592320b6cdd80", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.881705302773451, - "latestWeeklyApy": 1.3299530802278747, - "virtualPrice": 1014874222161928100 + "latestDailyApy": 0.6986192254937018, + "latestWeeklyApy": 1.1060405129444728, + "virtualPrice": 1015037125241489400 }, { "type": "stable-factory", @@ -2316,11 +2316,11 @@ { "type": "stable-factory", "address": "0xaA91CDD7abb47F821Cf07a2d38Cc8668DEAf1bdc", - "rawVolume": 8038.702550161406, - "volumeUSD": 55.00009040024686, - "latestDailyApy": 0.024017849127644375, - "latestWeeklyApy": 0.018703939400888103, - "virtualPrice": 1004715610207748200 + "rawVolume": 24576.94067461773, + "volumeUSD": 169.6892480606937, + "latestDailyApy": 0.014436239814652474, + "latestWeeklyApy": 0.12450431087915881, + "virtualPrice": 1004738991088425300 }, { "type": "stable-factory", @@ -2426,8 +2426,8 @@ "address": "0x3D966D7d6Ae268CE4C45Edcb82B2a694EDc5924e", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 1000000, + "latestDailyApy": -100, + "latestWeeklyApy": 0, "virtualPrice": 0 }, { @@ -2453,9 +2453,9 @@ "address": "0xcf5186491739aAC19db943D71a9b9B759F3AFaBf", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.08615691194759911, - "latestWeeklyApy": 0.061080599508711586, - "virtualPrice": 1008610125724501100 + "latestDailyApy": 0.04300706376032526, + "latestWeeklyApy": 0.04564191005620444, + "virtualPrice": 1008616596904996000 }, { "type": "stable-factory", @@ -2478,10 +2478,10 @@ { "type": "stable-factory", "address": "0xa1eE546E2a53e86EA7E1c5D017af3FEa1D1A9620", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.16096945254300277, - "latestWeeklyApy": 0.02437853287378111, + "rawVolume": 4.042384555443602, + "volumeUSD": 4.018007651513357, + "latestDailyApy": 0, + "latestWeeklyApy": 0.0229167213574355, "virtualPrice": 1004743694928014500 }, { @@ -2586,20 +2586,20 @@ { "type": "stable-factory", "address": "0x0f110c55EfE62c16D553A3d3464B77e1853d0e97", - "rawVolume": 1305.4256818049494, - "volumeUSD": 1419.2044083216624, - "latestDailyApy": 0.48582430683570266, - "latestWeeklyApy": 0.4288094375997975, - "virtualPrice": 1004703593987303200 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.17486569606302016, + "virtualPrice": 1004724011532620300 }, { "type": "stable-factory", "address": "0x2C3cc8e698890271c8141be9F6fD6243d56B39f1", - "rawVolume": 1184.7713707990222, - "volumeUSD": 1285.0321849734382, - "latestDailyApy": 1.0225587000271874, - "latestWeeklyApy": 0.7831502461091544, - "virtualPrice": 1005550016294503800 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0.5183033733039855, + "virtualPrice": 1005621969143637900 }, { "type": "stable-factory", @@ -2616,7 +2616,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.0003354554222845252, + "latestWeeklyApy": 0, "virtualPrice": 1000959204425705500 }, { @@ -2757,11 +2757,11 @@ { "type": "stable-factory", "address": "0x2F3E9CA3bFf85B91D9fe6a9f3e8F9B1A6a4c3cF4", - "rawVolume": 18544.380316208164, - "volumeUSD": 1.9962620877793087e-8, - "latestDailyApy": 1.247618043694576, - "latestWeeklyApy": 2.5921132872058994, - "virtualPrice": 1023941838807835800 + "rawVolume": 3797.176358874176, + "volumeUSD": 4.096490397940724e-9, + "latestDailyApy": 5.085429264770647, + "latestWeeklyApy": 3.0799244814051496, + "virtualPrice": 1024504880791957400 }, { "type": "stable-factory", @@ -2849,9 +2849,9 @@ "address": "0xEF978c32151f3fBdBCa825A5DE8011D29A84B7D9", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 2.068857777351396, - "latestWeeklyApy": 1.4618025028262815, - "virtualPrice": 1015892975148000000 + "latestDailyApy": 1.0279767177313381, + "latestWeeklyApy": 1.0908720171935338, + "virtualPrice": 1016048000023000000 }, { "type": "stable-factory", @@ -2904,8 +2904,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.0903436561314086, - "virtualPrice": 1001793645154914300 + "latestWeeklyApy": 0.09299174497769958, + "virtualPrice": 1001811552414107900 }, { "type": "stable-factory", @@ -2957,9 +2957,9 @@ "address": "0xd8A2E3B6d9a5Bd592022C3481EC57dD8CFc15226", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.8034040074745405, - "latestWeeklyApy": 1.2747631760604339, - "virtualPrice": 1009384763940849000 + "latestDailyApy": 0.8966731176133225, + "latestWeeklyApy": 0.9515175524036579, + "virtualPrice": 1009519206935464100 }, { "type": "stable-factory", @@ -2984,18 +2984,18 @@ "address": "0x4915C9BeE38367D4F24e94950406d42e521fEC68", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.7325888241396248, - "latestWeeklyApy": 1.2248284912870666, - "virtualPrice": 1060150992070713700 + "latestDailyApy": 0.8616287421827185, + "latestWeeklyApy": 0.9143178667488705, + "virtualPrice": 1060286700486653000 }, { "type": "stable-factory", "address": "0xC4FB41Ac5286990fB30f0B898B355fDb66781a6d", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 3.4005469295053548, - "latestWeeklyApy": 2.39793877221004, - "virtualPrice": 1016915466596826400 + "latestDailyApy": 1.6839555034181553, + "latestWeeklyApy": 1.787218223837117, + "virtualPrice": 1017168872920948600 }, { "type": "stable-factory", @@ -3047,18 +3047,18 @@ "address": "0x4d0dd2A622e83345E3145255338F529D3922f471", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.8200627949908066, - "latestWeeklyApy": 1.2864959080194804, - "virtualPrice": 1008971166614610000 + "latestDailyApy": 0.904928354437895, + "latestWeeklyApy": 0.9602730257956438, + "virtualPrice": 1009106785761086200 }, { "type": "stable-factory", "address": "0x4247d47842068E7cA84b97201033bF71aD8e7d2a", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 3.1776203443598883, - "latestWeeklyApy": 2.2414749412992707, - "virtualPrice": 1023281775644570100 + "latestDailyApy": 1.5744632617117116, + "latestWeeklyApy": 1.670968385820526, + "virtualPrice": 1023520312961863400 }, { "type": "stable-factory", @@ -3072,11 +3072,11 @@ { "type": "stable-factory", "address": "0xa138341185a9D0429B0021A11FB717B225e13e1F", - "rawVolume": 33057.85238204078, - "volumeUSD": 31826.300979652024, - "latestDailyApy": 2.4113612720481736, - "latestWeeklyApy": 2.1916466321664663, - "virtualPrice": 1051216777933971200 + "rawVolume": 892.8920466337444, + "volumeUSD": 858.8093721939737, + "latestDailyApy": 1.0276024461864042, + "latestWeeklyApy": 1.2178940404259153, + "virtualPrice": 1051392944159729500 }, { "type": "stable-factory", @@ -3290,18 +3290,18 @@ "address": "0xDa10C3f360dC741e7359D561Fb4b4e008C37b356", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 2.6239119862687454, - "latestWeeklyApy": 1.8524543991964348, - "virtualPrice": 1011304087162075800 + "latestDailyApy": 1.3019140093477155, + "latestWeeklyApy": 1.3816532703965212, + "virtualPrice": 1011499279953389000 }, { "type": "stable-factory", "address": "0xBbDA65cfa2F90308da20572E391f03a0CC6B4A9C", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 2.758320037567996, - "latestWeeklyApy": 1.946954733138817, - "virtualPrice": 1011857085238326000 + "latestDailyApy": 1.3681327374900132, + "latestWeeklyApy": 1.4519485431460089, + "virtualPrice": 1012062253106320300 }, { "type": "stable-factory", @@ -3310,7 +3310,7 @@ "volumeUSD": 0, "latestDailyApy": 0, "latestWeeklyApy": 0, - "virtualPrice": 1.7416573806453465e+22 + "virtualPrice": 0 }, { "type": "stable-factory", @@ -3363,7 +3363,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.00023431380695715376, + "latestWeeklyApy": 0, "virtualPrice": 1005156387468843600 }, { @@ -3461,9 +3461,9 @@ "address": "0x1Aa22D1b351275A2a7BBCDC4fdF422b1Cf69DD36", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 1.8650159993485182, - "latestWeeklyApy": 1.3181800737761096, - "virtualPrice": 1007366751267361800 + "latestDailyApy": 0.927173348957333, + "latestWeeklyApy": 0.9838822167981487, + "virtualPrice": 1007505468318500900 }, { "type": "stable-factory", @@ -3569,9 +3569,9 @@ "address": "0x556BD8f6e7a470E610D45f15aA642d8F557c434c", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.6874797156800172, - "latestWeeklyApy": 0.48687343314253173, - "virtualPrice": 1007034935899967200 + "latestDailyApy": 0.34270553695336936, + "latestWeeklyApy": 0.3636838087380134, + "virtualPrice": 1007086342906018400 }, { "type": "stable-factory", @@ -3612,11 +3612,11 @@ { "type": "stable-factory", "address": "0xB6aC3E9F5B8Fc6cCA87CE221FF794f0253d4a4e7", - "rawVolume": 20.93837419685345, - "volumeUSD": 20.900799996369145, - "latestDailyApy": 1.2861530131899945, - "latestWeeklyApy": 0.21701281423049945, - "virtualPrice": 1003192771093482000 + "rawVolume": 4.935962851825605, + "volumeUSD": 4.93739098217026, + "latestDailyApy": 0, + "latestWeeklyApy": 0.8566585222408607, + "virtualPrice": 1003322246401957200 }, { "type": "stable-factory", @@ -4125,11 +4125,11 @@ { "type": "stable-factory", "address": "0xb61Ecec987a9529dbA13a8Dd10ea24446ccBB6ae", - "rawVolume": 6830.7122865, - "volumeUSD": 6557.659971886835, - "latestDailyApy": 0.37065147414947486, - "latestWeeklyApy": 0.26257227986221654, - "virtualPrice": 1001825488252672000 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.24665815762821008, + "latestWeeklyApy": 0.2956006641703146, + "virtualPrice": 1001872204051780500 }, { "type": "stable-factory", @@ -4152,11 +4152,11 @@ { "type": "stable-factory", "address": "0xA691D34Abf93C0A77998e53B564bEcfaf46Dae27", - "rawVolume": 1983.1761083890099, - "volumeUSD": 1981.1536029133003, - "latestDailyApy": 0.00014358149935667086, - "latestWeeklyApy": 2.001508072591829, - "virtualPrice": 1004729550574434700 + "rawVolume": 2923.5585490687126, + "volumeUSD": 2912.3374834523615, + "latestDailyApy": 0.000493309711702139, + "latestWeeklyApy": 1.0232995947760504, + "virtualPrice": 1004926318732840100 }, { "type": "stable-factory", @@ -4179,11 +4179,11 @@ { "type": "stable-factory", "address": "0x7789A141e8e1201De01671140f57e56dd6aF2654", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1000204031702795900 + "rawVolume": 1.0054195, + "volumeUSD": 0.98120142742, + "latestDailyApy": 3.774610892195729, + "latestWeeklyApy": 0.5291938532219875, + "virtualPrice": 1000305567590470000 }, { "type": "stable-factory", @@ -4206,65 +4206,65 @@ { "type": "crypto", "address": "0x92215849c439E1f8612b6646060B4E3E5ef822cC", - "rawVolume": 253190.698722332, - "volumeUSD": 551819.4931926392, - "latestDailyApy": 0.3766808763899121, - "latestWeeklyApy": 0.30165302302540553, - "virtualPrice": 1027906808038417400 + "rawVolume": 156240.5957724773, + "volumeUSD": 377145.14674533135, + "latestDailyApy": 0.12247412942361091, + "latestWeeklyApy": 0.18034367131984919, + "virtualPrice": 1027931744142887400 }, { "type": "crypto", "address": "0xB446BF7b8D6D4276d0c75eC0e3ee8dD7Fe15783A", - "rawVolume": 8230.070128182255, - "volumeUSD": 8633.827872240583, - "latestDailyApy": 0.029012800685301876, - "latestWeeklyApy": 0.03722137881683185, - "virtualPrice": 1005153324016900600 + "rawVolume": 1004.2888910839727, + "volumeUSD": 1051.6204415016725, + "latestDailyApy": 0, + "latestWeeklyApy": 0.023829745192460727, + "virtualPrice": 1005173546876738700 }, { "type": "crypto", "address": "0x751B1e21756bDbc307CBcC5085c042a0e9AaEf36", - "rawVolume": 596.7604138374908, - "volumeUSD": 1320.4601177655225, - "latestDailyApy": 0.14687488582090236, - "latestWeeklyApy": 0.07494526099032228, - "virtualPrice": 1065724820517823900 + "rawVolume": 0.543996258488672, + "volumeUSD": 1.1330300849636668, + "latestDailyApy": 0.020281321042125988, + "latestWeeklyApy": 0.059032041705431304, + "virtualPrice": 1065742922733724900 }, { "type": "crypto", "address": "0x9b3d675FDbe6a0935E8B7d1941bc6f78253549B7", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0, - "latestWeeklyApy": 0.2679891671844681, - "virtualPrice": 1002865730158897000 + "rawVolume": 10.7894712893769, + "volumeUSD": 23.482171501111683, + "latestDailyApy": 0.35186405045086744, + "latestWeeklyApy": 0.09157956839056514, + "virtualPrice": 1002862529630554000 }, { "type": "crypto-factory", "address": "0xEC5AFc9590964f2fA0FeED54f0fBB2A34480908D", - "rawVolume": 0.05500125, - "volumeUSD": 0.07322435214164003, - "latestDailyApy": 11.463087097243774, - "latestWeeklyApy": 2.134654481085052, - "virtualPrice": 1139839963575468300 + "rawVolume": 0.4517180829173003, + "volumeUSD": 0.5999526972304675, + "latestDailyApy": 0.27068629804096744, + "latestWeeklyApy": 1.9856714509884243, + "virtualPrice": 1140148978065461800 }, { "type": "crypto-factory", "address": "0xc7c939A474CB10EB837894D1ed1a77C61B268Fa7", - "rawVolume": 148316.37565880545, - "volumeUSD": 133122.2894230668, - "latestDailyApy": 1.3677368079603847, - "latestWeeklyApy": 2.789680612402212, - "virtualPrice": 1010715385457045200 + "rawVolume": 52000.920754070125, + "volumeUSD": 45098.87029687935, + "latestDailyApy": 0.3419855933741056, + "latestWeeklyApy": 0.6065056623759224, + "virtualPrice": 1010803703381283800 }, { "type": "crypto-factory", "address": "0x36BECDcBdF49255F366a45B861B4223b482D35e4", - "rawVolume": 585.0473514831253, - "volumeUSD": 200.4913666608692, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.1074040601961368, - "virtualPrice": 1003836327261481600 + "latestWeeklyApy": 0.05132490000276935, + "virtualPrice": 1003814260843961200 }, { "type": "crypto-factory", @@ -4323,11 +4323,11 @@ { "type": "crypto-factory", "address": "0xd9F354177Edd66E7A6669F33d0Ec64C14E153b38", - "rawVolume": 0, - "volumeUSD": 0, - "latestDailyApy": 0.0001670754666394103, - "latestWeeklyApy": 0.000023802515181081674, - "virtualPrice": 1005303901029112800 + "rawVolume": 11.129653434242444, + "volumeUSD": 3.3730056776207595, + "latestDailyApy": 0.48551831760244024, + "latestWeeklyApy": 0.28387262237707933, + "virtualPrice": 1005266143909560200 }, { "type": "crypto-factory", @@ -4359,11 +4359,11 @@ { "type": "crypto-factory", "address": "0xFb6FE7802bA9290ef8b00CA16Af4Bc26eb663a28", - "rawVolume": 210.3655262934455, - "volumeUSD": 1379.643290829234, - "latestDailyApy": 0.0016904749482016257, - "latestWeeklyApy": 0.01067786385613445, - "virtualPrice": 1002447654541388400 + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0.00016535053148913903, + "latestWeeklyApy": 0.0007940729692457182, + "virtualPrice": 1002447973696320100 }, { "type": "crypto-factory", @@ -4989,11 +4989,11 @@ { "type": "crypto-factory", "address": "0x7BBc0e92505B485aeb3e82E828cb505DAf1E50c6", - "rawVolume": 16055.267076015847, - "volumeUSD": 15763.76076138813, - "latestDailyApy": 1.8154337678987664, - "latestWeeklyApy": 1.524909341343439, - "virtualPrice": 1009320558602910200 + "rawVolume": 5035.5038870841845, + "volumeUSD": 5045.014799016108, + "latestDailyApy": 0.4057926767320863, + "latestWeeklyApy": 0.8750717674512298, + "virtualPrice": 1009401039659567500 }, { "type": "crypto-factory", @@ -5001,8 +5001,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1003483525519678100 + "latestWeeklyApy": 0.6003800543416205, + "virtualPrice": 1003829818307700400 }, { "type": "crypto-factory", @@ -5154,8 +5154,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 3.750184669790735, - "virtualPrice": 1396799123307410400 + "latestWeeklyApy": 2.3145743321414836, + "virtualPrice": 1398306012094443800 }, { "type": "crypto-factory", @@ -5172,7 +5172,7 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 1.5715015593009696, + "latestWeeklyApy": 0, "virtualPrice": 1001985629440879000 }, { @@ -5549,9 +5549,9 @@ "address": "0x5751867DEa8e7858899B0cD7Dd66cF35FB04ca78", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.2737351569279456, - "latestWeeklyApy": 0.05998265350699583, - "virtualPrice": 1032640322013100700 + "latestDailyApy": 0.08938939347551411, + "latestWeeklyApy": 0.05168719918884346, + "virtualPrice": 1032632370881056600 }, { "type": "crypto-factory", @@ -5592,11 +5592,11 @@ { "type": "crypto-factory", "address": "0x311A794F0643F938143AD0Bfbd6b956d53EB8E01", - "rawVolume": 1527935.854517935, - "volumeUSD": 8.355533831796315, - "latestDailyApy": 1.9559071431940023, - "latestWeeklyApy": 1.193602635118518, - "virtualPrice": 1002188185715842800 + "rawVolume": 2115161.4018697864, + "volumeUSD": 12.32463096755048, + "latestDailyApy": 1.2433973079221339, + "latestWeeklyApy": 1.7586054271075513, + "virtualPrice": 1002710384660737000 }, { "type": "crypto-factory", @@ -5793,8 +5793,8 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1003113004044205600 + "latestWeeklyApy": 0.009420876533505762, + "virtualPrice": 1000955087141055900 }, { "type": "crypto-factory", @@ -5892,16 +5892,16 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0.00022139939992449342, - "virtualPrice": 1000029876308774100 + "latestWeeklyApy": 0.00005587634537285169, + "virtualPrice": 1000029908545456300 }, { "type": "crypto-factory", "address": "0xC962fe734eCbEa2739c205e3BdB3Bf7e3fBE3C2B", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.02928402781154915, - "latestWeeklyApy": 0.013558905842869784, + "latestDailyApy": 0, + "latestWeeklyApy": 0.004171447346568158, "virtualPrice": 1000022513770494700 }, { @@ -5909,9 +5909,9 @@ "address": "0x7fd25133E3c4c7832c2F450F54f3f3444af54D15", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.08444547489632193, - "latestWeeklyApy": 0.06772134605750324, - "virtualPrice": 1000073580789936400 + "latestDailyApy": 0, + "latestWeeklyApy": 0.03784224886549392, + "virtualPrice": 1000080736858050400 }, { "type": "crypto-factory", @@ -5948,10 +5948,28 @@ "latestDailyApy": 0, "latestWeeklyApy": 0, "virtualPrice": 1000221589732698500 + }, + { + "type": "crypto-factory", + "address": "0x27b216D98ACc62E3990FA5db45B968262e4125c7", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1001012407782102400 + }, + { + "type": "crypto-factory", + "address": "0x4477c95d9796F38F16DBf417EbCF62eD2E69016c", + "rawVolume": 0, + "volumeUSD": 0, + "latestDailyApy": 0, + "latestWeeklyApy": 0, + "virtualPrice": 1000000000000000000 } ], - "totalVolume": 2055201.5019646517, - "cryptoVolume": 712248.3947827742, - "cryptoShare": 34.65589111831159, + "totalVolume": 460177.6297090656, + "cryptoVolume": 428381.5650736569, + "cryptoShare": 93.09048015751856, "subgraphHasErrors": false } diff --git a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-xdai.json b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-xdai.json index 8cfea999..cfb85c9d 100644 --- a/pages/api/getSubgraphData/_fallback-data/getSubgraphData-xdai.json +++ b/pages/api/getSubgraphData/_fallback-data/getSubgraphData-xdai.json @@ -3,38 +3,38 @@ { "type": "main", "address": "0x7f90122BF0700F9E7e1F688fe926940E8839F353", - "rawVolume": 8590.338497613977, - "volumeUSD": 8588.921145753733, - "latestDailyApy": 0.3939477588874807, - "latestWeeklyApy": 0.4857658623022898, - "virtualPrice": 1005309027224664600 + "rawVolume": 2903.5819240083674, + "volumeUSD": 2903.1506443550106, + "latestDailyApy": 0.019495180889927965, + "latestWeeklyApy": 0.29734989349863294, + "virtualPrice": 1005355603465188100 }, { "type": "main", "address": "0x85bA9Dfb4a3E4541420Fc75Be02E2B42042D7e46", "rawVolume": 0, "volumeUSD": 0, - "latestDailyApy": 0.1165238874142327, - "latestWeeklyApy": 0.14364140603535525, - "virtualPrice": 1001521203482350600 + "latestDailyApy": 0.005774180270456952, + "latestWeeklyApy": 0.087986439132548, + "virtualPrice": 1001534947190612600 }, { "type": "stable-factory", "address": "0xBdF4488Dcf7165788D438b62B4C8A333879B7078", - "rawVolume": 2.179577323597409, - "volumeUSD": 241.4808974097881, - "latestDailyApy": 0.004514564858015824, - "latestWeeklyApy": 0.01280096297211486, - "virtualPrice": 1000573271755128800 + "rawVolume": 14.828146474996428, + "volumeUSD": 1633.4722622757276, + "latestDailyApy": 0.0016338183957742558, + "latestWeeklyApy": 0.011346106779908105, + "virtualPrice": 1000575331077803900 }, { "type": "stable-factory", "address": "0x5D7309a01B727d6769153fCB1dF5587858d53B9C", - "rawVolume": 0.02369454110720052, - "volumeUSD": 2.567644087412319, - "latestDailyApy": 0.012295491231095745, - "latestWeeklyApy": 0.06911674435736703, - "virtualPrice": 1002370244567189500 + "rawVolume": 2.2536889899887598, + "volumeUSD": 242.60434453878543, + "latestDailyApy": 0.0010640783945747856, + "latestWeeklyApy": 0.003533274472999892, + "virtualPrice": 1002370588001599400 }, { "type": "stable-factory", @@ -51,17 +51,17 @@ "rawVolume": 0, "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1001327149147558100 + "latestWeeklyApy": 0.06626408186547472, + "virtualPrice": 1001339905170171800 }, { "type": "stable-factory", "address": "0xA64D8025ddA09bCE94DA2cF2DC175d1831e2dF76", - "rawVolume": 141.81421625495673, - "volumeUSD": 141.4689278906518, - "latestDailyApy": 0.24277093932958405, - "latestWeeklyApy": 0.3373105203590132, - "virtualPrice": 1003132569511262500 + "rawVolume": 2.895840069426366, + "volumeUSD": 2.88879405666463, + "latestDailyApy": 0.014096711419253616, + "latestWeeklyApy": 0.3702817278399051, + "virtualPrice": 1003197211819839100 }, { "type": "stable-factory", @@ -201,11 +201,11 @@ { "type": "stable-factory", "address": "0xd8883EeC56cB95F9bbdccaa9b453e3cC19a90e72", - "rawVolume": 12.753867588108665, - "volumeUSD": 0.07944437321886942, + "rawVolume": 0, + "volumeUSD": 0, "latestDailyApy": 0, - "latestWeeklyApy": 0, - "virtualPrice": 1005165798330236700 + "latestWeeklyApy": 1.5198539156824564, + "virtualPrice": 1005457504493649300 }, { "type": "stable-factory", @@ -444,15 +444,15 @@ { "type": "crypto", "address": "0x056C6C5e684CeC248635eD86033378Cc444459B0", - "rawVolume": 241703.2145109759, - "volumeUSD": 125215.9594089262, - "latestDailyApy": 0.0651430681659626, - "latestWeeklyApy": 0.1888332410462601, - "virtualPrice": 1004488954012929300 + "rawVolume": 160952.8725610193, + "volumeUSD": 84006.17206361922, + "latestDailyApy": 0.010464711600799426, + "latestWeeklyApy": 0.067282943562752, + "virtualPrice": 1003903982808915700 } ], - "totalVolume": 134190.477468441, - "cryptoVolume": 125215.9594089262, - "cryptoShare": 93.31210512934835, + "totalVolume": 88788.2881088454, + "cryptoVolume": 84006.17206361922, + "cryptoShare": 94.614023823318, "subgraphHasErrors": false } diff --git a/utils/Graphql/fallback-data/crvusd-amms.json b/utils/Graphql/fallback-data/crvusd-amms.json index 4c34a3cc..a7d442a1 100644 --- a/utils/Graphql/fallback-data/crvusd-amms.json +++ b/utils/Graphql/fallback-data/crvusd-amms.json @@ -5,7 +5,7 @@ "volumeSnapshots": [ { "swapVolumeUSD": "0", - "timestamp": "1691476559" + "timestamp": "1691935151" } ] }, @@ -13,8 +13,8 @@ "id": "0x1681195c176239ac5e72d9aebacf5b2492e0c4ee", "volumeSnapshots": [ { - "swapVolumeUSD": "3675.0859970584274511115", - "timestamp": "1691497067" + "swapVolumeUSD": "0", + "timestamp": "1691922683" } ] }, @@ -22,8 +22,8 @@ "id": "0x37417b2238aa52d0dd2d6252d989e728e8f706e4", "volumeSnapshots": [ { - "swapVolumeUSD": "303776.7785467005902638459163771944", - "timestamp": "1691496155" + "swapVolumeUSD": "0", + "timestamp": "1691919035" } ] }, @@ -31,8 +31,8 @@ "id": "0xe0438eb3703bf871e31ce639bd351109c88666ea", "volumeSnapshots": [ { - "swapVolumeUSD": "29312.9854099574707838522285672", - "timestamp": "1691496263" + "swapVolumeUSD": "0", + "timestamp": "1691928863" } ] } From a52ba5870a9d0755284f172447babb92d58d1845 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 15 Aug 2023 20:56:59 +0200 Subject: [PATCH 43/83] Switch polygon rpc to llamanodes --- constants/configs/configs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 4610526f..31e04ef3 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -73,7 +73,8 @@ const configs = { nativeCurrencyCoingeckoId: 'matic-network', platformCoingeckoId: 'polygon-pos', nativeAssetErc20WrapperId: 'wmatic', - rpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY_POLYGON}`, + // rpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY_POLYGON}`, + rpcUrl: `https://polygon.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`, multicallAddress: '0x3eF6A01A0f81D6046290f3e2A8c5b843e738E604', multicall2Address: '0x275617327c958bD06b5D6b871E7f491D76113dd8', getFactoryRegistryAddress: async () => '0x722272d36ef0da72ff51c5a65db7b870e2e8d4ee', From 018da9d1e757fc6d46584fa966feaa97a105ab11 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 22 Aug 2023 01:07:04 +0200 Subject: [PATCH 44/83] Replace llamaprc with alchemy --- constants/Web3.js | 3 ++- constants/configs/configs.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/constants/Web3.js b/constants/Web3.js index 4d9a35df..d3550685 100644 --- a/constants/Web3.js +++ b/constants/Web3.js @@ -5,7 +5,8 @@ const DECIMALS_WEI = 1e18; const DECIMALS_GWEI = 1e9; const MAX_UINT256 = BN(2).pow(256).minus(1); -const RPC_URL = `https://eth.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`; +// const RPC_URL = `https://eth.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`; +const RPC_URL = `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY_ETHEREUM}`; const RPC_BACKUP_URL = `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY_ETHEREUM}`; const RPC_URL_BSC = 'https://bsc-dataseed.binance.org/'; diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 31e04ef3..af2ab1da 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -73,8 +73,8 @@ const configs = { nativeCurrencyCoingeckoId: 'matic-network', platformCoingeckoId: 'polygon-pos', nativeAssetErc20WrapperId: 'wmatic', - // rpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY_POLYGON}`, - rpcUrl: `https://polygon.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`, + rpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY_POLYGON}`, + // rpcUrl: `https://polygon.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`, multicallAddress: '0x3eF6A01A0f81D6046290f3e2A8c5b843e738E604', multicall2Address: '0x275617327c958bD06b5D6b871E7f491D76113dd8', getFactoryRegistryAddress: async () => '0x722272d36ef0da72ff51c5a65db7b870e2e8d4ee', From 967e19490a034d5a2dcb4102e8de5b46e53383b0 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 23 Aug 2023 18:22:28 +0200 Subject: [PATCH 45/83] Give drpc a try in prod Had to reduce multicall chunk size by half to match the rpc's own limits, this doesn't degrade performance --- constants/Web3.js | 3 ++- utils/Calls.js | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/constants/Web3.js b/constants/Web3.js index d3550685..d48ff3b5 100644 --- a/constants/Web3.js +++ b/constants/Web3.js @@ -5,8 +5,9 @@ const DECIMALS_WEI = 1e18; const DECIMALS_GWEI = 1e9; const MAX_UINT256 = BN(2).pow(256).minus(1); +const RPC_URL = `https://lb.drpc.org/ogrpc?network=ethereum&dkey=${process.env.DRPC_API_KEY}`; // const RPC_URL = `https://eth.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`; -const RPC_URL = `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY_ETHEREUM}`; +// const RPC_URL = `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY_ETHEREUM}`; const RPC_BACKUP_URL = `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_API_KEY_ETHEREUM}`; const RPC_URL_BSC = 'https://bsc-dataseed.binance.org/'; diff --git a/utils/Calls.js b/utils/Calls.js index 2be18df7..916a8897 100644 --- a/utils/Calls.js +++ b/utils/Calls.js @@ -126,7 +126,7 @@ const multiCall = async (callsConfig, isDebugging = false) => { const { networkSettings } = augmentedCallsConfig[0]; const multicall = getContractInstance(networkSettings.multicall2Address, MULTICALL2_ABI, networkSettings.web3); - const chunkedCalls = getArrayChunks(calls, 400); // Keep each multicall size reasonable + const chunkedCalls = getArrayChunks(calls, 200); // Keep each multicall size reasonable let decodedData; try { @@ -166,8 +166,8 @@ const multiCall = async (callsConfig, isDebugging = false) => { // Allow passing a custom fallback value for very specific cases; should rarely be used if (typeof superSettings.fallbackValue !== 'undefined') { data = superSettings.fallbackValue; - // Use fallback value if one exists (ideally we have fallback values for all types, - // add more when necessary as we encounter other failures) + // Use fallback value if one exists (ideally we have fallback values for all types, + // add more when necessary as we encounter other failures) } else if (typeof FALLBACK_DECODED_PARAMETERS_VALUES[failedDecodedType] !== 'undefined') { data = FALLBACK_DECODED_PARAMETERS_VALUES[failedDecodedType]; } else { From 7bf59c82ba3c56432a019faf3be5027aafb4a81a Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 23 Aug 2023 18:23:09 +0200 Subject: [PATCH 46/83] Switch back to llamanodes for polygon rpc --- constants/configs/configs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index af2ab1da..31e04ef3 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -73,8 +73,8 @@ const configs = { nativeCurrencyCoingeckoId: 'matic-network', platformCoingeckoId: 'polygon-pos', nativeAssetErc20WrapperId: 'wmatic', - rpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY_POLYGON}`, - // rpcUrl: `https://polygon.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`, + // rpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY_POLYGON}`, + rpcUrl: `https://polygon.llamarpc.com/rpc/${process.env.LLAMANODES_API_KEY}`, multicallAddress: '0x3eF6A01A0f81D6046290f3e2A8c5b843e738E604', multicall2Address: '0x275617327c958bD06b5D6b871E7f491D76113dd8', getFactoryRegistryAddress: async () => '0x722272d36ef0da72ff51c5a65db7b870e2e8d4ee', From d142c3b260415d342682028d83edfeccaa8e0bca Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 23 Aug 2023 18:31:50 +0200 Subject: [PATCH 47/83] Add api-level patch for incorrect usd vols for 2 pools Pending subgraph patch --- pages/api/getSubgraphData/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index 7b15bf5c..a27209dc 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -17,6 +17,8 @@ const POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME = { ethereum: [ '0x84997FAFC913f1613F51Bb0E2b5854222900514B', '0x2863a328a0b7fc6040f11614fa0728587db8e353', + '0xb7ecb2aa52aa64a717180e030241bc75cd946726', + '0xf95aaa7ebb1620e46221b73588502960ef63dba0', ].map(lc), polygon: [ '0x7c1aa4989df27970381196d3ef32a7410e3f2748', From 63f6a79656eb32beb03f554f5f949a2a8816f648 Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 25 Aug 2023 12:53:16 +0200 Subject: [PATCH 48/83] Add endpoint to retrieve all platforms and registries And use this to clean some things up --- endpoints.md | 45 +++++++++---------------- pages/api/getPlatforms.js | 23 +++++++++++++ pages/api/getPools/index.js | 30 +++-------------- utils/data/curve-platform-registries.js | 31 +++++++++++++++++ utils/data/curve-pools-data.js | 21 +++--------- 5 files changed, 79 insertions(+), 71 deletions(-) create mode 100644 pages/api/getPlatforms.js create mode 100644 utils/data/curve-platform-registries.js diff --git a/endpoints.md b/endpoints.md index 39aad193..257d71be 100644 --- a/endpoints.md +++ b/endpoints.md @@ -1,5 +1,6 @@ ## Table of Contents + - [getPlatforms](#getplatforms) - [getPools](#getpools) - [getETHprice](#getethprice) - [getFactoryTVL](#getfactorytvl) @@ -14,6 +15,18 @@ Last generation time of an endpoint can be found in the `generatedTimeMs` property. +### getPlatforms + +Returns platforms that Curve is deployed on, and which pool registries are available on each platform. +Useful to then query pools (see [`getPools`](#getpools) below) + +``` +GET /api/getPlatforms +``` + +**View**: +[getPlatforms](https://api.curve.fi/api/getPlatforms) + ### getPools Retrieves all pools for any registry on any chain where Curve is deployed. @@ -29,38 +42,12 @@ GET /api/getPools// **View**: -*This is the list of all deployed registries on all chains, as of June 14, 2023* +Example endpoints available: -- https://api.curve.fi/api/getPools/ethereum/main -- https://api.curve.fi/api/getPools/ethereum/crypto -- https://api.curve.fi/api/getPools/ethereum/factory -- https://api.curve.fi/api/getPools/ethereum/factory-crypto - https://api.curve.fi/api/getPools/ethereum/factory-crvusd -- https://api.curve.fi/api/getPools/ethereum/factory-tricrypto -- https://api.curve.fi/api/getPools/polygon/main -- https://api.curve.fi/api/getPools/polygon/crypto -- https://api.curve.fi/api/getPools/polygon/factory - https://api.curve.fi/api/getPools/polygon/factory-crypto -- https://api.curve.fi/api/getPools/fantom/main -- https://api.curve.fi/api/getPools/fantom/crypto -- https://api.curve.fi/api/getPools/fantom/factory -- https://api.curve.fi/api/getPools/fantom/factory-crypto -- https://api.curve.fi/api/getPools/fantom/factory-eywa -- https://api.curve.fi/api/getPools/arbitrum/main -- https://api.curve.fi/api/getPools/arbitrum/crypto -- https://api.curve.fi/api/getPools/arbitrum/factory -- https://api.curve.fi/api/getPools/avalanche/main -- https://api.curve.fi/api/getPools/avalanche/crypto -- https://api.curve.fi/api/getPools/avalanche/factory -- https://api.curve.fi/api/getPools/optimism/main -- https://api.curve.fi/api/getPools/optimism/crypto -- https://api.curve.fi/api/getPools/optimism/factory -- https://api.curve.fi/api/getPools/xdai/main -- https://api.curve.fi/api/getPools/xdai/crypto -- https://api.curve.fi/api/getPools/xdai/factory - -This endpoint returns *all* pools from all these registries, in exactly the same shape, except for the fact that each pool object will also contain a `blockchainId` prop. -For each pool object in the endpoints above, the `id` prop is unique. For each pool object in this single "all pools" endpoint, the combination of props `blockchainId` and `id` is unique. + +For each pool object in the endpoints above, the `id` prop is unique. ### getETHprice ``` diff --git a/pages/api/getPlatforms.js b/pages/api/getPlatforms.js new file mode 100644 index 00000000..e15ca218 --- /dev/null +++ b/pages/api/getPlatforms.js @@ -0,0 +1,23 @@ +/** + * Returns platforms that Curve is deployed on, and which pool registries + * are available on each platform. + * + * Useful to then query e.g. `/api/getPools/PLATFORM/REGISTRY` + */ + +import configs from 'constants/configs'; +import { arrayToHashmap } from 'utils/Array'; +import { fn } from 'utils/api'; +import getPlatformRegistries from 'utils/data/curve-platform-registries'; + +const allBlockchainIds = Array.from(Object.keys(configs)); + +export default fn(async () => ({ + platforms: arrayToHashmap(allBlockchainIds.map((blockchainId) => [ + blockchainId, + getPlatformRegistries(blockchainId), + ])), +}), { + maxAge: 60 * 60, // 1h + name: 'getPlatforms', +}); diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 992bc130..12d3019a 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -27,6 +27,7 @@ import factoryEywaPoolAbi from 'constants/abis/fantom/factory-eywa/pool.json'; import erc20Abi from 'constants/abis/erc20.json'; import erc20AbiMKR from 'constants/abis/erc20_mkr.json'; import { multiCall } from 'utils/Calls'; +import getPlatformRegistries from 'utils/data/curve-platform-registries'; import { ZERO_ADDRESS } from 'utils/Web3'; import { flattenArray, sum, arrayToHashmap } from 'utils/Array'; import { sequentialPromiseReduce, sequentialPromiseFlatMap, sequentialPromiseMap } from 'utils/Async'; @@ -225,33 +226,10 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) throw new Error('registryId must be \'factory\'|\'main\'|\'crypto\'|\'factory-crypto\'|\'factory-crvusd\'|\'factory-tricrypto\'|\'factory-eywa\''); } - if (registryId === 'factory' && typeof getFactoryRegistryAddress !== 'function') { - console.error(`No getFactoryRegistryAddress() config method found for blockchainId "${blockchainId}"`); - return { poolData: [] }; - } - - if (registryId === 'crypto' && typeof getCryptoRegistryAddress !== 'function') { - console.error(`No getCryptoRegistryAddress() config method found for blockchainId "${blockchainId}"`); - return { poolData: [] }; - } - - if (registryId === 'factory-crypto' && typeof getFactoryCryptoRegistryAddress !== 'function') { - console.error(`No getFactoryCryptoRegistryAddress() config method found for blockchainId "${blockchainId}"`); - return { poolData: [] }; - } - - if (registryId === 'factory-crvusd' && typeof getFactoryCrvusdRegistryAddress !== 'function') { - console.error(`No getFactoryCrvusdRegistryAddress() config method found for blockchainId "${blockchainId}"`); - return { poolData: [] }; - } - - if (registryId === 'factory-tricrypto' && typeof getFactoryTricryptoRegistryAddress !== 'function') { - console.error(`No getFactoryTricryptoRegistryAddress() config method found for blockchainId "${blockchainId}"`); - return { poolData: [] }; - } + const platformRegistries = getPlatformRegistries(blockchainId); - if (registryId === 'factory-eywa' && typeof getFactoryEywaRegistryAddress !== 'function') { - console.error(`No getFactoryEywaRegistryAddress() config method found for blockchainId "${blockchainId}"`); + if (!platformRegistries.includes(registryId)) { + console.error(`No registry "${registryId}" found for blockchainId "${blockchainId}"`); return { poolData: [] }; } diff --git a/utils/data/curve-platform-registries.js b/utils/data/curve-platform-registries.js new file mode 100644 index 00000000..452b0f01 --- /dev/null +++ b/utils/data/curve-platform-registries.js @@ -0,0 +1,31 @@ +import memoize from 'memoizee'; +import configs from 'constants/configs'; + +const getPlatformRegistries = memoize((blockchainId) => { + const config = configs[blockchainId]; + if (typeof config === 'undefined') { + throw new Error(`No config data for blockchainId "${blockchainId}"`); + } + + const { + getFactoryRegistryAddress, + getCryptoRegistryAddress, + getFactoryCryptoRegistryAddress, + getFactoryCrvusdRegistryAddress, + getFactoryTricryptoRegistryAddress, + getFactoryEywaRegistryAddress, + hasNoMainRegistry, + } = config; + + return [ + (!hasNoMainRegistry ? 'main' : null), + (typeof getFactoryRegistryAddress === 'function' ? 'factory' : null), + (typeof getCryptoRegistryAddress === 'function' ? 'crypto' : null), + (typeof getFactoryCryptoRegistryAddress === 'function' ? 'factory-crypto' : null), + (typeof getFactoryCrvusdRegistryAddress === 'function' ? 'factory-crvusd' : null), + (typeof getFactoryTricryptoRegistryAddress === 'function' ? 'factory-tricrypto' : null), + (typeof getFactoryEywaRegistryAddress === 'function' ? 'factory-eywa' : null), + ].filter((o) => o !== null); +}); + +export default getPlatformRegistries; diff --git a/utils/data/curve-pools-data.js b/utils/data/curve-pools-data.js index 0cbb83cf..484e04df 100644 --- a/utils/data/curve-pools-data.js +++ b/utils/data/curve-pools-data.js @@ -2,6 +2,7 @@ import memoize from 'memoizee'; import { flattenArray } from 'utils/Array'; import { sequentialPromiseFlatMap } from 'utils/Async'; import getPools from 'pages/api/getPools'; +import getPlatformRegistries from './curve-platform-registries'; const attachBlockchainId = (blockchainId, poolData) => ({ ...poolData, @@ -20,22 +21,10 @@ const attachFactoryTag = (poolData) => ({ const getAllCurvePoolsData = memoize(async (blockchainIds) => ( flattenArray(await sequentialPromiseFlatMap(blockchainIds, async (blockchainId) => ( - Promise.all([ - (getPools.straightCall({ blockchainId, registryId: 'main', preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData))), - (getPools.straightCall({ blockchainId, registryId: 'crypto', preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('crypto', poolData))), - (getPools.straightCall({ blockchainId, registryId: 'factory', preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('factory', poolData)).map(attachFactoryTag)), - (getPools.straightCall({ blockchainId, registryId: 'factory-crypto', preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('factory-crypto', poolData)).map(attachFactoryTag)), - (getPools.straightCall({ blockchainId, registryId: 'factory-crvusd', preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('factory-crvusd', poolData)).map(attachFactoryTag)), - (getPools.straightCall({ blockchainId, registryId: 'factory-tricrypto', preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('factory-tricrypto', poolData)).map(attachFactoryTag)), - (getPools.straightCall({ blockchainId, registryId: 'factory-eywa', preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('factory-eywa', poolData)).map(attachFactoryTag)), - ]) + Promise.all(getPlatformRegistries(blockchainId).map((registryId) => ( + (getPools.straightCall({ blockchainId, registryId, preventQueryingFactoData: true })) + .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData))) + ))) ))) ), { promise: true, From 2d93ec61299bed681fc202ecac432b9fb3785e81 Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 25 Aug 2023 13:27:55 +0200 Subject: [PATCH 49/83] Prevent recursive calling of getPools by itself --- pages/api/getAllGauges.js | 2 +- pages/api/getPools/[...params].js | 4 ++-- utils/data/curve-pools-data.js | 11 +++++++---- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pages/api/getAllGauges.js b/pages/api/getAllGauges.js index eb57f3c1..394f56c9 100644 --- a/pages/api/getAllGauges.js +++ b/pages/api/getAllGauges.js @@ -93,7 +93,7 @@ export default fn(async ({ blockchainId } = {}) => { id === 'ethereum' // Always include ethereum )); - const allPools = await getAllCurvePoolsData(blockchainIds); + const allPools = await getAllCurvePoolsData(blockchainIds, true); const getPoolByLpTokenAddress = (lpTokenAddress, blockchainId) => ( allPools.find((pool) => ( diff --git a/pages/api/getPools/[...params].js b/pages/api/getPools/[...params].js index 273de7bf..ef6fe746 100644 --- a/pages/api/getPools/[...params].js +++ b/pages/api/getPools/[...params].js @@ -1,8 +1,8 @@ import { fn } from 'utils/api'; import getPoolsApiFn from './index'; -export default fn(async ({ params: [blockchainId, registryId] }) => ( - getPoolsApiFn.straightCall({ blockchainId, registryId }) +export default fn(async ({ params: [blockchainId, registryId], ...queryParams }) => ( + getPoolsApiFn.straightCall({ ...queryParams, blockchainId, registryId }) ), { maxAge: 60, name: 'getPools[...params]', diff --git a/utils/data/curve-pools-data.js b/utils/data/curve-pools-data.js index 484e04df..3f7e2844 100644 --- a/utils/data/curve-pools-data.js +++ b/utils/data/curve-pools-data.js @@ -19,14 +19,17 @@ const attachFactoryTag = (poolData) => ({ factory: true, }); -const getAllCurvePoolsData = memoize(async (blockchainIds) => ( +const getAllCurvePoolsData = memoize(async (blockchainIds, useOnlineVersion = false) => ( flattenArray(await sequentialPromiseFlatMap(blockchainIds, async (blockchainId) => ( - Promise.all(getPlatformRegistries(blockchainId).map((registryId) => ( - (getPools.straightCall({ blockchainId, registryId, preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData))) + Promise.all(getPlatformRegistries(blockchainId).map(async (registryId) => ( + (useOnlineVersion ? + Promise.resolve((await (await fetch(`https://api.curve.fi/api/getPools/${blockchainId}/${registryId}?preventQueryingFactoData=true`)).json()).data) : + (getPools.straightCall({ blockchainId, registryId, preventQueryingFactoData: true })) + ).then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData))) ))) ))) ), { + length: 2, promise: true, maxAge: 60 * 1000, // 60s }); From 7329561e15f5145bc8c7c7f5a7575c664e2318d3 Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 25 Aug 2023 17:21:13 +0200 Subject: [PATCH 50/83] Try another way of improving getPools per --- pages/api/getAllGauges.js | 3 ++- pages/api/getPools/index.js | 12 ++++++++++-- utils/data/curve-pools-data.js | 15 ++++++++------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/pages/api/getAllGauges.js b/pages/api/getAllGauges.js index 394f56c9..cfae542f 100644 --- a/pages/api/getAllGauges.js +++ b/pages/api/getAllGauges.js @@ -83,6 +83,7 @@ const getPoolShortName = (pool) => { }; export default fn(async ({ blockchainId } = {}) => { + console.log('getAllGauges CALL', blockchainId) const chainsToQuery = SIDECHAINS_WITH_FACTORY_GAUGES; const blockchainIds = [ 'ethereum', @@ -93,7 +94,7 @@ export default fn(async ({ blockchainId } = {}) => { id === 'ethereum' // Always include ethereum )); - const allPools = await getAllCurvePoolsData(blockchainIds, true); + const allPools = await getAllCurvePoolsData(blockchainIds); const getPoolByLpTokenAddress = (lpTokenAddress, blockchainId) => ( allPools.find((pool) => ( diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 12d3019a..0f74ba94 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -44,6 +44,7 @@ import getMainRegistryPoolsAndLpTokensFn from 'pages/api/getMainRegistryPoolsAnd import getMainPoolsGaugeRewards from 'pages/api/getMainPoolsGaugeRewards'; import configs from 'constants/configs'; import allCoins from 'constants/coins'; +import { BASE_API_DOMAIN } from 'constants/AppConstants'; import POOLS_ZAPS from 'constants/pools-zaps'; import COIN_ADDRESS_COINGECKO_ID_MAP from 'constants/CoinAddressCoingeckoIdMap'; import { getHardcodedPoolId } from 'constants/PoolAddressInternalIdMap'; @@ -117,8 +118,15 @@ const getEthereumOnlyData = async ({ preventQueryingFactoData, blockchainId }) = (await import('utils/data/getFactoryV2GaugeRewards')).default : (await import('utils/data/getFactoryV2SidechainGaugeRewards')).default ); - const getGauges = (await import('pages/api/getAllGauges')).default; - gaugesData = await getGauges.straightCall({ blockchainId }); + console.log('retrieve gaugesData...') + /** + * Here we want getGauges data (which itself calls getPools) to be available + * whether api edge caches are hot or cold. This makes sure data is called + * every time, but takes advantages of returning cached data very quickly once + * caches are hot. + */ + gaugesData = (await (await fetch(BASE_API_DOMAIN + '/api/getAllGauges?blockchainId=' + blockchainId)).json()).data; + console.log('retrieved gaugesData!') if (blockchainId === 'ethereum') { const factoryGauges = Array.from(Object.values(gaugesData)).filter(({ side_chain }) => !side_chain); diff --git a/utils/data/curve-pools-data.js b/utils/data/curve-pools-data.js index 3f7e2844..a7559759 100644 --- a/utils/data/curve-pools-data.js +++ b/utils/data/curve-pools-data.js @@ -19,17 +19,18 @@ const attachFactoryTag = (poolData) => ({ factory: true, }); -const getAllCurvePoolsData = memoize(async (blockchainIds, useOnlineVersion = false) => ( +const getAllCurvePoolsData = memoize(async (blockchainIds) => ( flattenArray(await sequentialPromiseFlatMap(blockchainIds, async (blockchainId) => ( - Promise.all(getPlatformRegistries(blockchainId).map(async (registryId) => ( - (useOnlineVersion ? - Promise.resolve((await (await fetch(`https://api.curve.fi/api/getPools/${blockchainId}/${registryId}?preventQueryingFactoData=true`)).json()).data) : - (getPools.straightCall({ blockchainId, registryId, preventQueryingFactoData: true })) - ).then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData))) + Promise.all(getPlatformRegistries(blockchainId).map((registryId) => ( + (getPools.straightCall({ blockchainId, registryId, preventQueryingFactoData: true })) + .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData)).map((poolData) => ( + registryId.startsWith('factory') ? + attachFactoryTag(poolData) : + poolData + ))) ))) ))) ), { - length: 2, promise: true, maxAge: 60 * 1000, // 60s }); From 8b5dc4d8405de8545e49832b4f5b01326e7169a8 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 26 Aug 2023 11:51:32 +0200 Subject: [PATCH 51/83] Change data source for getPools/all --- pages/api/getPools/all.js | 5 ++--- utils/data/curve-pools-data.js | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pages/api/getPools/all.js b/pages/api/getPools/all.js index 2d6e6fd5..5f7d1935 100644 --- a/pages/api/getPools/all.js +++ b/pages/api/getPools/all.js @@ -1,12 +1,11 @@ import configs from 'constants/configs'; -import getAllCurvePoolsData from 'utils/data/curve-pools-data'; +import { fetchAllCurvePoolsDataEndpoints } from 'utils/data/curve-pools-data'; import { fn } from 'utils/api'; const allBlockchainIds = Array.from(Object.keys(configs)); -console.log({ allBlockchainIds }) export default fn(async () => ( - getAllCurvePoolsData(allBlockchainIds) + fetchAllCurvePoolsDataEndpoints(allBlockchainIds) ), { maxAge: 5 * 60, name: 'getAllPools', diff --git a/utils/data/curve-pools-data.js b/utils/data/curve-pools-data.js index a7559759..bf520c5f 100644 --- a/utils/data/curve-pools-data.js +++ b/utils/data/curve-pools-data.js @@ -2,7 +2,9 @@ import memoize from 'memoizee'; import { flattenArray } from 'utils/Array'; import { sequentialPromiseFlatMap } from 'utils/Async'; import getPools from 'pages/api/getPools'; +import { BASE_API_DOMAIN } from 'constants/AppConstants'; import getPlatformRegistries from './curve-platform-registries'; +import Request from 'utils/Request'; const attachBlockchainId = (blockchainId, poolData) => ({ ...poolData, @@ -35,4 +37,18 @@ const getAllCurvePoolsData = memoize(async (blockchainIds) => ( maxAge: 60 * 1000, // 60s }); +const fetchAllCurvePoolsDataEndpoints = async (blockchainIds) => ( + flattenArray(await sequentialPromiseFlatMap(blockchainIds, async (blockchainId) => ( + Promise.all(getPlatformRegistries(blockchainId).map(async (registryId) => ( + Promise.resolve((await (await Request.get(`${BASE_API_DOMAIN}/api/getPools/${blockchainId}/${registryId}`)).json()).data) + .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData)).map((poolData) => ( + registryId.startsWith('factory') ? + attachFactoryTag(poolData) : + poolData + ))) + ))) + ))) +); + export default getAllCurvePoolsData; +export { fetchAllCurvePoolsDataEndpoints }; From e3f735a2ad7a53105924c86415672657cae5474a Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 26 Aug 2023 11:51:56 +0200 Subject: [PATCH 52/83] Use drpc as fantom rpc provider --- constants/configs/configs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 31e04ef3..b9d217ff 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -129,7 +129,7 @@ const configs = { nativeCurrencyCoingeckoId: 'fantom', platformCoingeckoId: 'fantom', nativeAssetErc20WrapperId: 'wftm', - rpcUrl: 'https://fantom-mainnet.gateway.pokt.network/v1/lb/62759259ea1b320039c9e7ac', + rpcUrl: `https://lb.drpc.org/ogrpc?network=fantom&dkey=${process.env.DRPC_API_KEY}`, multicallAddress: '0xb828c456600857abd4ed6c32facc607bd0464f4f', multicall2Address: '0xD98e3dBE5950Ca8Ce5a4b59630a5652110403E5c', getFactoryRegistryAddress: async () => '0x686d67265703d1f124c45e33d47d794c566889ba', From b8a3c45651f01e67c04402d36941ffef23f6c962 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 26 Aug 2023 11:52:11 +0200 Subject: [PATCH 53/83] Fix typo --- pages/api/getCrvCircSupply.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/api/getCrvCircSupply.js b/pages/api/getCrvCircSupply.js index 5067ce18..ce14ba19 100644 --- a/pages/api/getCrvCircSupply.js +++ b/pages/api/getCrvCircSupply.js @@ -17,5 +17,5 @@ export default fn(async () => { }; }, { maxAge: 60 * 60, // 1h - name: 'getAllGauges', + name: 'getCrvCircSupply', }); From 6014bc2d29db4c0a94abbc32a91aeed2fa350061 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sat, 26 Aug 2023 12:01:16 +0200 Subject: [PATCH 54/83] Add getCrvusdTotalSupply endpoint --- package-lock.json | 1263 +++++++++++++++++++++++------ package.json | 1 + pages/api/getCrvusdTotalSupply.js | 16 + 3 files changed, 1029 insertions(+), 251 deletions(-) create mode 100644 pages/api/getCrvusdTotalSupply.js diff --git a/package-lock.json b/package-lock.json index bbdf149a..ffc47c89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "curve-api", "version": "0.1.0", "dependencies": { + "@curvefi/stablecoin-api": "^1.3.4", "axios": "^0.21.2", "big-number": "^2.0.0", "bignumber.js": "^9.0.1", @@ -585,6 +586,19 @@ "node": ">=6.9.0" } }, + "node_modules/@curvefi/stablecoin-api": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@curvefi/stablecoin-api/-/stablecoin-api-1.3.4.tgz", + "integrity": "sha512-qdi2yO0PIKPs1QCRI1mi1KwoQ/8xlkf+6LHs80xkmQI9dxINojxbDrqJFFbqIuddOqHU4zBbVZkIDE3XFYDVMQ==", + "dependencies": { + "@ethersproject/networks": "^5.5.0", + "axios": "^0.21.1", + "bignumber.js": "^9.0.1", + "ethcall": "^4.2.5", + "ethers": "^5.4.6", + "memoizee": "^0.4.15" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", @@ -645,9 +659,9 @@ } }, "node_modules/@ethersproject/abstract-provider": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.10.tgz", - "integrity": "sha512-OSReY5iz94iIaPlRvLiJP8YVIvQLx4aUvMMnHWSaA/vTU8QHZmgNlt4OBdYV1+aFY8Xl+VRYiWBHq72ZDKXXCQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "funding": [ { "type": "individual", @@ -659,19 +673,19 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, "node_modules/@ethersproject/abstract-signer": { - "version": "5.0.14", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.14.tgz", - "integrity": "sha512-JztBwVO7o5OHLh2vyjordlS4/1EjRyaECtc8vPdXTF1i4dXN+J0coeRoPN6ZFbBvi/YbaB6br2fvqhst1VQD/g==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "funding": [ { "type": "individual", @@ -683,17 +697,17 @@ } ], "dependencies": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, "node_modules/@ethersproject/address": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.11.tgz", - "integrity": "sha512-Et4GBdD8/tsBGjCEOKee9upN29qjL5kbRcmJifb4Penmiuh9GARXL2/xpXvEp5EW+EIW/rfCHFJrkYBgoQFQBw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "funding": [ { "type": "individual", @@ -705,17 +719,17 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, "node_modules/@ethersproject/base64": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.9.tgz", - "integrity": "sha512-37RBz5LEZ9SlTNGiWCYFttnIN9J7qVs9Xo2EbqGqDH5LfW9EIji66S+YDMpXVo1zWDax1FkEldAoatxHK2gfgA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "funding": [ { "type": "individual", @@ -727,13 +741,13 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.0.9" + "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/@ethersproject/bignumber": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.15.tgz", - "integrity": "sha512-MTADqnyacvdRwtKh7o9ujwNDSM1SDJjYDMYAzjIgjoi9rh6TY4suMbhCa3i2vh3SUXiXSICyTI8ui+NPdrZ9Lw==", + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "funding": [ { "type": "individual", @@ -745,20 +759,34 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ethersproject/bignumber/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } }, "node_modules/@ethersproject/bytes": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.11.tgz", - "integrity": "sha512-D51plLYY5qF05AsoVQwIZVLqlBkaTPVHVP/1WmmBIWyHB0cRW0C9kh0kx5Exo51rB63Hk8PfHxc7SmpoaQFEyg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "funding": [ { "type": "individual", @@ -770,13 +798,13 @@ } ], "dependencies": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/constants": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.10.tgz", - "integrity": "sha512-OSo8jxkHLDXieCy8bgOFR7lMfgPxEzKvSDdP+WAWHCDM8+orwch0B6wzkTmiQFgryAtIctrBt5glAdJikZ3hGw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", "funding": [ { "type": "individual", @@ -788,13 +816,121 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.0.13" + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts/node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "node_modules/@ethersproject/hash": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.12.tgz", - "integrity": "sha512-kn4QN+fhNFbUgX3XZTZUaQixi0oyfIEY+hfW+KtkHu+rq7dV76oAIvaLEEynu1/4npOL38E4X4YI42gGZk+C0Q==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", "funding": [ { "type": "individual", @@ -806,20 +942,25 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, "node_modules/@ethersproject/keccak256": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.9.tgz", - "integrity": "sha512-zhdUTj6RGtCJSgU+bDrWF6cGbvW453LoIC1DSNWrTlXzC7WuH4a+EiPrgc7/kNoRxerKuA/cxYlI8GwNtVtDlw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "funding": [ { "type": "individual", @@ -831,19 +972,14 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, - "node_modules/@ethersproject/keccak256/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, "node_modules/@ethersproject/logger": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.10.tgz", - "integrity": "sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", "funding": [ { "type": "individual", @@ -856,9 +992,9 @@ ] }, "node_modules/@ethersproject/networks": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.9.tgz", - "integrity": "sha512-L8+VCQwArBLGkxZb/5Ns/OH/OxP38AcaveXIxhUTq+VWpXYjrObG3E7RDQIKkUx1S1IcQl/UWTz5w4DK0UitJg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "funding": [ { "type": "individual", @@ -870,13 +1006,107 @@ } ], "dependencies": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" } }, "node_modules/@ethersproject/properties": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.9.tgz", - "integrity": "sha512-ZCjzbHYTw+rF1Pn8FDCEmx3gQttwIHcm/6Xee8g/M3Ga3SfW4tccNMbs5zqnBH0E4RoOPaeNgyg1O68TaF0tlg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", "funding": [ { "type": "individual", @@ -888,13 +1118,33 @@ } ], "dependencies": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/rlp": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.9.tgz", - "integrity": "sha512-ns1U7ZMVeruUW6JXc4om+1w3w4ynHN/0fpwmeNTsAjwGKoF8SAUgue6ylKpHKWSti2idx7jDxbn8hNNFHk67CA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", "funding": [ { "type": "individual", @@ -906,14 +1156,15 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, "node_modules/@ethersproject/signing-key": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.11.tgz", - "integrity": "sha512-Jfcru/BGwdkXhLxT+8WCZtFy7LL0TPFZw05FAb5asxB/MyVsEfNdNxGDtjVE9zXfmRSPe/EusXYY4K7wcygOyQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", "funding": [ { "type": "individual", @@ -925,16 +1176,41 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.4" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "node_modules/@ethersproject/strings": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.10.tgz", - "integrity": "sha512-KAeoS1tZ9/5ECXiIZA6S6hywbD0so2VmuW+Wfyo5EDXeyZ6Na1nxTPhTnW7voQmjbeYJffCrOc0qLFJeylyg7w==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "funding": [ { "type": "individual", @@ -946,15 +1222,61 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/transactions": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.11.tgz", - "integrity": "sha512-ftsRvR9+gQp7L63F6+XmstvsZ4w8GtWvQB08e/zB+oB86Fnhq8+i/tkgpJplSHC8I/qgiCisva+M3u2GVhDFPA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", "funding": [ { "type": "individual", @@ -966,21 +1288,49 @@ } ], "dependencies": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, "node_modules/@ethersproject/web": { - "version": "5.0.14", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.14.tgz", - "integrity": "sha512-QpTgplslwZ0Sp9oKNLoRuS6TKxnkwfaEk3gr7zd7XLF8XBsYejsrQO/03fNfnMx/TAT/RR6WEw/mbOwpRSeVRA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", "funding": [ { "type": "individual", @@ -992,11 +1342,11 @@ } ], "dependencies": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "node_modules/@graphql-typed-document-node/core": { @@ -1278,6 +1628,16 @@ "@types/node": "*" } }, + "node_modules/abi-coder": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/abi-coder/-/abi-coder-4.1.1.tgz", + "integrity": "sha512-CVEKpbWSIrb6JxLPsAuXrrtL8ml2MnEEcINgxOp7gR2u4GUFEKO4e0raAD1+c6UdFJ2QtX2NRoYol9k1B3TxHw==", + "dependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/keccak256": "^5.0.0", + "@ethersproject/strings": "^5.0.0" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1311,6 +1671,11 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1590,6 +1955,11 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, "node_modules/big-number": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/big-number/-/big-number-2.0.0.tgz", @@ -1614,9 +1984,9 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { "version": "1.20.1", @@ -3170,6 +3540,24 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/ethcall": { + "version": "4.8.13", + "resolved": "https://registry.npmjs.org/ethcall/-/ethcall-4.8.13.tgz", + "integrity": "sha512-kpD000saTfBDoQn5g8gqTJhjGinWnAPkAwyYCN8SsGCUgjZxTMtEVwA+soo4ii/uyRYKMDeFFVk866GqU0jerA==", + "dependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/contracts": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "@types/node": "^18.6.3", + "abi-coder": "^4.0.0" + } + }, + "node_modules/ethcall/node_modules/@types/node": { + "version": "18.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.11.tgz", + "integrity": "sha512-r3hjHPBu+3LzbGBa8DHnr/KAeTEEOrahkcL+cZc4MaBMTM+mk8LtXR+zw+nqfjuDZZzYTYgTcpHuP+BEQk069g==" + }, "node_modules/ethereum-bloom-filters": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz", @@ -3235,6 +3623,79 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/ethers/node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "node_modules/ethjs-unit": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", @@ -7536,6 +7997,19 @@ } } }, + "@curvefi/stablecoin-api": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@curvefi/stablecoin-api/-/stablecoin-api-1.3.4.tgz", + "integrity": "sha512-qdi2yO0PIKPs1QCRI1mi1KwoQ/8xlkf+6LHs80xkmQI9dxINojxbDrqJFFbqIuddOqHU4zBbVZkIDE3XFYDVMQ==", + "requires": { + "@ethersproject/networks": "^5.5.0", + "axios": "^0.21.1", + "bignumber.js": "^9.0.1", + "ethcall": "^4.2.5", + "ethers": "^5.4.6", + "memoizee": "^0.4.15" + } + }, "@eslint/eslintrc": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", @@ -7587,192 +8061,384 @@ } }, "@ethersproject/abstract-provider": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.10.tgz", - "integrity": "sha512-OSReY5iz94iIaPlRvLiJP8YVIvQLx4aUvMMnHWSaA/vTU8QHZmgNlt4OBdYV1+aFY8Xl+VRYiWBHq72ZDKXXCQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, "@ethersproject/abstract-signer": { - "version": "5.0.14", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.14.tgz", - "integrity": "sha512-JztBwVO7o5OHLh2vyjordlS4/1EjRyaECtc8vPdXTF1i4dXN+J0coeRoPN6ZFbBvi/YbaB6br2fvqhst1VQD/g==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "requires": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, "@ethersproject/address": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.11.tgz", - "integrity": "sha512-Et4GBdD8/tsBGjCEOKee9upN29qjL5kbRcmJifb4Penmiuh9GARXL2/xpXvEp5EW+EIW/rfCHFJrkYBgoQFQBw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, "@ethersproject/base64": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.9.tgz", - "integrity": "sha512-37RBz5LEZ9SlTNGiWCYFttnIN9J7qVs9Xo2EbqGqDH5LfW9EIji66S+YDMpXVo1zWDax1FkEldAoatxHK2gfgA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "requires": { - "@ethersproject/bytes": "^5.0.9" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, "@ethersproject/bignumber": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.15.tgz", - "integrity": "sha512-MTADqnyacvdRwtKh7o9ujwNDSM1SDJjYDMYAzjIgjoi9rh6TY4suMbhCa3i2vh3SUXiXSICyTI8ui+NPdrZ9Lw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" } }, "@ethersproject/bytes": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.11.tgz", - "integrity": "sha512-D51plLYY5qF05AsoVQwIZVLqlBkaTPVHVP/1WmmBIWyHB0cRW0C9kh0kx5Exo51rB63Hk8PfHxc7SmpoaQFEyg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "requires": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/constants": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.10.tgz", - "integrity": "sha512-OSo8jxkHLDXieCy8bgOFR7lMfgPxEzKvSDdP+WAWHCDM8+orwch0B6wzkTmiQFgryAtIctrBt5glAdJikZ3hGw==", - "requires": { - "@ethersproject/bignumber": "^5.0.13" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + } } }, "@ethersproject/hash": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.12.tgz", - "integrity": "sha512-kn4QN+fhNFbUgX3XZTZUaQixi0oyfIEY+hfW+KtkHu+rq7dV76oAIvaLEEynu1/4npOL38E4X4YI42gGZk+C0Q==", - "requires": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, "@ethersproject/keccak256": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.9.tgz", - "integrity": "sha512-zhdUTj6RGtCJSgU+bDrWF6cGbvW453LoIC1DSNWrTlXzC7WuH4a+EiPrgc7/kNoRxerKuA/cxYlI8GwNtVtDlw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "requires": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - } + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, "@ethersproject/logger": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.10.tgz", - "integrity": "sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw==" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, "@ethersproject/networks": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.9.tgz", - "integrity": "sha512-L8+VCQwArBLGkxZb/5Ns/OH/OxP38AcaveXIxhUTq+VWpXYjrObG3E7RDQIKkUx1S1IcQl/UWTz5w4DK0UitJg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", "requires": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" } }, "@ethersproject/properties": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.9.tgz", - "integrity": "sha512-ZCjzbHYTw+rF1Pn8FDCEmx3gQttwIHcm/6Xee8g/M3Ga3SfW4tccNMbs5zqnBH0E4RoOPaeNgyg1O68TaF0tlg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + }, + "dependencies": { + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + } + } + }, + "@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", "requires": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/rlp": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.9.tgz", - "integrity": "sha512-ns1U7ZMVeruUW6JXc4om+1w3w4ynHN/0fpwmeNTsAjwGKoF8SAUgue6ylKpHKWSti2idx7jDxbn8hNNFHk67CA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, "@ethersproject/signing-key": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.11.tgz", - "integrity": "sha512-Jfcru/BGwdkXhLxT+8WCZtFy7LL0TPFZw05FAb5asxB/MyVsEfNdNxGDtjVE9zXfmRSPe/EusXYY4K7wcygOyQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.4" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "@ethersproject/strings": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.10.tgz", - "integrity": "sha512-KAeoS1tZ9/5ECXiIZA6S6hywbD0so2VmuW+Wfyo5EDXeyZ6Na1nxTPhTnW7voQmjbeYJffCrOc0qLFJeylyg7w==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/transactions": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.11.tgz", - "integrity": "sha512-ftsRvR9+gQp7L63F6+XmstvsZ4w8GtWvQB08e/zB+oB86Fnhq8+i/tkgpJplSHC8I/qgiCisva+M3u2GVhDFPA==", - "requires": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, "@ethersproject/web": { - "version": "5.0.14", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.14.tgz", - "integrity": "sha512-QpTgplslwZ0Sp9oKNLoRuS6TKxnkwfaEk3gr7zd7XLF8XBsYejsrQO/03fNfnMx/TAT/RR6WEw/mbOwpRSeVRA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "requires": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "@graphql-typed-document-node/core": { @@ -7938,6 +8604,16 @@ "@types/node": "*" } }, + "abi-coder": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/abi-coder/-/abi-coder-4.1.1.tgz", + "integrity": "sha512-CVEKpbWSIrb6JxLPsAuXrrtL8ml2MnEEcINgxOp7gR2u4GUFEKO4e0raAD1+c6UdFJ2QtX2NRoYol9k1B3TxHw==", + "requires": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/keccak256": "^5.0.0", + "@ethersproject/strings": "^5.0.0" + } + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -7960,6 +8636,11 @@ "dev": true, "requires": {} }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8175,6 +8856,11 @@ "tweetnacl": "^0.14.3" } }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, "big-number": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/big-number/-/big-number-2.0.0.tgz", @@ -8196,9 +8882,9 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "body-parser": { "version": "1.20.1", @@ -9468,6 +10154,26 @@ } } }, + "ethcall": { + "version": "4.8.13", + "resolved": "https://registry.npmjs.org/ethcall/-/ethcall-4.8.13.tgz", + "integrity": "sha512-kpD000saTfBDoQn5g8gqTJhjGinWnAPkAwyYCN8SsGCUgjZxTMtEVwA+soo4ii/uyRYKMDeFFVk866GqU0jerA==", + "requires": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/contracts": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "@types/node": "^18.6.3", + "abi-coder": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "18.17.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.11.tgz", + "integrity": "sha512-r3hjHPBu+3LzbGBa8DHnr/KAeTEEOrahkcL+cZc4MaBMTM+mk8LtXR+zw+nqfjuDZZzYTYgTcpHuP+BEQk069g==" + } + } + }, "ethereum-bloom-filters": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz", @@ -9533,6 +10239,61 @@ } } }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + } + } + }, "ethjs-unit": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", diff --git a/package.json b/package.json index bd21b11e..406eedd7 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "start": "next start" }, "dependencies": { + "@curvefi/stablecoin-api": "^1.3.4", "axios": "^0.21.2", "big-number": "^2.0.0", "bignumber.js": "^9.0.1", diff --git a/pages/api/getCrvusdTotalSupply.js b/pages/api/getCrvusdTotalSupply.js new file mode 100644 index 00000000..5816debe --- /dev/null +++ b/pages/api/getCrvusdTotalSupply.js @@ -0,0 +1,16 @@ +import { fn } from 'utils/api'; +import crvusd from "@curvefi/stablecoin-api"; +import configs from 'constants/configs'; + +export default fn(async () => { + await crvusd.init('JsonRpc', { url: configs.ethereum.rpcUrl, privateKey: '' }, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0, chainId: 1 }); + + const crvusdTotalSupply = await crvusd.totalSupply(); + + return { + crvusdTotalSupply, + }; +}, { + maxAge: 5 * 60, // 5m + name: 'getCrvusdTotalSupply', +}); From ad1f3b3734ff803454ab8c3fa44be2700f86f5a0 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 28 Aug 2023 11:12:53 +0200 Subject: [PATCH 55/83] Add reference prices for base --- constants/CoinAddressCoingeckoIdMap.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/constants/CoinAddressCoingeckoIdMap.js b/constants/CoinAddressCoingeckoIdMap.js index 55f987cc..c43bbb1e 100644 --- a/constants/CoinAddressCoingeckoIdMap.js +++ b/constants/CoinAddressCoingeckoIdMap.js @@ -180,4 +180,12 @@ export default { '0x88eeC49252c8cbc039DCdB394c0c2BA2f1637EA0': 'tether', '0xC16B81Af351BA9e64C1a069E3Ab18c244A1E3049': 'ageur', }, + base: { + '0x4200000000000000000000000000000000000006': 'ethereum', + '0xeb466342c4d449bc9f53a865d5cb90586f405215': 'axlusdc', + '0x50c5725949a6f0c72e6c4a641f24049a917db0cb': 'dai', + '0x417Ac0e078398C154EdFadD9Ef675d30Be60Af93': 'crvusd', + '0x236aa50979D5f3De3Bd1Eeb40E81137F22ab794b': 'tbtc', + '0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca': 'bridged-usd-coin-base', + }, }; From c9cb5abe0b6a3587948cf83f5233c2bf677a24e7 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 28 Aug 2023 11:32:08 +0200 Subject: [PATCH 56/83] Update base addresses --- constants/configs/configs.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index b9d217ff..8f89a6ff 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -537,22 +537,22 @@ const configs = { rpcUrl: 'https://mainnet.base.org/', multicallAddress: '0xca11bde05977b3631167028862be2a173976ca11', multicall2Address: '0xca11bde05977b3631167028862be2a173976ca11', - getFactoryRegistryAddress: async () => '0x114C4042B11a2b16F58Fe1BFe847589a122F678a', + getFactoryRegistryAddress: async () => '0x3093f9B57A428F3EB6285a589cb35bEA6e78c336', getFactoryCryptoRegistryAddress: async () => '0x5EF72230578b3e399E6C6F4F6360edF95e83BBfd', getFactoryTricryptoRegistryAddress: async () => '0xA5961898870943c68037F6848d2D866Ed2016bcB', factoryImplementationAddressMap: new Map([ - ['0x4244eB811D6e0Ef302326675207A95113dB4E1F8'.toLowerCase(), 'plain2basic'], - ['0x883feb1B9862e0c8559D26F53bf19264C5E0839F'.toLowerCase(), 'plain2balances'], - ['0x66B5792ED50a2a7405Ea75C4B6B1913eF4E46661'.toLowerCase(), 'plain2eth'], - ['0xcB4eB43E31C830e22baF764c64F11F32C280496c'.toLowerCase(), 'plain2optimized'], - ['0x0E2615ce69Cd3Dc3Ff6f66a975bEa0655F3bA7b9'.toLowerCase(), 'plain3basic'], - ['0x0E2615ce69Cd3Dc3Ff6f66a975bEa0655F3bA7b9'.toLowerCase(), 'plain3balances'], - ['0x7D6Cf519Bfe71EaFb21bC1787964559505AFF685'.toLowerCase(), 'plain3eth'], - ['0x94347E31BbA87C1004AF3b149cc8c1DE90ABE910'.toLowerCase(), 'plain3optimized'], - ['0xD2AcAe14ae2ee0f6557aC6C6D0e407a92C36214b'.toLowerCase(), 'plain4basic'], - ['0xB8bF7ABeb9b4E9AD35EAB77643aDb363E40a3b0B'.toLowerCase(), 'plain4balances'], - ['0x4A5bF7Ab9A8202692051c19B102d3eDD62aaBAE6'.toLowerCase(), 'plain4eth'], - ['0x0B4dc7A945695D11FD83e40B2DfC2B896A02395F'.toLowerCase(), 'plain4optimized'], + ['0xD166EEdf272B860E991d331B71041799379185D5'.toLowerCase(), 'plain2basic'], + ['0x5C627d6925e448Ae418BC8a45d56B31fe5009Bea'.toLowerCase(), 'plain2balances'], + ['0x22D710931F01c1681Ca1570Ff016eD42EB7b7c2a'.toLowerCase(), 'plain2eth'], + ['0xA50d9a424A14aF0b9e7e9243dc1597d977f6cB09'.toLowerCase(), 'plain2optimized'], + ['0xeD49979026DC44DC7E83b1471794ec9b2a365Ea2'.toLowerCase(), 'plain3basic'], + ['0x0Cc51c9786f3777a6d50961CEBb2BB6E69ec5e07'.toLowerCase(), 'plain3balances'], + ['0x0a31527a8dE2Ee97BBD8cCE14Db8E8826a0b6C4f'.toLowerCase(), 'plain3eth'], + ['0x1086F023146f9026A9Bb22983CE866813C59518A'.toLowerCase(), 'plain3optimized'], + ['0x1621E58d36EB5Ef26F9768Ebe9DB77181b1f5a02'.toLowerCase(), 'plain4basic'], + ['0x2FdDeDF2D842f23da2B81b9144e75cEcb691Bf19'.toLowerCase(), 'plain4balances'], + ['0x50E09Ee7080b32aef3e92346891dD2DD389B5fAf'.toLowerCase(), 'plain4eth'], + ['0x44d9B3f4EE15AC81FEb918501fca0ddc9d83C976'.toLowerCase(), 'plain4optimized'], ]), BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), DISABLED_POOLS_ADDRESSES: [].map(lc), From f5bc175a07b3dc235d94325d4efb01abc9d99d70 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 28 Aug 2023 14:03:43 +0200 Subject: [PATCH 57/83] Add factory apy endpoint for base --- pages/api/getFactoryAPYs-base.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pages/api/getFactoryAPYs-base.js b/pages/api/getFactoryAPYs-base.js index fbd63ded..946c0252 100644 --- a/pages/api/getFactoryAPYs-base.js +++ b/pages/api/getFactoryAPYs-base.js @@ -13,6 +13,7 @@ import { BASE_API_DOMAIN } from 'constants/AppConstants'; import getPoolsFn from 'pages/api/getPools'; import configs from 'constants/configs'; import { fn } from 'utils/api'; +import getAllCurvePoolsData from 'utils/data/curve-pools-data'; import registryAbi from 'constants/abis/factory_registry.json'; import multicallAbi from 'constants/abis/multicall.json'; import factorypool3Abi from 'constants/abis/factory_swap.json'; @@ -27,16 +28,17 @@ export default fn(async (query) => { let multicallAddress = config.multicallAddress; let registry = new web3.eth.Contract(registryAbi, registryAddress); let multicall = new web3.eth.Contract(multicallAbi, multicallAddress) - let res = await getPoolsFn.straightCall({ blockchainId: 'base', registryId: 'factory' }) + // let res = await getPoolsFn.straightCall({ blockchainId: 'base', registryId: 'factory' }) + const poolData = await getAllCurvePoolsData(['base']); let poolDetails = []; let totalVolume = 0 const latest = await web3.eth.getBlockNumber() const DAY_BLOCKS_24H = config.approxBlocksPerDay; - let DAY_BLOCKS = DAY_BLOCKS_24H + let DAY_BLOCKS = 2000 await Promise.all( - res.poolData.map(async (pool, index) => { + poolData.map(async (pool, index) => { let poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) From d6159c5a75453104b02fa8e3ab159a6d52e577c5 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 29 Aug 2023 11:48:08 +0200 Subject: [PATCH 58/83] Add base gauge facto --- pages/api/getAllGauges.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/api/getAllGauges.js b/pages/api/getAllGauges.js index cfae542f..28502b65 100644 --- a/pages/api/getAllGauges.js +++ b/pages/api/getAllGauges.js @@ -40,6 +40,7 @@ const SIDECHAINS_WITH_FACTORY_GAUGES = [ 'moonbeam', 'kava', 'celo', + 'base', ]; const lc = (str) => str.toLowerCase(); From 97ead0175787cfcd9ab133fed32942033cd63953 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 29 Aug 2023 11:48:31 +0200 Subject: [PATCH 59/83] Use mainnet crvusd price on all chains --- pages/api/getPools/index.js | 6 +----- utils/data/getCrvusdPrice.js | 35 ++++++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 0f74ba94..f5dcd58c 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -720,11 +720,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ...coinAddressesAndPricesMapFallbackFromAddress, }; - const crvusdTokenAddresseAndPriceMapFallback = ( - blockchainId === 'ethereum' ? - await getCrvusdPrice(networkSettingsParam) : - {} - ); + const crvusdTokenAddresseAndPriceMapFallback = await getCrvusdPrice(blockchainId); const ycTokensAddressesAndPricesMapFallback = ( (blockchainId === 'ethereum' || blockchainId === 'fantom') ? diff --git a/utils/data/getCrvusdPrice.js b/utils/data/getCrvusdPrice.js index 27b45e14..743dd812 100644 --- a/utils/data/getCrvusdPrice.js +++ b/utils/data/getCrvusdPrice.js @@ -1,26 +1,43 @@ import memoize from 'memoizee'; +import Web3 from 'web3'; +import configs from 'constants/configs'; +import { lc } from 'utils/String'; import { multiCall } from 'utils/Calls'; import AGGREGATOR_STABLE_PRICE_ABI from 'constants/abis/AggregatorStablePrice.json'; -const CRVUSD_ADDRESS = '0xf939e0a03fb07f59a73314e73794be0e57ac1b4e'; +const CRVUSD_ADDRESSES = { + ethereum: lc('0xf939e0a03fb07f59a73314e73794be0e57ac1b4e'), + base: lc('0x417ac0e078398c154edfadd9ef675d30be60af93'), +}; + const AGGREGATOR_STABLE_PRICE_ADDRESS = '0x18672b1b0c623a30089A280Ed9256379fb0E4E62'; -const getCrvusdPrice = memoize(async ( - networkSettingsParam, -) => { +const { rpcUrl, multicall2Address } = configs.ethereum; +const web3 = new Web3(rpcUrl); + +const getCrvusdPrice = memoize(async () => { const [crvusdPrice] = await multiCall([{ address: AGGREGATOR_STABLE_PRICE_ADDRESS, abi: AGGREGATOR_STABLE_PRICE_ABI, methodName: 'price', - ...networkSettingsParam, + networkSettings: { web3, multicall2Address }, }]); - return { - [CRVUSD_ADDRESS.toLowerCase()]: (crvusdPrice / 1e18), - }; + return (crvusdPrice / 1e18); }, { promise: true, maxAge: 1 * 60 * 1000, // 1 min }); -export default getCrvusdPrice; +const getCrvusdPriceForBlockchainId = async (blockchainId) => { + const isCrvusdDeployedThere = Object.hasOwn(CRVUSD_ADDRESSES, blockchainId); + if (!isCrvusdDeployedThere) return {}; + + const crvusdPrice = await getCrvusdPrice(); + + return { + [CRVUSD_ADDRESSES[blockchainId]]: crvusdPrice, + }; +}; + +export default getCrvusdPriceForBlockchainId; From 9e35dca6aa60aa5512ba0cda34d170b5e51af604 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 29 Aug 2023 17:22:22 +0200 Subject: [PATCH 60/83] Add hidden pools --- pages/api/getHiddenPools.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pages/api/getHiddenPools.js b/pages/api/getHiddenPools.js index d91d50eb..d97c86e2 100644 --- a/pages/api/getHiddenPools.js +++ b/pages/api/getHiddenPools.js @@ -89,6 +89,10 @@ const HIDDEN_POOLS_IDS = { xdai: [ 'factory-v2-12', ], + base: [ + 'factory-crypto-0', + 'factory-tricrypto-0', + ], }; export default fn(async () => HIDDEN_POOLS_IDS); From a02a46129c89055cc40767da2ef626f713b595b4 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 29 Aug 2023 17:42:06 +0200 Subject: [PATCH 61/83] Fix gauges script to look at all new registries too --- pages/api/getFactoGauges/index.js | 58 +++++-------------------------- utils/data/curve-pools-data.js | 2 +- 2 files changed, 9 insertions(+), 51 deletions(-) diff --git a/pages/api/getFactoGauges/index.js b/pages/api/getFactoGauges/index.js index cc4a5634..a1170532 100644 --- a/pages/api/getFactoGauges/index.js +++ b/pages/api/getFactoGauges/index.js @@ -11,7 +11,7 @@ import factorypool3Abi from 'constants/abis/factory_swap.json'; import { multiCall } from 'utils/Calls'; import { lc } from 'utils/String'; import { arrayToHashmap, arrayOfIncrements, flattenArray } from 'utils/Array'; -import getPools from 'pages/api/getPools'; +import getAllCurvePoolsData from 'utils/data/curve-pools-data'; import configs from 'constants/configs'; import getFactoryV2SidechainGaugeRewards from 'utils/data/getFactoryV2SidechainGaugeRewards'; @@ -195,58 +195,15 @@ export default fn(async ({ blockchainId }) => { }; }); - const hasCryptoPools = !!config.getCryptoRegistryAddress; - const hasFactoPools = !!config.getFactoryRegistryAddress; - const hasFactoCryptoPools = !!config.getFactoryCryptoRegistryAddress; - const [ - stablePools, - cryptoPools, - factoPools, - factoCryptoPools, - ] = await Promise.all([( - (await getPools.straightCall({ blockchainId, registryId: 'main', preventQueryingFactoData: true })).poolData - ), ( - hasCryptoPools ? - (await getPools.straightCall({ blockchainId, registryId: 'crypto', preventQueryingFactoData: true })).poolData : - [] - ), ( - hasFactoPools ? - (await getPools.straightCall({ blockchainId, registryId: 'factory', preventQueryingFactoData: true })).poolData : - [] - ), ( - hasFactoCryptoPools ? - (await getPools.straightCall({ blockchainId, registryId: 'factory-crypto', preventQueryingFactoData: true })).poolData : - [] - )]); + const allPools = await getAllCurvePoolsData([blockchainId]); const gaugesDataWithPoolAddressAndType = gaugesData.map((gaugeData) => { - const poolInMainRegistry = stablePools.find(({ lpTokenAddress, address }) => ( - lpTokenAddress === gaugeData.lpTokenAddress || - address === gaugeData.lpTokenAddress + const pool = allPools.find(({ lpTokenAddress, address }) => ( + lc(lpTokenAddress) === lc(gaugeData.lpTokenAddress) || + lc(address) === lc(gaugeData.lpTokenAddress) )); - const poolInCryptoRegistry = cryptoPools.find(({ lpTokenAddress, address }) => ( - lpTokenAddress === gaugeData.lpTokenAddress || - address === gaugeData.lpTokenAddress - )); - const poolInCryptoFactoRegistry = factoCryptoPools.find(({ lpTokenAddress, address }) => ( - lpTokenAddress === gaugeData.lpTokenAddress || - address === gaugeData.lpTokenAddress - )); - const poolInStableFactoRegistry = factoPools.find(({ lpTokenAddress, address }) => ( - lpTokenAddress === gaugeData.lpTokenAddress || - address === gaugeData.lpTokenAddress - )); - - if ( - typeof poolInMainRegistry === 'undefined' && - typeof poolInCryptoRegistry === 'undefined' && - typeof poolInCryptoFactoRegistry === 'undefined' && - typeof poolInStableFactoRegistry === 'undefined' - ) { - return null; - } - const pool = (poolInMainRegistry || poolInCryptoRegistry || poolInCryptoFactoRegistry || poolInStableFactoRegistry); + if (typeof pool === 'undefined') return null; return { ...gaugeData, @@ -255,7 +212,8 @@ export default fn(async ({ blockchainId }) => { pool.usdTotal / (pool.totalSupply / 1e18) ), - type: ((poolInCryptoFactoRegistry || poolInCryptoRegistry) ? 'crypto' : 'stable'), + type: ((pool.registryId === 'main' || pool.registryId === 'factory') ? 'stable' : 'crypto'), + registryId: pool.registryId, }; }).filter((o) => o !== null); diff --git a/utils/data/curve-pools-data.js b/utils/data/curve-pools-data.js index bf520c5f..177fcb87 100644 --- a/utils/data/curve-pools-data.js +++ b/utils/data/curve-pools-data.js @@ -25,7 +25,7 @@ const getAllCurvePoolsData = memoize(async (blockchainIds) => ( flattenArray(await sequentialPromiseFlatMap(blockchainIds, async (blockchainId) => ( Promise.all(getPlatformRegistries(blockchainId).map((registryId) => ( (getPools.straightCall({ blockchainId, registryId, preventQueryingFactoData: true })) - .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData)).map((poolData) => ( + .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId(registryId, poolData)).map((poolData) => ( registryId.startsWith('factory') ? attachFactoryTag(poolData) : poolData From 8e98b3a77f7e3661aab109b90ebf0f3eb278cdd8 Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 31 Aug 2023 10:42:54 +0200 Subject: [PATCH 62/83] Try fixing base tricrypto volume --- constants/abis/factory_tricrypto_swap.json | 1797 ++++++++++++++++++++ pages/api/getFactoryAPYs-base.js | 43 +- 2 files changed, 1827 insertions(+), 13 deletions(-) create mode 100644 constants/abis/factory_tricrypto_swap.json diff --git a/constants/abis/factory_tricrypto_swap.json b/constants/abis/factory_tricrypto_swap.json new file mode 100644 index 00000000..ed6e4c97 --- /dev/null +++ b/constants/abis/factory_tricrypto_swap.json @@ -0,0 +1,1797 @@ +[ + { + "name": "Transfer", + "inputs": [ + { + "name": "sender", + "type": "address", + "indexed": true + }, + { + "name": "receiver", + "type": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true + }, + { + "name": "spender", + "type": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "TokenExchange", + "inputs": [ + { + "name": "buyer", + "type": "address", + "indexed": true + }, + { + "name": "sold_id", + "type": "uint256", + "indexed": false + }, + { + "name": "tokens_sold", + "type": "uint256", + "indexed": false + }, + { + "name": "bought_id", + "type": "uint256", + "indexed": false + }, + { + "name": "tokens_bought", + "type": "uint256", + "indexed": false + }, + { + "name": "fee", + "type": "uint256", + "indexed": false + }, + { + "name": "packed_price_scale", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "AddLiquidity", + "inputs": [ + { + "name": "provider", + "type": "address", + "indexed": true + }, + { + "name": "token_amounts", + "type": "uint256[3]", + "indexed": false + }, + { + "name": "fee", + "type": "uint256", + "indexed": false + }, + { + "name": "token_supply", + "type": "uint256", + "indexed": false + }, + { + "name": "packed_price_scale", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "RemoveLiquidity", + "inputs": [ + { + "name": "provider", + "type": "address", + "indexed": true + }, + { + "name": "token_amounts", + "type": "uint256[3]", + "indexed": false + }, + { + "name": "token_supply", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "RemoveLiquidityOne", + "inputs": [ + { + "name": "provider", + "type": "address", + "indexed": true + }, + { + "name": "token_amount", + "type": "uint256", + "indexed": false + }, + { + "name": "coin_index", + "type": "uint256", + "indexed": false + }, + { + "name": "coin_amount", + "type": "uint256", + "indexed": false + }, + { + "name": "approx_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "packed_price_scale", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "CommitNewParameters", + "inputs": [ + { + "name": "deadline", + "type": "uint256", + "indexed": true + }, + { + "name": "mid_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "out_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "fee_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "allowed_extra_profit", + "type": "uint256", + "indexed": false + }, + { + "name": "adjustment_step", + "type": "uint256", + "indexed": false + }, + { + "name": "ma_time", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "NewParameters", + "inputs": [ + { + "name": "mid_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "out_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "fee_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "allowed_extra_profit", + "type": "uint256", + "indexed": false + }, + { + "name": "adjustment_step", + "type": "uint256", + "indexed": false + }, + { + "name": "ma_time", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "RampAgamma", + "inputs": [ + { + "name": "initial_A", + "type": "uint256", + "indexed": false + }, + { + "name": "future_A", + "type": "uint256", + "indexed": false + }, + { + "name": "initial_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "future_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "initial_time", + "type": "uint256", + "indexed": false + }, + { + "name": "future_time", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "StopRampA", + "inputs": [ + { + "name": "current_A", + "type": "uint256", + "indexed": false + }, + { + "name": "current_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "time", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "ClaimAdminFee", + "inputs": [ + { + "name": "admin", + "type": "address", + "indexed": true + }, + { + "name": "tokens", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "constructor", + "inputs": [ + { + "name": "_name", + "type": "string" + }, + { + "name": "_symbol", + "type": "string" + }, + { + "name": "_coins", + "type": "address[3]" + }, + { + "name": "_math", + "type": "address" + }, + { + "name": "_weth", + "type": "address" + }, + { + "name": "_salt", + "type": "bytes32" + }, + { + "name": "packed_precisions", + "type": "uint256" + }, + { + "name": "packed_A_gamma", + "type": "uint256" + }, + { + "name": "packed_fee_params", + "type": "uint256" + }, + { + "name": "packed_rebalancing_params", + "type": "uint256" + }, + { + "name": "packed_prices", + "type": "uint256" + } + ], + "outputs": [] + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange_underlying", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange_underlying", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "exchange_extended", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "sender", + "type": "address" + }, + { + "name": "receiver", + "type": "address" + }, + { + "name": "cb", + "type": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "add_liquidity", + "inputs": [ + { + "name": "amounts", + "type": "uint256[3]" + }, + { + "name": "min_mint_amount", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "add_liquidity", + "inputs": [ + { + "name": "amounts", + "type": "uint256[3]" + }, + { + "name": "min_mint_amount", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "add_liquidity", + "inputs": [ + { + "name": "amounts", + "type": "uint256[3]" + }, + { + "name": "min_mint_amount", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity", + "inputs": [ + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "min_amounts", + "type": "uint256[3]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[3]" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity", + "inputs": [ + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "min_amounts", + "type": "uint256[3]" + }, + { + "name": "use_eth", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[3]" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity", + "inputs": [ + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "min_amounts", + "type": "uint256[3]" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[3]" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity", + "inputs": [ + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "min_amounts", + "type": "uint256[3]" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + }, + { + "name": "claim_admin_fees", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[3]" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity_one_coin", + "inputs": [ + { + "name": "token_amount", + "type": "uint256" + }, + { + "name": "i", + "type": "uint256" + }, + { + "name": "min_amount", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity_one_coin", + "inputs": [ + { + "name": "token_amount", + "type": "uint256" + }, + { + "name": "i", + "type": "uint256" + }, + { + "name": "min_amount", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity_one_coin", + "inputs": [ + { + "name": "token_amount", + "type": "uint256" + }, + { + "name": "i", + "type": "uint256" + }, + { + "name": "min_amount", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "claim_admin_fees", + "inputs": [], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "transfer", + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "increaseAllowance", + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_add_value", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "decreaseAllowance", + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_sub_value", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "permit", + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + }, + { + "name": "_deadline", + "type": "uint256" + }, + { + "name": "_v", + "type": "uint8" + }, + { + "name": "_r", + "type": "bytes32" + }, + { + "name": "_s", + "type": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "fee_receiver", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "calc_token_amount", + "inputs": [ + { + "name": "amounts", + "type": "uint256[3]" + }, + { + "name": "deposit", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "get_dy", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "get_dx", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dy", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "lp_price", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "get_virtual_price", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "price_oracle", + "inputs": [ + { + "name": "k", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "last_prices", + "inputs": [ + { + "name": "k", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "price_scale", + "inputs": [ + { + "name": "k", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "calc_withdraw_one_coin", + "inputs": [ + { + "name": "token_amount", + "type": "uint256" + }, + { + "name": "i", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "calc_token_fee", + "inputs": [ + { + "name": "amounts", + "type": "uint256[3]" + }, + { + "name": "xp", + "type": "uint256[3]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "A", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "mid_fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "out_fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "fee_gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "allowed_extra_profit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "adjustment_step", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "ma_time", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "precisions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256[3]" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "fee_calc", + "inputs": [ + { + "name": "xp", + "type": "uint256[3]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "DOMAIN_SEPARATOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "ramp_A_gamma", + "inputs": [ + { + "name": "future_A", + "type": "uint256" + }, + { + "name": "future_gamma", + "type": "uint256" + }, + { + "name": "future_time", + "type": "uint256" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "stop_ramp_A_gamma", + "inputs": [], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "commit_new_parameters", + "inputs": [ + { + "name": "_new_mid_fee", + "type": "uint256" + }, + { + "name": "_new_out_fee", + "type": "uint256" + }, + { + "name": "_new_fee_gamma", + "type": "uint256" + }, + { + "name": "_new_allowed_extra_profit", + "type": "uint256" + }, + { + "name": "_new_adjustment_step", + "type": "uint256" + }, + { + "name": "_new_ma_time", + "type": "uint256" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "apply_new_parameters", + "inputs": [], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "revert_new_parameters", + "inputs": [], + "outputs": [] + }, + { + "stateMutability": "view", + "type": "function", + "name": "WETH20", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "MATH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "coins", + "inputs": [ + { + "name": "arg0", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "factory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "last_prices_timestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "initial_A_gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "initial_A_gamma_time", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_A_gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_A_gamma_time", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "balances", + "inputs": [ + { + "name": "arg0", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "D", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "xcp_profit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "xcp_profit_a", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "virtual_price", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "packed_rebalancing_params", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "packed_fee_params", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "ADMIN_FEE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "admin_actions_deadline", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "version", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "arg0", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "allowance", + "inputs": [ + { + "name": "arg0", + "type": "address" + }, + { + "name": "arg1", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "nonces", + "inputs": [ + { + "name": "arg0", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "salt", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ] + } +] diff --git a/pages/api/getFactoryAPYs-base.js b/pages/api/getFactoryAPYs-base.js index 946c0252..155c075e 100644 --- a/pages/api/getFactoryAPYs-base.js +++ b/pages/api/getFactoryAPYs-base.js @@ -17,6 +17,7 @@ import getAllCurvePoolsData from 'utils/data/curve-pools-data'; import registryAbi from 'constants/abis/factory_registry.json'; import multicallAbi from 'constants/abis/multicall.json'; import factorypool3Abi from 'constants/abis/factory_swap.json'; +import factorypool3BaseTricryptoAbi from 'constants/abis/factory_tricrypto_swap.json'; const web3 = new Web3(configs.base.rpcUrl); @@ -40,7 +41,11 @@ export default fn(async (query) => { await Promise.all( poolData.map(async (pool, index) => { - let poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) + let poolContract = new web3.eth.Contract(( + pool.registryId !== 'factory-tricrypto' ? + factorypool3Abi : + factorypool3BaseTricryptoAbi + ), pool.address) let vPriceOldFetch; let vPriceOldFetchFailed = false; @@ -71,21 +76,35 @@ export default fn(async (query) => { ); let volume = 0; - let events = await poolContract.getPastEvents(eventName, { - filter: {}, // Using an array means OR: e.g. 20 or 23 - fromBlock: latest - DAY_BLOCKS, - toBlock: 'latest' - }) + if (pool.registryId !== 'factory-tricrypto') { + let events = await poolContract.getPastEvents(eventName, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) - events.map((trade) => { + events.map((trade) => { - let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] - volume += t + let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] + volume += t - }) + }) + } else { + let events = await poolContract.getPastEvents(eventName2, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) + + events.map((trade) => { + + let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] + volume += t + }) + } - if (version == '2') { + if (version == '2' && pool.registryId !== 'factory-tricrypto') { let events2 = await poolContract.getPastEvents(eventName2, { filter: {}, // Using an array means OR: e.g. 20 or 23 fromBlock: latest - DAY_BLOCKS, @@ -96,8 +115,6 @@ export default fn(async (query) => { let t = trade.returnValues[2] / 10 ** decimals[trade.returnValues[1]] volume += t }) - - } // Since we don't fetch blocks for the entirety of the past 24 hours, From a54ac35880318433b32573ce49ace89d1100c7c8 Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 31 Aug 2023 17:47:44 +0200 Subject: [PATCH 63/83] Fix base vols --- constants/abis/factory_crypto_swap.json | 1367 +++++++++++++++++++++++ constants/configs/configs.js | 4 +- pages/api/getFactoryAPYs-base.js | 18 +- 3 files changed, 1380 insertions(+), 9 deletions(-) create mode 100644 constants/abis/factory_crypto_swap.json diff --git a/constants/abis/factory_crypto_swap.json b/constants/abis/factory_crypto_swap.json new file mode 100644 index 00000000..8787c45c --- /dev/null +++ b/constants/abis/factory_crypto_swap.json @@ -0,0 +1,1367 @@ +[ + { + "name": "TokenExchange", + "inputs": [ + { + "name": "buyer", + "type": "address", + "indexed": true + }, + { + "name": "sold_id", + "type": "uint256", + "indexed": false + }, + { + "name": "tokens_sold", + "type": "uint256", + "indexed": false + }, + { + "name": "bought_id", + "type": "uint256", + "indexed": false + }, + { + "name": "tokens_bought", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "AddLiquidity", + "inputs": [ + { + "name": "provider", + "type": "address", + "indexed": true + }, + { + "name": "token_amounts", + "type": "uint256[2]", + "indexed": false + }, + { + "name": "fee", + "type": "uint256", + "indexed": false + }, + { + "name": "token_supply", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "RemoveLiquidity", + "inputs": [ + { + "name": "provider", + "type": "address", + "indexed": true + }, + { + "name": "token_amounts", + "type": "uint256[2]", + "indexed": false + }, + { + "name": "token_supply", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "RemoveLiquidityOne", + "inputs": [ + { + "name": "provider", + "type": "address", + "indexed": true + }, + { + "name": "token_amount", + "type": "uint256", + "indexed": false + }, + { + "name": "coin_index", + "type": "uint256", + "indexed": false + }, + { + "name": "coin_amount", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "CommitNewParameters", + "inputs": [ + { + "name": "deadline", + "type": "uint256", + "indexed": true + }, + { + "name": "admin_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "mid_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "out_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "fee_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "allowed_extra_profit", + "type": "uint256", + "indexed": false + }, + { + "name": "adjustment_step", + "type": "uint256", + "indexed": false + }, + { + "name": "ma_half_time", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "NewParameters", + "inputs": [ + { + "name": "admin_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "mid_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "out_fee", + "type": "uint256", + "indexed": false + }, + { + "name": "fee_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "allowed_extra_profit", + "type": "uint256", + "indexed": false + }, + { + "name": "adjustment_step", + "type": "uint256", + "indexed": false + }, + { + "name": "ma_half_time", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "RampAgamma", + "inputs": [ + { + "name": "initial_A", + "type": "uint256", + "indexed": false + }, + { + "name": "future_A", + "type": "uint256", + "indexed": false + }, + { + "name": "initial_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "future_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "initial_time", + "type": "uint256", + "indexed": false + }, + { + "name": "future_time", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "StopRampA", + "inputs": [ + { + "name": "current_A", + "type": "uint256", + "indexed": false + }, + { + "name": "current_gamma", + "type": "uint256", + "indexed": false + }, + { + "name": "time", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "ClaimAdminFee", + "inputs": [ + { + "name": "admin", + "type": "address", + "indexed": true + }, + { + "name": "tokens", + "type": "uint256", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "constructor", + "inputs": [ + { + "name": "_weth", + "type": "address" + } + ], + "outputs": [] + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange_underlying", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange_underlying", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "exchange_extended", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + }, + { + "name": "min_dy", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "sender", + "type": "address" + }, + { + "name": "receiver", + "type": "address" + }, + { + "name": "cb", + "type": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "add_liquidity", + "inputs": [ + { + "name": "amounts", + "type": "uint256[2]" + }, + { + "name": "min_mint_amount", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "add_liquidity", + "inputs": [ + { + "name": "amounts", + "type": "uint256[2]" + }, + { + "name": "min_mint_amount", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "payable", + "type": "function", + "name": "add_liquidity", + "inputs": [ + { + "name": "amounts", + "type": "uint256[2]" + }, + { + "name": "min_mint_amount", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity", + "inputs": [ + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "min_amounts", + "type": "uint256[2]" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity", + "inputs": [ + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "min_amounts", + "type": "uint256[2]" + }, + { + "name": "use_eth", + "type": "bool" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity", + "inputs": [ + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "min_amounts", + "type": "uint256[2]" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity_one_coin", + "inputs": [ + { + "name": "token_amount", + "type": "uint256" + }, + { + "name": "i", + "type": "uint256" + }, + { + "name": "min_amount", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity_one_coin", + "inputs": [ + { + "name": "token_amount", + "type": "uint256" + }, + { + "name": "i", + "type": "uint256" + }, + { + "name": "min_amount", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "remove_liquidity_one_coin", + "inputs": [ + { + "name": "token_amount", + "type": "uint256" + }, + { + "name": "i", + "type": "uint256" + }, + { + "name": "min_amount", + "type": "uint256" + }, + { + "name": "use_eth", + "type": "bool" + }, + { + "name": "receiver", + "type": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "claim_admin_fees", + "inputs": [], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "ramp_A_gamma", + "inputs": [ + { + "name": "future_A", + "type": "uint256" + }, + { + "name": "future_gamma", + "type": "uint256" + }, + { + "name": "future_time", + "type": "uint256" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "stop_ramp_A_gamma", + "inputs": [], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "commit_new_parameters", + "inputs": [ + { + "name": "_new_mid_fee", + "type": "uint256" + }, + { + "name": "_new_out_fee", + "type": "uint256" + }, + { + "name": "_new_admin_fee", + "type": "uint256" + }, + { + "name": "_new_fee_gamma", + "type": "uint256" + }, + { + "name": "_new_allowed_extra_profit", + "type": "uint256" + }, + { + "name": "_new_adjustment_step", + "type": "uint256" + }, + { + "name": "_new_ma_half_time", + "type": "uint256" + } + ], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "apply_new_parameters", + "inputs": [], + "outputs": [] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "revert_new_parameters", + "inputs": [], + "outputs": [] + }, + { + "stateMutability": "view", + "type": "function", + "name": "get_dy", + "inputs": [ + { + "name": "i", + "type": "uint256" + }, + { + "name": "j", + "type": "uint256" + }, + { + "name": "dx", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "calc_token_amount", + "inputs": [ + { + "name": "amounts", + "type": "uint256[2]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "calc_withdraw_one_coin", + "inputs": [ + { + "name": "token_amount", + "type": "uint256" + }, + { + "name": "i", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "lp_price", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "A", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "get_virtual_price", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "price_oracle", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "A", + "type": "uint256" + }, + { + "name": "gamma", + "type": "uint256" + }, + { + "name": "mid_fee", + "type": "uint256" + }, + { + "name": "out_fee", + "type": "uint256" + }, + { + "name": "allowed_extra_profit", + "type": "uint256" + }, + { + "name": "fee_gamma", + "type": "uint256" + }, + { + "name": "adjustment_step", + "type": "uint256" + }, + { + "name": "admin_fee", + "type": "uint256" + }, + { + "name": "ma_half_time", + "type": "uint256" + }, + { + "name": "initial_price", + "type": "uint256" + }, + { + "name": "_token", + "type": "address" + }, + { + "name": "_coins", + "type": "address[2]" + }, + { + "name": "_precisions", + "type": "uint256" + } + ], + "outputs": [] + }, + { + "stateMutability": "view", + "type": "function", + "name": "token", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "coins", + "inputs": [ + { + "name": "arg0", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "price_scale", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "last_prices", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "last_prices_timestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "initial_A_gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_A_gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "initial_A_gamma_time", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_A_gamma_time", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "allowed_extra_profit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_allowed_extra_profit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "fee_gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_fee_gamma", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "adjustment_step", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_adjustment_step", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "ma_half_time", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_ma_half_time", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "mid_fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "out_fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "admin_fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_mid_fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_out_fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "future_admin_fee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "balances", + "inputs": [ + { + "name": "arg0", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "D", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "factory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "xcp_profit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "xcp_profit_a", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "virtual_price", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + }, + { + "stateMutability": "view", + "type": "function", + "name": "admin_actions_deadline", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256" + } + ] + } +] diff --git a/constants/configs/configs.js b/constants/configs/configs.js index 8f89a6ff..b40f8d1e 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -534,7 +534,7 @@ const configs = { nativeCurrencyCoingeckoId: 'ethereum', platformCoingeckoId: 'base', nativeAssetErc20WrapperId: 'weth', // Used by crypto facto, since it handles wrapped native as native - rpcUrl: 'https://mainnet.base.org/', + rpcUrl: `https://lb.drpc.org/ogrpc?network=base&dkey=${process.env.DRPC_API_KEY}`, multicallAddress: '0xca11bde05977b3631167028862be2a173976ca11', multicall2Address: '0xca11bde05977b3631167028862be2a173976ca11', getFactoryRegistryAddress: async () => '0x3093f9B57A428F3EB6285a589cb35bEA6e78c336', @@ -556,7 +556,7 @@ const configs = { ]), BASE_POOL_LP_TO_GAUGE_LP_MAP: new Map([]), DISABLED_POOLS_ADDRESSES: [].map(lc), - approxBlocksPerDay: 4300, // Very approx from list of blocks on https://basescan.org/blocks + approxBlocksPerDay: 43000, // Very approx from list of blocks on https://basescan.org/blocks graphEndpoint: undefined, // Not supported by TheGraph's hosted service https://thegraph.com/docs/en/developing/supported-networks/ }, }; diff --git a/pages/api/getFactoryAPYs-base.js b/pages/api/getFactoryAPYs-base.js index 155c075e..484e1652 100644 --- a/pages/api/getFactoryAPYs-base.js +++ b/pages/api/getFactoryAPYs-base.js @@ -18,6 +18,7 @@ import registryAbi from 'constants/abis/factory_registry.json'; import multicallAbi from 'constants/abis/multicall.json'; import factorypool3Abi from 'constants/abis/factory_swap.json'; import factorypool3BaseTricryptoAbi from 'constants/abis/factory_tricrypto_swap.json'; +import factorypool3BaseCryptoAbi from 'constants/abis/factory_crypto_swap.json'; const web3 = new Web3(configs.base.rpcUrl); @@ -29,22 +30,22 @@ export default fn(async (query) => { let multicallAddress = config.multicallAddress; let registry = new web3.eth.Contract(registryAbi, registryAddress); let multicall = new web3.eth.Contract(multicallAbi, multicallAddress) - // let res = await getPoolsFn.straightCall({ blockchainId: 'base', registryId: 'factory' }) const poolData = await getAllCurvePoolsData(['base']); let poolDetails = []; let totalVolume = 0 const latest = await web3.eth.getBlockNumber() const DAY_BLOCKS_24H = config.approxBlocksPerDay; - let DAY_BLOCKS = 2000 + let DAY_BLOCKS = DAY_BLOCKS_24H await Promise.all( poolData.map(async (pool, index) => { let poolContract = new web3.eth.Contract(( - pool.registryId !== 'factory-tricrypto' ? - factorypool3Abi : - factorypool3BaseTricryptoAbi + pool.registryId === 'factory-tricrypto' ? factorypool3BaseTricryptoAbi : + pool.registryId === 'factory-crypto' ? factorypool3BaseCryptoAbi : + factorypool3Abi + ), pool.address) let vPriceOldFetch; @@ -76,7 +77,8 @@ export default fn(async (query) => { ); let volume = 0; - if (pool.registryId !== 'factory-tricrypto') { + if (pool.registryId !== 'factory-tricrypto' && pool.registryId !== 'factory-crypto') { + console.log('pool.registryId', pool.registryId) let events = await poolContract.getPastEvents(eventName, { filter: {}, // Using an array means OR: e.g. 20 or 23 fromBlock: latest - DAY_BLOCKS, @@ -104,7 +106,7 @@ export default fn(async (query) => { }) } - if (version == '2' && pool.registryId !== 'factory-tricrypto') { + if (version == '2' && pool.registryId !== 'factory-tricrypto' && pool.registryId !== 'factory-crypto') { let events2 = await poolContract.getPastEvents(eventName2, { filter: {}, // Using an array means OR: e.g. 20 or 23 fromBlock: latest - DAY_BLOCKS, @@ -142,6 +144,8 @@ export default fn(async (query) => { apy, 'virtualPrice': vPriceFetch, volume: correctedVolume, + 'pool.registryId': pool.registryId, + 'pool.id': pool.id, } poolDetails.push(p) }) From 518927e93361d1021c55dbe0aba0535ffad23605 Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 31 Aug 2023 18:39:00 +0200 Subject: [PATCH 64/83] Fix base vols --- pages/api/getFactoryAPYs-base.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/pages/api/getFactoryAPYs-base.js b/pages/api/getFactoryAPYs-base.js index 484e1652..3630dada 100644 --- a/pages/api/getFactoryAPYs-base.js +++ b/pages/api/getFactoryAPYs-base.js @@ -33,6 +33,7 @@ export default fn(async (query) => { const poolData = await getAllCurvePoolsData(['base']); let poolDetails = []; let totalVolume = 0 + let totalVolumeUsd = 0; const latest = await web3.eth.getBlockNumber() const DAY_BLOCKS_24H = config.approxBlocksPerDay; @@ -40,6 +41,7 @@ export default fn(async (query) => { await Promise.all( poolData.map(async (pool, index) => { + const lpTokenUsdPrice = pool.usdTotal / (pool.totalSupply / 1e18); let poolContract = new web3.eth.Contract(( pool.registryId === 'factory-tricrypto' ? factorypool3BaseTricryptoAbi : @@ -76,6 +78,7 @@ export default fn(async (query) => { pool.decimals ); let volume = 0; + let volumeUsd = 0; if (pool.registryId !== 'factory-tricrypto' && pool.registryId !== 'factory-crypto') { console.log('pool.registryId', pool.registryId) @@ -88,7 +91,8 @@ export default fn(async (query) => { events.map((trade) => { let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] - volume += t + volume += t; + volumeUsd += (t * pool.coins[Number(trade.returnValues['bought_id'])].usdPrice); }) } else { @@ -101,7 +105,8 @@ export default fn(async (query) => { events.map((trade) => { let t = trade.returnValues['tokens_bought'] / 10 ** decimals[trade.returnValues['bought_id']] - volume += t + volume += t; + volumeUsd += (t * pool.coins[Number(trade.returnValues['bought_id'])].usdPrice); }) } @@ -115,13 +120,15 @@ export default fn(async (query) => { events2.map((trade) => { let t = trade.returnValues[2] / 10 ** decimals[trade.returnValues[1]] - volume += t + volume += t; + volumeUsd += (t * pool.coins[Number(trade.returnValues[1])].usdPrice); }) } // Since we don't fetch blocks for the entirety of the past 24 hours, // we multiply the split volume accordingly const correctedVolume = volume * (DAY_BLOCKS_24H / DAY_BLOCKS); + const correctedVolumeUsd = volumeUsd * (DAY_BLOCKS_24H / DAY_BLOCKS); let vPriceFetch try { @@ -135,6 +142,7 @@ export default fn(async (query) => { let apy = (vPriceNew - vPrice) / vPrice * 100 * 365 let apyFormatted = `${apy.toFixed(2)}%` totalVolume += correctedVolume + totalVolumeUsd += correctedVolumeUsd let p = { index, @@ -143,7 +151,8 @@ export default fn(async (query) => { apyFormatted, apy, 'virtualPrice': vPriceFetch, - volume: correctedVolume, + volume: (correctedVolumeUsd / lpTokenUsdPrice) || 0, // lp volume + totalVolumeUsd: correctedVolumeUsd, 'pool.registryId': pool.registryId, 'pool.id': pool.id, } @@ -153,7 +162,7 @@ export default fn(async (query) => { poolDetails.sort((a, b) => (a.index > b.index) ? 1 : ((b.index > a.index) ? -1 : 0)) - return { poolDetails, totalVolume, latest }; + return { poolDetails, totalVolumeUsd, latest }; }, { maxAge: 30, // 30s From c9542333379005f7d9a2c799b72a1740fbaaedc9 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 6 Sep 2023 19:09:09 +0200 Subject: [PATCH 65/83] Calculate crypto pools apy properly on base --- pages/api/getFactoryAPYs-base.js | 131 ++++++++++++++++++++++++------- utils/Calls.js | 3 +- 2 files changed, 106 insertions(+), 28 deletions(-) diff --git a/pages/api/getFactoryAPYs-base.js b/pages/api/getFactoryAPYs-base.js index 3630dada..4a0f3973 100644 --- a/pages/api/getFactoryAPYs-base.js +++ b/pages/api/getFactoryAPYs-base.js @@ -19,8 +19,14 @@ import multicallAbi from 'constants/abis/multicall.json'; import factorypool3Abi from 'constants/abis/factory_swap.json'; import factorypool3BaseTricryptoAbi from 'constants/abis/factory_tricrypto_swap.json'; import factorypool3BaseCryptoAbi from 'constants/abis/factory_crypto_swap.json'; +import groupBy from 'lodash.groupby'; +import { multiCall } from 'utils/Calls'; const web3 = new Web3(configs.base.rpcUrl); +const networkSettings = { + web3, + multicall2Address: configs.base.multicall2Address, +}; export default fn(async (query) => { const config = configs.base; @@ -43,28 +49,110 @@ export default fn(async (query) => { poolData.map(async (pool, index) => { const lpTokenUsdPrice = pool.usdTotal / (pool.totalSupply / 1e18); - let poolContract = new web3.eth.Contract(( + const poolAbi = ( pool.registryId === 'factory-tricrypto' ? factorypool3BaseTricryptoAbi : pool.registryId === 'factory-crypto' ? factorypool3BaseCryptoAbi : factorypool3Abi + ); + let poolContract = new web3.eth.Contract(poolAbi, pool.address) + - ), pool.address) - let vPriceOldFetch; - let vPriceOldFetchFailed = false; - try { - vPriceOldFetch = await poolContract.methods.get_virtual_price().call('', latest - DAY_BLOCKS) - } catch (e) { - console.error(`Couldn't fetch get_virtual_price for block ${latest - DAY_BLOCKS}: ${e.toString()}`); - vPriceOldFetchFailed = true; - vPriceOldFetch = 1 * (10 ** 18) + const isCryptoPool = ( + pool.registryId === 'factory-tricrypto' || + pool.registryId === 'factory-crypto' + ); + + let apy; + let vPriceFetch; + + const oneDayOldBlockNumber = latest - DAY_BLOCKS; + if (isCryptoPool) { + const { + xcpProfit: [{ data: xcpProfitDayOld }], + xcpProfitA: [{ data: xcpProfitADayOld }], + } = groupBy(await multiCall([{ + address: pool.address, + abi: poolAbi, + methodName: 'xcp_profit', + metaData: { type: 'xcpProfit' }, + networkSettings: { + ...networkSettings, + blockNumber: oneDayOldBlockNumber, + }, + }, { + address: pool.address, + abi: poolAbi, + methodName: 'xcp_profit_a', + metaData: { type: 'xcpProfitA' }, + networkSettings: { + ...networkSettings, + blockNumber: oneDayOldBlockNumber, + }, + }]), 'metaData.type'); + + const { + xcpProfit: [{ data: xcpProfit }], + xcpProfitA: [{ data: xcpProfitA }], + virtualPrice: [{ data: virtualPrice }], + } = groupBy(await multiCall([{ + address: pool.address, + abi: poolAbi, + methodName: 'xcp_profit', + metaData: { type: 'xcpProfit' }, + networkSettings, + }, { + address: pool.address, + abi: poolAbi, + methodName: 'xcp_profit_a', + metaData: { type: 'xcpProfitA' }, + networkSettings, + }, { + address: pool.address, + abi: poolAbi, + methodName: 'get_virtual_price', + metaData: { type: 'virtualPrice' }, + networkSettings, + superSettings: { + fallbackValue: 1e18, + }, + }]), 'metaData.type'); + + const currentProfit = ((xcpProfit / 2) + (xcpProfitA / 2) + 1e18) / 2; + const dayOldProfit = ((xcpProfitDayOld / 2) + (xcpProfitADayOld / 2) + 1e18) / 2; + const rateDaily = (currentProfit - dayOldProfit) / dayOldProfit; + + const latestDailyApy = ((rateDaily + 1) ** 365 - 1) * 100; + apy = latestDailyApy; + + vPriceFetch = virtualPrice; + } else { + let vPriceOldFetch; + let vPriceOldFetchFailed = false; + try { + vPriceOldFetch = await poolContract.methods.get_virtual_price().call('', oneDayOldBlockNumber) + } catch (e) { + console.error(`Couldn't fetch get_virtual_price for block ${oneDayOldBlockNumber}: ${e.toString()}`); + vPriceOldFetchFailed = true; + vPriceOldFetch = 1 * (10 ** 18) + } + + try { + vPriceFetch = await poolContract.methods.get_virtual_price().call() + } catch (e) { + vPriceFetch = 1 * (10 ** 18) + } + + let vPrice = vPriceOldFetchFailed ? vPriceFetch : vPriceOldFetch + let vPriceNew = vPriceFetch + + apy = (vPriceNew - vPrice) / vPrice * 100 * 365 } - const testPool = pool.address + + const eventName = 'TokenExchangeUnderlying'; const eventName2 = 'TokenExchange'; - - console.log(latest - DAY_BLOCKS, latest, 'blocks') const isMetaPool = ( pool.implementation?.startsWith('v1metausd') || pool.implementation?.startsWith('metausd') || @@ -81,10 +169,9 @@ export default fn(async (query) => { let volumeUsd = 0; if (pool.registryId !== 'factory-tricrypto' && pool.registryId !== 'factory-crypto') { - console.log('pool.registryId', pool.registryId) let events = await poolContract.getPastEvents(eventName, { filter: {}, // Using an array means OR: e.g. 20 or 23 - fromBlock: latest - DAY_BLOCKS, + fromBlock: oneDayOldBlockNumber, toBlock: 'latest' }) @@ -98,7 +185,7 @@ export default fn(async (query) => { } else { let events = await poolContract.getPastEvents(eventName2, { filter: {}, // Using an array means OR: e.g. 20 or 23 - fromBlock: latest - DAY_BLOCKS, + fromBlock: oneDayOldBlockNumber, toBlock: 'latest' }) @@ -114,7 +201,7 @@ export default fn(async (query) => { if (version == '2' && pool.registryId !== 'factory-tricrypto' && pool.registryId !== 'factory-crypto') { let events2 = await poolContract.getPastEvents(eventName2, { filter: {}, // Using an array means OR: e.g. 20 or 23 - fromBlock: latest - DAY_BLOCKS, + fromBlock: oneDayOldBlockNumber, toBlock: 'latest' }) @@ -130,16 +217,6 @@ export default fn(async (query) => { const correctedVolume = volume * (DAY_BLOCKS_24H / DAY_BLOCKS); const correctedVolumeUsd = volumeUsd * (DAY_BLOCKS_24H / DAY_BLOCKS); - let vPriceFetch - try { - vPriceFetch = await poolContract.methods.get_virtual_price().call() - } catch (e) { - vPriceFetch = 1 * (10 ** 18) - } - - let vPrice = vPriceOldFetchFailed ? vPriceFetch : vPriceOldFetch - let vPriceNew = vPriceFetch - let apy = (vPriceNew - vPrice) / vPrice * 100 * 365 let apyFormatted = `${apy.toFixed(2)}%` totalVolume += correctedVolume totalVolumeUsd += correctedVolumeUsd diff --git a/utils/Calls.js b/utils/Calls.js index 916a8897..fe51aa2c 100644 --- a/utils/Calls.js +++ b/utils/Calls.js @@ -49,6 +49,7 @@ const multiCall = async (callsConfig, isDebugging = false) => { networkSettings: { web3, multicall2Address: configs.ethereum.multicall2Address, + blockNumber: undefined, }, superSettings: { returnSuccessState: false, // If true, will return true if call succeeds, false if it reverts @@ -132,7 +133,7 @@ const multiCall = async (callsConfig, isDebugging = false) => { try { const chunkedReturnData = await sequentialPromiseMap(chunkedCalls, async (callsChunk) => ( Promise.all(callsChunk.map(async (chunk) => { - const aggregateReturnData = await multicall.methods.tryAggregate(false, chunk).call(); + const aggregateReturnData = await multicall.methods.tryAggregate(false, chunk).call(undefined, networkSettings.blockNumber); const returnData = aggregateReturnData.map(({ success, returnData: hexData }) => ({ success, hexData })); return returnData; })) From 2ed2f342e33c306c1f2006c6b7f1e3121d22b29d Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 7 Sep 2023 18:12:37 +0200 Subject: [PATCH 66/83] Fix crypto pools apy calc for new pools on base --- pages/api/getFactoryAPYs-base.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pages/api/getFactoryAPYs-base.js b/pages/api/getFactoryAPYs-base.js index 4a0f3973..8bad4a15 100644 --- a/pages/api/getFactoryAPYs-base.js +++ b/pages/api/getFactoryAPYs-base.js @@ -80,6 +80,9 @@ export default fn(async (query) => { ...networkSettings, blockNumber: oneDayOldBlockNumber, }, + superSettings: { + fallbackValue: 1e18, + }, }, { address: pool.address, abi: poolAbi, @@ -89,6 +92,9 @@ export default fn(async (query) => { ...networkSettings, blockNumber: oneDayOldBlockNumber, }, + superSettings: { + fallbackValue: 1e18, + }, }]), 'metaData.type'); const { @@ -101,12 +107,18 @@ export default fn(async (query) => { methodName: 'xcp_profit', metaData: { type: 'xcpProfit' }, networkSettings, + superSettings: { + fallbackValue: 1e18, + }, }, { address: pool.address, abi: poolAbi, methodName: 'xcp_profit_a', metaData: { type: 'xcpProfitA' }, networkSettings, + superSettings: { + fallbackValue: 1e18, + }, }, { address: pool.address, abi: poolAbi, From 4e4e752bc12f233e4e038f370fa946b3c6322b00 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 13 Sep 2023 11:37:22 +0200 Subject: [PATCH 67/83] Bump @curvefi/stablecoin-api --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index ffc47c89..cf18fa04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "curve-api", "version": "0.1.0", "dependencies": { - "@curvefi/stablecoin-api": "^1.3.4", + "@curvefi/stablecoin-api": "^1.3.7", "axios": "^0.21.2", "big-number": "^2.0.0", "bignumber.js": "^9.0.1", @@ -587,9 +587,9 @@ } }, "node_modules/@curvefi/stablecoin-api": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@curvefi/stablecoin-api/-/stablecoin-api-1.3.4.tgz", - "integrity": "sha512-qdi2yO0PIKPs1QCRI1mi1KwoQ/8xlkf+6LHs80xkmQI9dxINojxbDrqJFFbqIuddOqHU4zBbVZkIDE3XFYDVMQ==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@curvefi/stablecoin-api/-/stablecoin-api-1.3.7.tgz", + "integrity": "sha512-AmJwwHXmWuZYsnkmF2d/dnTEorm1VZp693eNRS7aubTKE6gCk71qXY3c2Hz4a60hRtHadGprbLpsxxsDVlxgOA==", "dependencies": { "@ethersproject/networks": "^5.5.0", "axios": "^0.21.1", @@ -7998,9 +7998,9 @@ } }, "@curvefi/stablecoin-api": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@curvefi/stablecoin-api/-/stablecoin-api-1.3.4.tgz", - "integrity": "sha512-qdi2yO0PIKPs1QCRI1mi1KwoQ/8xlkf+6LHs80xkmQI9dxINojxbDrqJFFbqIuddOqHU4zBbVZkIDE3XFYDVMQ==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@curvefi/stablecoin-api/-/stablecoin-api-1.3.7.tgz", + "integrity": "sha512-AmJwwHXmWuZYsnkmF2d/dnTEorm1VZp693eNRS7aubTKE6gCk71qXY3c2Hz4a60hRtHadGprbLpsxxsDVlxgOA==", "requires": { "@ethersproject/networks": "^5.5.0", "axios": "^0.21.1", diff --git a/package.json b/package.json index 406eedd7..2b992060 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "start": "next start" }, "dependencies": { - "@curvefi/stablecoin-api": "^1.3.4", + "@curvefi/stablecoin-api": "^1.3.7", "axios": "^0.21.2", "big-number": "^2.0.0", "bignumber.js": "^9.0.1", From 5a4318dcc419aa8f910a5a231e0de76e46f52a1e Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 14 Sep 2023 11:46:56 +0200 Subject: [PATCH 68/83] Fix decimal accounting for sidechain extra rewards --- utils/data/getFactoryV2SidechainGaugeRewards.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/data/getFactoryV2SidechainGaugeRewards.js b/utils/data/getFactoryV2SidechainGaugeRewards.js index fead9d37..d5b4b413 100644 --- a/utils/data/getFactoryV2SidechainGaugeRewards.js +++ b/utils/data/getFactoryV2SidechainGaugeRewards.js @@ -160,12 +160,12 @@ export default memoize(async ({ blockchainId, gauges }) => { apyData: { isRewardStillActive, tokenPrice, - rate: effectiveRate / 1e18, + rate: effectiveRate / (10 ** tokenDecimals), totalSupply, }, apy: ( isRewardStillActive ? - (effectiveRate) / 1e18 * 86400 * 365 * tokenPrice / totalSupply / lpTokenPrice * 100 : + (effectiveRate) / (10 ** tokenDecimals) * 86400 * 365 * tokenPrice / totalSupply / lpTokenPrice * 100 : 0 ), metaData: { From a6e5f48a5ae9b11a94db2cf4fa283b46da70a2c5 Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 22 Sep 2023 01:06:06 +0200 Subject: [PATCH 69/83] Update vercel config --- now.json | 50 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/now.json b/now.json index a77fe3ca..89bfbe7a 100644 --- a/now.json +++ b/now.json @@ -11,28 +11,50 @@ "headers": [ { "source": "/(.*)", - "headers" : [ + "headers": [ { - "key" : "Vary", - "value" : "Accept-Encoding" + "key": "Vary", + "value": "Accept-Encoding" }, { - "key" : "X-Content-Type-Options", - "value" : "nosniff" + "key": "X-Content-Type-Options", + "value": "nosniff" }, { - "key" : "X-Frame-Options", - "value" : "DENY" + "key": "X-Frame-Options", + "value": "DENY" }, { - "key" : "X-XSS-Protection", - "value" : "1; mode=block" + "key": "X-XSS-Protection", + "value": "1; mode=block" }, - { "key": "Access-Control-Allow-Credentials", "value": "true" }, - { "key": "Access-Control-Allow-Origin", "value": "*" }, - { "key": "Access-Control-Allow-Methods", "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" }, - { "key": "Access-Control-Allow-Headers", "value": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version" } + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version" + } ] } - ] + ], + "functions": { + "api/**/*.js": { + "memory": 3008, + "maxDuration": 900 + }, + "pages/api/**/*.js": { + "memory": 3008, + "maxDuration": 900 + } + } } From 36126f95dd046d9ed8212573b9afb1b3436d8149 Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 22 Sep 2023 01:07:30 +0200 Subject: [PATCH 70/83] Update vercel config --- now.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/now.json b/now.json index 89bfbe7a..f2dbb2ce 100644 --- a/now.json +++ b/now.json @@ -48,10 +48,6 @@ } ], "functions": { - "api/**/*.js": { - "memory": 3008, - "maxDuration": 900 - }, "pages/api/**/*.js": { "memory": 3008, "maxDuration": 900 From ea1bee83dcd9a4f183c70739ae88b57ff846b177 Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 22 Sep 2023 11:48:29 +0200 Subject: [PATCH 71/83] Fix sTBT price --- pages/api/getPools/index.js | 1 + pages/api/getSubgraphData/index.js | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index f5dcd58c..0bb0ea8d 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -81,6 +81,7 @@ const EXTERNAL_ORACLE_COINS_ADDRESSES = { '0x0f83287ff768d1c1e17a42f44d644d7f22e8ee1d', // sCHF (no curve crypto pool to act as oracle) '0xc2544a32872a91f4a553b404c6950e89de901fdb', // FPIS (no liquid curve crypto pool to act as oracle) '0xa0d69e286b938e21cbf7e51d71f6a4c8918f482f', // eUSD (no curve crypto pool to act as oracle) + '0x530824da86689c9c17cdc2871ff29b058345b44a', // sTBT (curve crypto pool that has precedence has low liq) ].map(lc), }; diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index a27209dc..9c7ef75d 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -42,15 +42,17 @@ export default fn(async ({ blockchainId }) => { return getFallbackData(fallbackDataFileName); } + const config = configs[blockchainId]; + const GRAPH_ENDPOINT = config.graphEndpoint; + if (!GRAPH_ENDPOINT) throw new Error('No subgraph endpoint'); + try { - const config = configs[blockchainId]; const web3 = new Web3(config.rpcUrl); if (typeof config === 'undefined') { throw new Error(`No factory data for blockchainId "${blockchainId}"`); } - const GRAPH_ENDPOINT = config.graphEndpoint; const CURRENT_TIMESTAMP = Math.round(new Date().getTime() / 1000); const TIMESTAMP_24H_AGO = CURRENT_TIMESTAMP - (25 * 3600); From b7468c9490242f60bb9ab00dd2fcc08b6d6b977c Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 22 Sep 2023 16:29:30 +0200 Subject: [PATCH 72/83] Fix typo & update zaps Closes #315 --- constants/configs/configs.js | 2 + constants/pools-zaps/avalanche.json | 21 +++--- constants/pools-zaps/ethereum.json | 100 ++++++++++++++-------------- constants/pools-zaps/xdai.json | 21 +++--- pages/api/getPools/index.js | 4 +- 5 files changed, 78 insertions(+), 70 deletions(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index b40f8d1e..fbfa02f2 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -44,6 +44,8 @@ const configs = { ['0xAbc533EbCDdeD41215C46ee078C5818B5b0A252F'.toLowerCase(), 'metabtcbalances-sbtc2'], ['0x33bB0e62d5e8C688E645Dd46DFb48Cd613250067'.toLowerCase(), 'metausd-fraxusdc'], ['0x2EB24483Ef551dA247ab87Cf18e1Cc980073032D'.toLowerCase(), 'metausdbalances-fraxusdc'], + ['0xF9B62b61d108232Ef0C9DD143bb3c22c7D4A715a'.toLowerCase(), 'metausd-fraxusdp'], + ['0xB172AC2Fe440B5dA74Dc460e5E9d96bc2BF6261F'.toLowerCase(), 'metausdbalances-fraxusdp'], ['0x5F890841f657d90E081bAbdB532A05996Af79Fe6'.toLowerCase(), 'v1metausd'], ['0x2f956eee002b0debd468cf2e0490d1aec65e027f'.toLowerCase(), 'v1metabtc'], ['0x66442B0C5260B92cAa9c234ECf2408CBf6b19a6f'.toLowerCase(), 'tricrypto-1'], diff --git a/constants/pools-zaps/avalanche.json b/constants/pools-zaps/avalanche.json index 25475532..dde40452 100644 --- a/constants/pools-zaps/avalanche.json +++ b/constants/pools-zaps/avalanche.json @@ -1,10 +1,13 @@ { - "implementations": { - "v1metausd": "0x001e3ba199b4ff4b5b6e97acd96dafc0e2e4156e", - "metausd": "0x001e3ba199b4ff4b5b6e97acd96dafc0e2e4156e", - "metausdbalances": "0x001e3ba199b4ff4b5b6e97acd96dafc0e2e4156e" - }, - "pools": { - "0xb755b949c126c04e0348dd881a5cf55d424742b2": "0x58e57ca18b7a47112b877e31929798cd3d703b0f" - } -} \ No newline at end of file + "implementations": { + "v1metausd": "0x001e3ba199b4ff4b5b6e97acd96dafc0e2e4156e", + "metausd": "0x001e3ba199b4ff4b5b6e97acd96dafc0e2e4156e", + "metausdbalances": "0x001e3ba199b4ff4b5b6e97acd96dafc0e2e4156e", + "metabtc": "0xEeB3DDBcc4174e0b3fd1C13aD462b95D11Ef42C3", + "metabtcbalances": "0xEeB3DDBcc4174e0b3fd1C13aD462b95D11Ef42C3" + }, + "pools": { + "0xb755b949c126c04e0348dd881a5cf55d424742b2": "0x58e57ca18b7a47112b877e31929798cd3d703b0f", + "0x204f0620e7e7f07b780535711884835977679bba": "0x9f2Fa7709B30c75047980a0d70A106728f0Ef2db" + } +} diff --git a/constants/pools-zaps/ethereum.json b/constants/pools-zaps/ethereum.json index 8980ed87..8c914d6c 100644 --- a/constants/pools-zaps/ethereum.json +++ b/constants/pools-zaps/ethereum.json @@ -1,50 +1,52 @@ { - "implementations": { - "v1metausd": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "metausd": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "metausdbalances": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "metausd-fraxusdc": "0x08780fb7e580e492c1935bee4fa5920b94aa95da", - "metausdbalances-fraxusdc": "0x08780fb7e580e492c1935bee4fa5920b94aa95da", - "v1metabtc": "0x7abdbaf29929e7f8621b757d2a7c04d78d633834", - "metabtc": "0x7abdbaf29929e7f8621b757d2a7c04d78d633834", - "metabtcbalances": "0x7abdbaf29929e7f8621b757d2a7c04d78d633834", - "metabtc-sbtc2": "0xa2d40edbf76c6c0701ba8899e2d059798eba628e", - "metabtcbalances-sbtc2": "0xa2d40edbf76c6c0701ba8899e2d059798eba628e", - "metacrypto": "0x5de4ef4879f4fe3bbadf2227d2ac5d0e2d76c895", - "metacrypto-3pool": "0x97adc08fa1d849d2c48c5dcc1dab568b169b0267" - }, - "pools": { - "0xa2b47e3d5c44877cca798226b7b8118f9bfb7a56": "0xeb21209ae4c2c9ff2a86aca31e123764a3b6bc06", - "0x52ea46506b9cc5ef470c5bf89f17dc28bb35d85c": "0xac795d2c97e60df6a99ff1c814727302fd747a80", - "0x06364f10b501e868329afbc005b3492902d6c763": "0xa50ccc70b6a011cffddf45057e39679379187287", - "0x45f783cce6b7ff23b2ab2d70e416cdb7d6055f51": "0xbbc81d23ea2c3ec7e56d39296f0cbb648873a5d3", - "0x79a8c46dea5ada233abaffd40f3a0a2b1e5a4f27": "0xb6c057591e073249f2d9d88ba59a46cfc9b59edb", - "0xa5407eae9ba41422680e2e00537571bcc53efbfd": "0xfcba3e75865d2d561be8d220616520c171f12851", - "0x4f062658eaaf2c1ccf8c8e36d6824cdf41167956": "0x64448b78561690b70e17cbe8029a3e5c1bb7136e", - "0x3ef6a01a0f81d6046290f3e2a8c5b843e738e604": "0x09672362833d8f703d5395ef3252d4bfa51c15ca", - "0x3e01dd8a5e1fb3481f0f589056b428fc308af0fb": "0xf1f85a74ad6c64315f85af52d3d46bf715236adc", - "0x0f9cb53ebe405d49a0bbdbd291a65ff571bc83e1": "0x094d12e5b541784701fd8d65f11fc0598fbc6332", - "0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171": "0x1de7f0866e2c4adac7b457c58cc25c8688cda1f2", - "0x8474ddbe98f5aa3179b3b3f5942d724afcdec9f6": "0x803a2b40c5a9bb2b86dd630b274fa2a9202874c2", - "0xc18cc39da8b11da8c3541c598ee022258f9744da": "0xbe175115bf33e12348ff77ccfee4726866a0fbd5", - "0xc25099792e9349c7dd09759744ea681c7de2cb66": "0xaa82ca713d94bba7a89ceab55314f9effeddc78c", - "0x8038c01a0390a8c547446a0b2c18fc9aefecc10c": "0x61e10659fe3aa93d036d099405224e4ac24996d0", - "0x7f55dde206dbad629c080068923b36fe9d6bdbef": "0x11f419adabbff8d595e7d5b223eee3863bb3902c", - "0x071c661b4deefb59e2a3ddb20db036821eee8f4b": "0xc45b2eee6e09ca176ca3bb5f7eee7c47bf93c756", - "0xd81da8d904b52208541bade1bd6595d8a251f8dd": "0xd5bcf53e2c81e1991570f33fa881c49eea570c8d", - "0x890f4e345b1daed0367a877a1612f86a1f86985f": "0xb0a0716841f2fc03fba72a891b8bb13584f52f2d", - "0x42d7025938bec20b69cbae5a77421082407f053a": "0x3c8caee4e09296800f8d29a68fa3837e2dae4940", - "0xecd5e75afb02efa118af914515d6521aabd189f1": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "0xd632f22692fac7611d2aa1c0d552930d43caed3b": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "0xed279fdd11ca84beef15af5d39bb4d4bee23f0ca": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "0x4807862aa8b2bf68830e4c8dc86d0e9a998e085a": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "0x43b4fdfd4ff969587185cdb6f0bd875c5fc83f8c": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "0x80466c64868e1ab14a1ddf27a676c3fcbe638fe5": "0x331af2e331bd619defaa5dac6c038f53fcf9f785", - "0x5a6a4d54456819380173272a5e8e9b9904bdf41b": "0xa79828df1850e8a3a3064576f380d90aecdd3359", - "0xd51a44d3fae010294c616388b506acda1bfaae46": "0x3993d34e7e99abf6b6f367309975d1360222d446", - "0x9838eccc42659fa8aa7daf2ad134b53984c9427b": "0x5d0f47b32fdd343bfa74ce221808e2abe4a53827", - "0x618788357d0ebd8a37e763adab3bc575d54c2c7d": "0xcb636b81743bb8a7f1e355debb7d33b07009cccc", - "0xadcfcf9894335dc340f6cd182afa45999f45fc44": "0xc5fa220347375ac4f91f9e4a4aab362f22801504", - "0xe84f5b1582ba325fdf9ce6b0c1f087ccfc924e54": "0xd446a98f88e1d053d1f64986e3ed083bb1ab7e5a" - } -} \ No newline at end of file + "implementations": { + "v1metausd": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "metausd": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "metausdbalances": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "metausd-fraxusdc": "0x08780fb7e580e492c1935bee4fa5920b94aa95da", + "metausdbalances-fraxusdc": "0x08780fb7e580e492c1935bee4fa5920b94aa95da", + "metausd-fraxusdp": "0x63B709d2118Ba0389ee75A131d1F9a473e06afbD", + "metausdbalances-fraxusdp": "0x63B709d2118Ba0389ee75A131d1F9a473e06afbD", + "v1metabtc": "0x7abdbaf29929e7f8621b757d2a7c04d78d633834", + "metabtc": "0x7abdbaf29929e7f8621b757d2a7c04d78d633834", + "metabtcbalances": "0x7abdbaf29929e7f8621b757d2a7c04d78d633834", + "metabtc-sbtc2": "0xa2d40edbf76c6c0701ba8899e2d059798eba628e", + "metabtcbalances-sbtc2": "0xa2d40edbf76c6c0701ba8899e2d059798eba628e", + "metacrypto": "0x5de4ef4879f4fe3bbadf2227d2ac5d0e2d76c895", + "metacrypto-3pool": "0x97adc08fa1d849d2c48c5dcc1dab568b169b0267" + }, + "pools": { + "0xa2b47e3d5c44877cca798226b7b8118f9bfb7a56": "0xeb21209ae4c2c9ff2a86aca31e123764a3b6bc06", + "0x52ea46506b9cc5ef470c5bf89f17dc28bb35d85c": "0xac795d2c97e60df6a99ff1c814727302fd747a80", + "0x06364f10b501e868329afbc005b3492902d6c763": "0xa50ccc70b6a011cffddf45057e39679379187287", + "0x45f783cce6b7ff23b2ab2d70e416cdb7d6055f51": "0xbbc81d23ea2c3ec7e56d39296f0cbb648873a5d3", + "0x79a8c46dea5ada233abaffd40f3a0a2b1e5a4f27": "0xb6c057591e073249f2d9d88ba59a46cfc9b59edb", + "0xa5407eae9ba41422680e2e00537571bcc53efbfd": "0xfcba3e75865d2d561be8d220616520c171f12851", + "0x4f062658eaaf2c1ccf8c8e36d6824cdf41167956": "0x64448b78561690b70e17cbe8029a3e5c1bb7136e", + "0x3ef6a01a0f81d6046290f3e2a8c5b843e738e604": "0x09672362833d8f703d5395ef3252d4bfa51c15ca", + "0x3e01dd8a5e1fb3481f0f589056b428fc308af0fb": "0xf1f85a74ad6c64315f85af52d3d46bf715236adc", + "0x0f9cb53ebe405d49a0bbdbd291a65ff571bc83e1": "0x094d12e5b541784701fd8d65f11fc0598fbc6332", + "0xe7a24ef0c5e95ffb0f6684b813a78f2a3ad7d171": "0x1de7f0866e2c4adac7b457c58cc25c8688cda1f2", + "0x8474ddbe98f5aa3179b3b3f5942d724afcdec9f6": "0x803a2b40c5a9bb2b86dd630b274fa2a9202874c2", + "0xc18cc39da8b11da8c3541c598ee022258f9744da": "0xbe175115bf33e12348ff77ccfee4726866a0fbd5", + "0xc25099792e9349c7dd09759744ea681c7de2cb66": "0xaa82ca713d94bba7a89ceab55314f9effeddc78c", + "0x8038c01a0390a8c547446a0b2c18fc9aefecc10c": "0x61e10659fe3aa93d036d099405224e4ac24996d0", + "0x7f55dde206dbad629c080068923b36fe9d6bdbef": "0x11f419adabbff8d595e7d5b223eee3863bb3902c", + "0x071c661b4deefb59e2a3ddb20db036821eee8f4b": "0xc45b2eee6e09ca176ca3bb5f7eee7c47bf93c756", + "0xd81da8d904b52208541bade1bd6595d8a251f8dd": "0xd5bcf53e2c81e1991570f33fa881c49eea570c8d", + "0x890f4e345b1daed0367a877a1612f86a1f86985f": "0xb0a0716841f2fc03fba72a891b8bb13584f52f2d", + "0x42d7025938bec20b69cbae5a77421082407f053a": "0x3c8caee4e09296800f8d29a68fa3837e2dae4940", + "0xecd5e75afb02efa118af914515d6521aabd189f1": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "0xd632f22692fac7611d2aa1c0d552930d43caed3b": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "0xed279fdd11ca84beef15af5d39bb4d4bee23f0ca": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "0x4807862aa8b2bf68830e4c8dc86d0e9a998e085a": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "0x43b4fdfd4ff969587185cdb6f0bd875c5fc83f8c": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "0x80466c64868e1ab14a1ddf27a676c3fcbe638fe5": "0x331af2e331bd619defaa5dac6c038f53fcf9f785", + "0x5a6a4d54456819380173272a5e8e9b9904bdf41b": "0xa79828df1850e8a3a3064576f380d90aecdd3359", + "0xd51a44d3fae010294c616388b506acda1bfaae46": "0x3993d34e7e99abf6b6f367309975d1360222d446", + "0x9838eccc42659fa8aa7daf2ad134b53984c9427b": "0x5d0f47b32fdd343bfa74ce221808e2abe4a53827", + "0x618788357d0ebd8a37e763adab3bc575d54c2c7d": "0xcb636b81743bb8a7f1e355debb7d33b07009cccc", + "0xadcfcf9894335dc340f6cd182afa45999f45fc44": "0xc5fa220347375ac4f91f9e4a4aab362f22801504", + "0xe84f5b1582ba325fdf9ce6b0c1f087ccfc924e54": "0xd446a98f88e1d053d1f64986e3ed083bb1ab7e5a" + } +} diff --git a/constants/pools-zaps/xdai.json b/constants/pools-zaps/xdai.json index 13c0979c..f28bb5f1 100644 --- a/constants/pools-zaps/xdai.json +++ b/constants/pools-zaps/xdai.json @@ -1,11 +1,12 @@ { - "implementations": { - "v1metausd": "0x87c067fac25f123554a0e76596bf28cfa37fd5e9", - "metausd": "0x87c067fac25f123554a0e76596bf28cfa37fd5e9", - "metausdbalances": "0x87c067fac25f123554a0e76596bf28cfa37fd5e9" - }, - "pools": { - "0x85ba9dfb4a3e4541420fc75be02e2b42042d7e46": "0xdf6eb52c4a9d7d5964b918c50d47a643fd7d3d4c", - "0x056c6c5e684cec248635ed86033378cc444459b0": "0xe3fff29d4dc930ebb787fecd49ee5963dadf60b6" - } -} \ No newline at end of file + "implementations": { + "v1metausd": "0x87c067fac25f123554a0e76596bf28cfa37fd5e9", + "metausd": "0x87c067fac25f123554a0e76596bf28cfa37fd5e9", + "metausdbalances": "0x87c067fac25f123554a0e76596bf28cfa37fd5e9" + }, + "pools": { + "0x85ba9dfb4a3e4541420fc75be02e2b42042d7e46": "0xdf6eb52c4a9d7d5964b918c50d47a643fd7d3d4c", + "0x5633e00994896d0f472926050ecb32e38bef3e65": "0xF182926A64C0A19234E7E1FCDfE772aA7A1CA351", + "0x056c6c5e684cec248635ed86033378cc444459b0": "0xe3fff29d4dc930ebb787fecd49ee5963dadf60b6" + } +} diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 0bb0ea8d..4f42521c 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -1040,7 +1040,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) ) : undefined ); - // How much does that pool owns, in its balances, of the underlying pool + // How much does that pool own, in its balances, of the underlying pool const underlyingPoolLpOwnershipRate = ( isMetaPool ? ( (metaPoolBasePoolLpToken.poolBalance / 1e18) / (underlyingPool.totalSupply / 1e18) @@ -1150,7 +1150,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) poolUrls: detailedPoolUrls, implementation, zapAddress: ( - POOLS_ZAPS?.[blockchainId]?.pools?.[lc(poolInfo.addresss)] || + POOLS_ZAPS?.[blockchainId]?.pools?.[lc(poolInfo.address)] || POOLS_ZAPS?.[blockchainId]?.implementations?.[implementation] || undefined ), From 8262efaa38df35379d387f6eaa7f87294f91a618 Mon Sep 17 00:00:00 2001 From: Philippe Date: Fri, 29 Sep 2023 15:08:28 +0200 Subject: [PATCH 73/83] Add some incorrect-volume pools to the list Until more reliable usd volume source is ready --- pages/api/getSubgraphData/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index 9c7ef75d..8ea47166 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -19,6 +19,9 @@ const POOLS_WITH_INCORRECT_SUBGRAPH_USD_VOLUME = { '0x2863a328a0b7fc6040f11614fa0728587db8e353', '0xb7ecb2aa52aa64a717180e030241bc75cd946726', '0xf95aaa7ebb1620e46221b73588502960ef63dba0', + '0xc15f285679a1ef2d25f53d4cbd0265e1d02f2a92', + '0x1062fd8ed633c1f080754c19317cb3912810b5e5', + '0x28ca243dc0ac075dd012fcf9375c25d18a844d96', ].map(lc), polygon: [ '0x7c1aa4989df27970381196d3ef32a7410e3f2748', From 21b6b5586aba9e9c9e69eccfe9993952d4352341 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 4 Oct 2023 19:17:22 +0200 Subject: [PATCH 74/83] Add past extra rewards to non-facto gauges --- pages/api/getMainPoolsGaugeRewards.js | 63 ++++++++++++++++++++++---- utils/data/getFactoryV2GaugeRewards.js | 2 +- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/pages/api/getMainPoolsGaugeRewards.js b/pages/api/getMainPoolsGaugeRewards.js index af7eabee..909df86e 100644 --- a/pages/api/getMainPoolsGaugeRewards.js +++ b/pages/api/getMainPoolsGaugeRewards.js @@ -66,7 +66,7 @@ export default fn(async (gauges) => { if (typeof gauges === 'undefined') { throw new Error('gauges is undefined in getMainPoolsGaugeRewards()'); } - // const gauges = (await (await Request.get('https://api.curve.fi/api/getAllGauges')).json()).data; + // gauges = (await (await Request.get('https://api.curve.fi/api/getAllGauges')).json()).data; //empty gauges cause reverts const remove = [ @@ -124,7 +124,7 @@ export default fn(async (gauges) => { abi: GAUGES_PARTIAL_ABI, methodName: 'reward_tokens', params: [rewardIndex], - metaData: { address, type: 'rewardToken' }, + metaData: { address, type: 'rewardToken', rewardIndex }, })) )]) )); @@ -153,10 +153,10 @@ export default fn(async (gauges) => { rewardContract: rewardContract === ZERO_ADDRESS ? null : rewardContract, totalSupply: gaugesData.find(({ metaData }) => metaData.address === address && metaData.type === 'totalSupply').data / 1e18, rewardTokens: ( - version !== 'v-rewarddata' ? - // Onward staking for non-factory gauges means there's only ever one active reward token at a time - rewardTokens.length === 0 ? null : rewardTokens.slice(-1) : - rewardTokens + version === 'v-rewarddata' ? rewardTokens : + rewardTokens.length === 0 ? null : + version === 'v1' ? rewardTokens.slice(-1) : // Onward staking for non-factory gauges means there's only ever one active reward token at a time + rewardTokens ), }; }); @@ -198,7 +198,7 @@ export default fn(async (gauges) => { const rewardContractVersion = V2_GAUGES_USING_V1_REWARD_CONTRACT.includes(address) ? 'v1' : version; return ( - rewardContractVersion === 'v-rewarddata' ? + rewardContractVersion === 'v-rewarddata' ? ( flattenArray(rewardTokens.map((rewardToken) => [{ address: rewardContract, abi: REWARDS_CONFIG[rewardContractVersion].rewardContractAbi, @@ -220,7 +220,8 @@ export default fn(async (gauges) => { abi: ERC20_ABI, methodName: 'decimals', metaData: { address, rewardContract, rewardToken, type: 'decimals', metaType: 'token' }, - }])) : + }])) + ) : rewardContractVersion === 'v1' ? ( [{ address: rewardContract, abi: REWARDS_CONFIG[rewardContractVersion].rewardContractAbi, @@ -252,6 +253,43 @@ export default fn(async (gauges) => { methodName: 'decimals', metaData: { address, rewardContract, rewardToken: rewardTokens[0], type: 'decimals', metaType: 'token' }, }] + ) : ( + flattenArray(rewardTokens.map((rewardToken, i) => { + const isLatestRewardToken = (i === (rewardTokens.length - 1)); + + return [{ + address: rewardContract, + abi: REWARDS_CONFIG[rewardContractVersion].rewardContractAbi, + methodName: rewardContractVersion !== 'v1' ? 'rewardsDuration' : 'DURATION', + metaData: { address, rewardContract, rewardToken: rewardToken, type: 'duration', metaType: 'reward', isLatestRewardToken }, + }, { + address: rewardContract, + abi: REWARDS_CONFIG[rewardContractVersion].rewardContractAbi, + methodName: 'rewardRate', + metaData: { address, rewardContract, rewardToken: rewardToken, type: 'rewardRate', metaType: 'reward', isLatestRewardToken }, + }, { + address: rewardContract, + abi: REWARDS_CONFIG[rewardContractVersion].rewardContractAbi, + methodName: 'periodFinish', + metaData: { address, rewardContract, rewardToken: rewardToken, type: 'periodFinish', metaType: 'reward', isLatestRewardToken }, + }, { + address: rewardToken, + abi: ERC20_ABI, + methodName: 'name', + metaData: { address, rewardContract, rewardToken: rewardToken, type: 'name', metaType: 'token', isLatestRewardToken }, + }, { + address: rewardToken, + abi: ERC20_ABI, + methodName: 'symbol', + metaData: { address, rewardContract, rewardToken: rewardToken, type: 'symbol', metaType: 'token', isLatestRewardToken }, + }, { + address: rewardToken, + abi: ERC20_ABI, + methodName: 'decimals', + metaData: { address, rewardContract, rewardToken: rewardToken, type: 'decimals', metaType: 'token', isLatestRewardToken }, + }] + })) + ) ); }) )); @@ -265,7 +303,7 @@ export default fn(async (gauges) => { const nowTimestamp = getNowTimestamp(); const rewardsInfo = Array.from(Object.values(rewardDataPerRewardContractAndToken)).map((rewardDataForContractToken) => { - const { metaData: { address, rewardToken } } = rewardDataForContractToken[0]; + const { metaData: { address, rewardToken, isLatestRewardToken } } = rewardDataForContractToken[0]; const usesRewardData = rewardDataForContractToken.length === 1; let rate; @@ -291,6 +329,13 @@ export default fn(async (gauges) => { rewardPeriodFinish = periodFinish; } + // isLatestRewardToken is either true, false or undefined if this doesn't matter for the tokens at hand + // When it's not undefined, only the last reward token can be active, + // so we force periodFinish to 0 to mark any tokens except for the last as inactive. + if (isLatestRewardToken === false) { + rewardPeriodFinish = 0; + } + const { totalSupply } = gaugesRewardData.find((gaugeRewardData) => gaugeRewardData.address === address); const tokenName = tokenData.find(({ metaData }) => metaData.rewardToken === rewardToken && metaData.type === 'name').data; const tokenSymbol = tokenData.find(({ metaData }) => metaData.rewardToken === rewardToken && metaData.type === 'symbol').data; diff --git a/utils/data/getFactoryV2GaugeRewards.js b/utils/data/getFactoryV2GaugeRewards.js index 3dbf0a19..f682b19e 100644 --- a/utils/data/getFactoryV2GaugeRewards.js +++ b/utils/data/getFactoryV2GaugeRewards.js @@ -10,7 +10,7 @@ import getTokensPrices from 'utils/data/tokens-prices'; import ERC20_ABI from 'constants/abis/erc20.json'; // eslint-disable-next-line -const FACTORY_GAUGES_ABI = [{"stateMutability":"view","type":"function","name":"reward_count","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3498},{"stateMutability":"view","type":"function","name":"reward_tokens","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3573},{"stateMutability":"view","type":"function","name":"reward_data","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"token","type":"address"},{"name":"distributor","type":"address"},{"name":"period_finish","type":"uint256"},{"name":"rate","type":"uint256"},{"name":"last_update","type":"uint256"},{"name":"integral","type":"uint256"}],"gas":15003},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3108}]; +const FACTORY_GAUGES_ABI = [{ "stateMutability": "view", "type": "function", "name": "reward_count", "inputs": [], "outputs": [{ "name": "", "type": "uint256" }], "gas": 3498 }, { "stateMutability": "view", "type": "function", "name": "reward_tokens", "inputs": [{ "name": "arg0", "type": "uint256" }], "outputs": [{ "name": "", "type": "address" }], "gas": 3573 }, { "stateMutability": "view", "type": "function", "name": "reward_data", "inputs": [{ "name": "arg0", "type": "address" }], "outputs": [{ "name": "token", "type": "address" }, { "name": "distributor", "type": "address" }, { "name": "period_finish", "type": "uint256" }, { "name": "rate", "type": "uint256" }, { "name": "last_update", "type": "uint256" }, { "name": "integral", "type": "uint256" }], "gas": 15003 }, { "stateMutability": "view", "type": "function", "name": "totalSupply", "inputs": [], "outputs": [{ "name": "", "type": "uint256" }], "gas": 3108 }]; export default memoize(async ({ factoryGaugesAddresses, blockchainId } = {}) => { if (typeof blockchainId === 'undefined') blockchainId = undefined; // Default value From ecae1452fdb4f2d291336b63b2a89e8cee9319be Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 5 Oct 2023 16:08:08 +0200 Subject: [PATCH 75/83] Fix kava past vprice fetching --- constants/configs/configs.js | 1 + pages/api/getFactoryAPYs-kava.js | 78 ++++++++++++++++---------------- 2 files changed, 40 insertions(+), 39 deletions(-) diff --git a/constants/configs/configs.js b/constants/configs/configs.js index fbfa02f2..fcae9c32 100644 --- a/constants/configs/configs.js +++ b/constants/configs/configs.js @@ -406,6 +406,7 @@ const configs = { platformCoingeckoId: 'kava', nativeAssetErc20WrapperId: 'wrapped-kava', // Used by crypto facto, since it handles wrapped native as native rpcUrl: 'https://evm.kava.io', + noArchivalAlternateRpcUrl: 'https://kava-rpc.gateway.pokt.network', multicallAddress: '0x7ED7bBd8C454a1B0D9EdD939c45a81A03c20131C', multicall2Address: '0x30A62aA52Fa099C4B227869EB6aeaDEda054d121', getFactoryRegistryAddress: async () => '0x40bc62805471eF53DdD5C5cF99ed3d9e5aa81b48', diff --git a/pages/api/getFactoryAPYs-kava.js b/pages/api/getFactoryAPYs-kava.js index e8c2ee06..19a02caf 100644 --- a/pages/api/getFactoryAPYs-kava.js +++ b/pages/api/getFactoryAPYs-kava.js @@ -7,26 +7,25 @@ */ import Web3 from 'web3'; -import BigNumber from 'big-number'; -import { BASE_API_DOMAIN } from 'constants/AppConstants'; import getPoolsFn from 'pages/api/getPools'; import configs from 'constants/configs'; import { fn } from 'utils/api'; -import registryAbi from 'constants/abis/factory_registry.json'; -import multicallAbi from 'constants/abis/multicall.json'; import factorypool3Abi from 'constants/abis/factory_swap.json'; +/** + * The official rpc url evm.kava.io has trouble retrieving past pool virtual prices, + * so we use another rpc for this specific purpose. The official rpc gives access + * to past logs though, which most other free rpcs do not, so we still use the + * official rpc for other purposes. + */ const web3 = new Web3(configs.kava.rpcUrl); +const web3NoArchival = new Web3(configs.kava.noArchivalAlternateRpcUrl); export default fn(async (query) => { const config = configs.kava; const version = 2 - let registryAddress = await config.getFactoryRegistryAddress(); - let multicallAddress = config.multicallAddress; - let registry = new web3.eth.Contract(registryAbi, registryAddress); - let multicall = new web3.eth.Contract(multicallAbi, multicallAddress) let res = await getPoolsFn.straightCall({ blockchainId: 'kava', registryId: 'factory' }) let poolDetails = []; let totalVolume = 0 @@ -38,33 +37,33 @@ export default fn(async (query) => { await Promise.all( res.poolData.map(async (pool, index) => { - let poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) + const poolContractForVpriceFetching = new web3NoArchival.eth.Contract(factorypool3Abi, pool.address) + const poolContract = new web3.eth.Contract(factorypool3Abi, pool.address) let vPriceOldFetch; let vPriceOldFetchFailed = false; try { - vPriceOldFetch = await poolContract.methods.get_virtual_price().call('', latest - DAY_BLOCKS) + vPriceOldFetch = await poolContractForVpriceFetching.methods.get_virtual_price().call('', latest - DAY_BLOCKS) } catch (e) { vPriceOldFetchFailed = true; - vPriceOldFetch = 1 * (10 ** 18) + vPriceOldFetch = 1 * (10 ** 18) } - const testPool = pool.address const eventName = 'TokenExchangeUnderlying'; const eventName2 = 'TokenExchange'; - console.log(latest - DAY_BLOCKS, latest, 'blocks') + // console.log(latest - DAY_BLOCKS, latest, 'blocks') const isMetaPool = ( - pool.implementation?.startsWith('v1metausd') || - pool.implementation?.startsWith('metausd') || - pool.implementation?.startsWith('v1metabtc') || - pool.implementation?.startsWith('metabtc') + pool.implementation?.startsWith('v1metausd') || + pool.implementation?.startsWith('metausd') || + pool.implementation?.startsWith('v1metabtc') || + pool.implementation?.startsWith('metabtc') ); let decimals = ( - version === 1 ? [pool.token.decimals, 18, 18, 18] : - (version === 2 && isMetaPool) ? pool.underlyingDecimals : - pool.decimals + version === 1 ? [pool.token.decimals, 18, 18, 18] : + (version === 2 && isMetaPool) ? pool.underlyingDecimals : + pool.decimals ); let volume = 0; @@ -83,16 +82,16 @@ export default fn(async (query) => { if (version == '2') { - let events2 = await poolContract.getPastEvents(eventName2, { - filter: {}, // Using an array means OR: e.g. 20 or 23 - fromBlock: latest - DAY_BLOCKS, - toBlock: 'latest' - }) + let events2 = await poolContract.getPastEvents(eventName2, { + filter: {}, // Using an array means OR: e.g. 20 or 23 + fromBlock: latest - DAY_BLOCKS, + toBlock: 'latest' + }) - events2.map((trade) => { - let t = trade.returnValues[2] / 10 ** decimals[trade.returnValues[1]] - volume += t - }) + events2.map((trade) => { + let t = trade.returnValues[2] / 10 ** decimals[trade.returnValues[1]] + volume += t + }) } @@ -103,9 +102,9 @@ export default fn(async (query) => { let vPriceFetch try { - vPriceFetch = await poolContract.methods.get_virtual_price().call() + vPriceFetch = await poolContractForVpriceFetching.methods.get_virtual_price().call() } catch (e) { - vPriceFetch = 1 * (10 ** 18) + vPriceFetch = 1 * (10 ** 18) } let vPrice = vPriceOldFetchFailed ? vPriceFetch : vPriceOldFetch @@ -115,19 +114,20 @@ export default fn(async (query) => { totalVolume += correctedVolume let p = { - index, - 'poolAddress' : pool.address, - 'poolSymbol' : version === 1 ? pool.token.symbol : pool.symbol, - apyFormatted, - apy, - 'virtualPrice':vPriceFetch, - volume: correctedVolume, + index, + 'poolAddress': pool.address, + 'poolSymbol': version === 1 ? pool.token.symbol : pool.symbol, + apyFormatted, + apy, + 'virtualPrice': vPriceFetch, + volume: correctedVolume, + failedFetching24hOldVprice: vPriceOldFetchFailed, } poolDetails.push(p) }) ) - poolDetails.sort((a,b) => (a.index > b.index) ? 1 : ((b.index > a.index) ? -1 : 0)) + poolDetails.sort((a, b) => (a.index > b.index) ? 1 : ((b.index > a.index) ? -1 : 0)) return { poolDetails, totalVolume, latest }; From 600ce96ee89da60d39449011b3cd6e9734c71c11 Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 5 Oct 2023 20:36:44 +0200 Subject: [PATCH 76/83] Make failedFetching24hOldVprice true only if network error --- pages/api/getFactoryAPYs-kava.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pages/api/getFactoryAPYs-kava.js b/pages/api/getFactoryAPYs-kava.js index 19a02caf..b860b472 100644 --- a/pages/api/getFactoryAPYs-kava.js +++ b/pages/api/getFactoryAPYs-kava.js @@ -42,11 +42,16 @@ export default fn(async (query) => { let vPriceOldFetch; let vPriceOldFetchFailed = false; + let vPriceOldFetchFailedBecauseBlockPruned = false; + try { vPriceOldFetch = await poolContractForVpriceFetching.methods.get_virtual_price().call('', latest - DAY_BLOCKS) } catch (e) { + console.log('error', e, e.message) vPriceOldFetchFailed = true; vPriceOldFetch = 1 * (10 ** 18) + + if (!e.message.includes('execution reverted')) vPriceOldFetchFailedBecauseBlockPruned = true; } const eventName = 'TokenExchangeUnderlying'; const eventName2 = 'TokenExchange'; @@ -121,7 +126,7 @@ export default fn(async (query) => { apy, 'virtualPrice': vPriceFetch, volume: correctedVolume, - failedFetching24hOldVprice: vPriceOldFetchFailed, + failedFetching24hOldVprice: vPriceOldFetchFailedBecauseBlockPruned, } poolDetails.push(p) }) From a543777809def242db8a5e9dfb7b7b6d751b3147 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 8 Oct 2023 12:05:19 +0200 Subject: [PATCH 77/83] Add registry address retrieval to getPlatformRegistries() to make it the canonical way of retrieving registry info --- pages/api/getPlatforms.js | 6 +-- pages/api/getPools/index.js | 2 +- utils/data/curve-platform-registries.js | 49 ++++++++++++++++++++----- utils/data/curve-pools-data.js | 4 +- 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/pages/api/getPlatforms.js b/pages/api/getPlatforms.js index e15ca218..52cc3645 100644 --- a/pages/api/getPlatforms.js +++ b/pages/api/getPlatforms.js @@ -13,10 +13,10 @@ import getPlatformRegistries from 'utils/data/curve-platform-registries'; const allBlockchainIds = Array.from(Object.keys(configs)); export default fn(async () => ({ - platforms: arrayToHashmap(allBlockchainIds.map((blockchainId) => [ + platforms: arrayToHashmap(await Promise.all(allBlockchainIds.map(async (blockchainId) => [ blockchainId, - getPlatformRegistries(blockchainId), - ])), + (await getPlatformRegistries(blockchainId)).registryIds, + ]))), }), { maxAge: 60 * 60, // 1h name: 'getPlatforms', diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index 4f42521c..f1eba274 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -235,7 +235,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) throw new Error('registryId must be \'factory\'|\'main\'|\'crypto\'|\'factory-crypto\'|\'factory-crvusd\'|\'factory-tricrypto\'|\'factory-eywa\''); } - const platformRegistries = getPlatformRegistries(blockchainId); + const platformRegistries = (await getPlatformRegistries(blockchainId)).registryIds; if (!platformRegistries.includes(registryId)) { console.error(`No registry "${registryId}" found for blockchainId "${blockchainId}"`); diff --git a/utils/data/curve-platform-registries.js b/utils/data/curve-platform-registries.js index 452b0f01..13fcacf4 100644 --- a/utils/data/curve-platform-registries.js +++ b/utils/data/curve-platform-registries.js @@ -1,7 +1,23 @@ +import Web3 from 'web3'; import memoize from 'memoizee'; import configs from 'constants/configs'; +import ADDRESS_GETTER_ABI from 'constants/abis/address_getter.json'; +import { multiCall } from 'utils/Calls'; -const getPlatformRegistries = memoize((blockchainId) => { +const getMainRegistryAddress = async (blockchainId) => { + const { rpcUrl, multicall2Address } = configs[blockchainId]; + const web3 = new Web3(rpcUrl); + + return (await multiCall([{ + address: '0x0000000022d53366457f9d5e68ec105046fc4383', + abi: ADDRESS_GETTER_ABI, + methodName: 'get_address', + params: [0], + networkSettings: { web3, multicall2Address }, + }]))[0]; +}; + +const getPlatformRegistries = memoize(async (blockchainId) => { const config = configs[blockchainId]; if (typeof config === 'undefined') { throw new Error(`No config data for blockchainId "${blockchainId}"`); @@ -17,15 +33,28 @@ const getPlatformRegistries = memoize((blockchainId) => { hasNoMainRegistry, } = config; - return [ - (!hasNoMainRegistry ? 'main' : null), - (typeof getFactoryRegistryAddress === 'function' ? 'factory' : null), - (typeof getCryptoRegistryAddress === 'function' ? 'crypto' : null), - (typeof getFactoryCryptoRegistryAddress === 'function' ? 'factory-crypto' : null), - (typeof getFactoryCrvusdRegistryAddress === 'function' ? 'factory-crvusd' : null), - (typeof getFactoryTricryptoRegistryAddress === 'function' ? 'factory-tricrypto' : null), - (typeof getFactoryEywaRegistryAddress === 'function' ? 'factory-eywa' : null), - ].filter((o) => o !== null); + return { + registryIds: [ + (!hasNoMainRegistry ? 'main' : null), + (typeof getFactoryRegistryAddress === 'function' ? 'factory' : null), + (typeof getCryptoRegistryAddress === 'function' ? 'crypto' : null), + (typeof getFactoryCryptoRegistryAddress === 'function' ? 'factory-crypto' : null), + (typeof getFactoryCrvusdRegistryAddress === 'function' ? 'factory-crvusd' : null), + (typeof getFactoryTricryptoRegistryAddress === 'function' ? 'factory-tricrypto' : null), + (typeof getFactoryEywaRegistryAddress === 'function' ? 'factory-eywa' : null), + ].filter((o) => o !== null), + registryAddresses: [ + (!hasNoMainRegistry ? (await getMainRegistryAddress(blockchainId)) : null), + (typeof getFactoryRegistryAddress === 'function' ? (await getFactoryRegistryAddress()) : null), + (typeof getCryptoRegistryAddress === 'function' ? (await getCryptoRegistryAddress()) : null), + (typeof getFactoryCryptoRegistryAddress === 'function' ? (await getFactoryCryptoRegistryAddress()) : null), + (typeof getFactoryCrvusdRegistryAddress === 'function' ? (await getFactoryCrvusdRegistryAddress()) : null), + (typeof getFactoryTricryptoRegistryAddress === 'function' ? (await getFactoryTricryptoRegistryAddress()) : null), + (typeof getFactoryEywaRegistryAddress === 'function' ? (await getFactoryEywaRegistryAddress()) : null), + ].filter((o) => o !== null), + }; +}, { + promise: true, }); export default getPlatformRegistries; diff --git a/utils/data/curve-pools-data.js b/utils/data/curve-pools-data.js index 177fcb87..0beebcc1 100644 --- a/utils/data/curve-pools-data.js +++ b/utils/data/curve-pools-data.js @@ -23,7 +23,7 @@ const attachFactoryTag = (poolData) => ({ const getAllCurvePoolsData = memoize(async (blockchainIds) => ( flattenArray(await sequentialPromiseFlatMap(blockchainIds, async (blockchainId) => ( - Promise.all(getPlatformRegistries(blockchainId).map((registryId) => ( + Promise.all((await getPlatformRegistries(blockchainId)).registryIds.map((registryId) => ( (getPools.straightCall({ blockchainId, registryId, preventQueryingFactoData: true })) .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId(registryId, poolData)).map((poolData) => ( registryId.startsWith('factory') ? @@ -39,7 +39,7 @@ const getAllCurvePoolsData = memoize(async (blockchainIds) => ( const fetchAllCurvePoolsDataEndpoints = async (blockchainIds) => ( flattenArray(await sequentialPromiseFlatMap(blockchainIds, async (blockchainId) => ( - Promise.all(getPlatformRegistries(blockchainId).map(async (registryId) => ( + Promise.all((await getPlatformRegistries(blockchainId)).registryIds.map(async (registryId) => ( Promise.resolve((await (await Request.get(`${BASE_API_DOMAIN}/api/getPools/${blockchainId}/${registryId}`)).json()).data) .then((res) => res.poolData.map((poolData) => attachBlockchainId(blockchainId, poolData)).map((poolData) => attachRegistryId('main', poolData)).map((poolData) => ( registryId.startsWith('factory') ? From fa7473a3f95a58657711893b3f6ce773860a19b7 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 8 Oct 2023 12:07:21 +0200 Subject: [PATCH 78/83] Refactor getPoolList to use canonical registry getter --- pages/api/getPoolList/index.js | 49 ++++++++-------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/pages/api/getPoolList/index.js b/pages/api/getPoolList/index.js index 729d92fb..73641db2 100644 --- a/pages/api/getPoolList/index.js +++ b/pages/api/getPoolList/index.js @@ -1,77 +1,50 @@ -import axios from 'axios'; import Web3 from 'web3'; -import BigNumber from 'big-number'; -import WEB3_CONSTANTS from 'constants/Web3'; import { fn } from 'utils/api'; -import { getFeeDistributor } from 'utils/getters'; -import { getThursdayUTCTimestamp } from 'utils/helpers'; -import { getMultiCall } from 'utils/getters'; - -/* GET CURVE ADDRESS GETTER */ -const ADDRESS_GETTER = '0x0000000022d53366457f9d5e68ec105046fc4383' -import ADDRESS_GETTER_ABI from 'constants/abis/address_getter.json'; import REGISTRY_ABI from 'constants/abis/registry.json'; import multicallAbi from 'constants/abis/multicall.json'; import configs from 'constants/configs'; -import { BASE_API_DOMAIN } from 'constants/AppConstants'; - - - - -export default fn(async ({blockchainId}) => { +import getPlatformRegistries from 'utils/data/curve-platform-registries'; +export default fn(async ({ blockchainId }) => { if (typeof blockchainId === 'undefined') blockchainId = 'ethereum'; // Default value const config = configs[blockchainId]; const web3 = new Web3(config.rpcUrl); - const address_getter_contract = new web3.eth.Contract(ADDRESS_GETTER_ABI, ADDRESS_GETTER); if (typeof config === 'undefined') { throw new Error(`No factory data for blockchainId "${blockchainId}"`); } - const multicallAddress = config.multicallAddress const multicall_contract = new web3.eth.Contract(multicallAbi, multicallAddress) - const main_registry = await address_getter_contract.methods.get_address(0).call() - const factory_registry = await address_getter_contract.methods.get_address(3).call() - const crypto_registry = await address_getter_contract.methods.get_address(5).call() - const crypto_factory_registry = config.getFactoryCryptoRegistryAddress ? await config.getFactoryCryptoRegistryAddress() : null - const crvusd_factory_registry = config.getFactoryCrvusdRegistryAddress ? await config.getFactoryCrvusdRegistryAddress() : null - const tricrypto_factory_registry = config.getFactoryTricryptoRegistryAddress ? await config.getFactoryTricryptoRegistryAddress() : null - - - let registries = - [main_registry, factory_registry, crypto_registry, crypto_factory_registry, crvusd_factory_registry, tricrypto_factory_registry] - - registries = registries.filter((address) => !!address && address !== '0x0000000000000000000000000000000000000000'); - - let poolList = [] - let registries_name = ['main', 'stable-factory', 'crypto', 'crypto-factory', 'factory-crvusd', 'factory-tricrypto'] + let { + registryIds: registries_name, + registryAddresses: registries, + } = await getPlatformRegistries(blockchainId); - for (var i = 0; i < registries.length; i++) { + // For backward compatibility, in this endpoint the "factory" registry is named "stable-factory" + registries_name = registries_name.map((registryId) => (registryId === 'factory' ? 'stable-factory' : registryId)); + for (var i = 0; i < registries.length; i++) { let registry = new web3.eth.Contract(REGISTRY_ABI, registries[i]) let pool_count = await registry.methods.pool_count().call() let calls = [] for (var o = 0; o < pool_count; o++) { - calls.push([registries[i],registry.methods.pool_list(o).encodeABI()]) + calls.push([registries[i], registry.methods.pool_list(o).encodeABI()]) } let aggcalls = await multicall_contract.methods.aggregate(calls).call(); - aggcalls[1].map((hex) => { poolList.push({'type': registries_name[i], 'address': web3.eth.abi.decodeParameter('address', hex)}) }) + aggcalls[1].map((hex) => { poolList.push({ 'type': registries_name[i], 'address': web3.eth.abi.decodeParameter('address', hex) }) }) } //filters duplicates poolList = [...poolList.reduce((map, obj) => map.set(obj.address, obj), new Map()).values()]; return { poolList }; - - }, { maxAge: 5 * 60, // 15 min }); From 17825ac4c3c5a8a0e302671372aa5892ca4b2bb8 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 11 Oct 2023 12:20:34 +0200 Subject: [PATCH 79/83] Add getBaseApys endpoint Solid and exhaustive base aprs for stable and crypto pools, that take into account underlying LST aprs --- pages/api/getBaseApys/[blockchainId].js | 203 ++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 pages/api/getBaseApys/[blockchainId].js diff --git a/pages/api/getBaseApys/[blockchainId].js b/pages/api/getBaseApys/[blockchainId].js new file mode 100644 index 00000000..3481e943 --- /dev/null +++ b/pages/api/getBaseApys/[blockchainId].js @@ -0,0 +1,203 @@ +/** + * This endpoint returns all base apy data for curve pools on each chain. + */ +const lc = (str) => str.toLowerCase(); + +import { fn } from 'utils/api'; +import Web3 from 'web3'; +import BN from 'bignumber.js'; +import groupBy from 'lodash.groupby'; +import configs from 'constants/configs'; +import { flattenArray, sumBN } from 'utils/Array'; +import { sequentialPromiseMap } from 'utils/Async'; +import { multiCall } from 'utils/Calls'; +import { getNowTimestamp } from 'utils/Date'; +import getAllCurvePoolsData from 'utils/data/curve-pools-data'; +import factorypool3Abi from 'constants/abis/factory_swap.json'; +import factorypool3BaseTricryptoAbi from 'constants/abis/factory_tricrypto_swap.json'; +import factorypool3BaseCryptoAbi from 'constants/abis/factory_crypto_swap.json'; +import { uintToBN } from 'utils/Web3'; + +const isCryptoPool = ({ registryId }) => registryId.includes('crypto'); + +// xcp_profit and xcp_profit_a can return '0' when queried for a crypto pool with no activity, whether +// at an older block or at the latest block: this makes returned data default to the proper initial value. +const safeXcpProfit = (xcpProfit) => Number(xcpProfit) === 0 ? 1e18 : xcpProfit + +export default fn(async ({ blockchainId }) => { + const config = configs[blockchainId]; + + const web3 = new Web3(config.rpcUrl); + const networkSettings = { + web3, + multicall2Address: config.multicall2Address, + }; + + if (typeof config === 'undefined') { + throw new Error(`Endpoint "getVolumes" not available for "${blockchainId}"`); + } + + const timestampDayOld = getNowTimestamp() - 86400; + const timestampWeekOld = getNowTimestamp() - (7 * 86400); + + + const [ + allPools, + { height: blockNumberDayOld }, + { height: blockNumberWeekOld }, + ] = await Promise.all([ + getAllCurvePoolsData([blockchainId]), + (await fetch(`https://coins.llama.fi/block/${blockchainId}/${timestampDayOld}`)).json(), + (await fetch(`https://coins.llama.fi/block/${blockchainId}/${timestampWeekOld}`)).json(), + ]); + + const getPoolByAddress = (address) => ( + allPools.find((pool) => (lc(pool.address) === lc(address))) + ); + + const [ + weekOldData, + dayOldData, + currentData, + ] = await sequentialPromiseMap([blockNumberWeekOld, blockNumberDayOld, undefined], async (blockNumber) => ( + groupBy(await multiCall(flattenArray(allPools.map((pool) => { + const poolAbi = ( + pool.registryId === 'factory-tricrypto' ? factorypool3BaseTricryptoAbi : + pool.registryId.includes('crypto') ? factorypool3BaseCryptoAbi : + factorypool3Abi + ); + + return [ + ...(isCryptoPool(pool) ? [{ + address: pool.address, + abi: poolAbi, + methodName: 'xcp_profit', + metaData: { type: 'xcpProfit', pool }, + networkSettings: { + ...networkSettings, + blockNumber, + }, + superSettings: { + fallbackValue: 1e18, + }, + }, { + address: pool.address, + abi: poolAbi, + methodName: 'xcp_profit_a', + metaData: { type: 'xcpProfitA', pool }, + networkSettings: { + ...networkSettings, + blockNumber, + }, + superSettings: { + fallbackValue: 1e18, + }, + }] : [{ + address: pool.address, + abi: poolAbi, + methodName: 'get_virtual_price', + metaData: { type: 'virtualPrice', pool }, + networkSettings: { + ...networkSettings, + blockNumber, + }, + superSettings: { + fallbackValue: 1e18, + }, + }]), + ]; + }))), 'metaData.pool.address') + )); + + const baseApys = allPools.map((pool) => { + const weekOldPoolData = groupBy(weekOldData[pool.address], 'metaData.type'); + const dayOldPoolData = groupBy(dayOldData[pool.address], 'metaData.type'); + const currentPoolData = groupBy(currentData[pool.address], 'metaData.type'); + + if (!dayOldPoolData || !currentPoolData) return null; + + let latestDailyApyPcent; + let latestWeeklyApyPcent; + + /** + * Calculate base daily and weekly apys + */ + if (isCryptoPool(pool)) { + const { xcpProfit: [{ data: unsafeXcpProfit }], xcpProfitA: [{ data: unsafeXcpProfitA }] } = currentPoolData; + const { xcpProfit: [{ data: unsafeXcpProfitDayOld }], xcpProfitA: [{ data: unsafeXcpProfitADayOld }] } = dayOldPoolData; + const { xcpProfit: [{ data: unsafeXcpProfitWeekOld }], xcpProfitA: [{ data: unsafeXcpProfitAWeekOld }] } = weekOldPoolData; + + const xcpProfit = safeXcpProfit(unsafeXcpProfit); + const xcpProfitA = safeXcpProfit(unsafeXcpProfitA); + const xcpProfitDayOld = safeXcpProfit(unsafeXcpProfitDayOld); + const xcpProfitADayOld = safeXcpProfit(unsafeXcpProfitADayOld); + const xcpProfitWeekOld = safeXcpProfit(unsafeXcpProfitWeekOld); + const xcpProfitAWeekOld = safeXcpProfit(unsafeXcpProfitAWeekOld); + + const currentProfit = ((xcpProfit / 2) + (xcpProfitA / 2) + 1e18) / 2; + const dayOldProfit = ((xcpProfitDayOld / 2) + (xcpProfitADayOld / 2) + 1e18) / 2; + const weekOldProfit = ((xcpProfitWeekOld / 2) + (xcpProfitAWeekOld / 2) + 1e18) / 2; + const rateDaily = (currentProfit - dayOldProfit) / dayOldProfit; + const rateWeekly = (currentProfit - weekOldProfit) / weekOldProfit; + + latestDailyApyPcent = ((rateDaily + 1) ** (365 / 1) - 1) * 100; + latestWeeklyApyPcent = ((rateWeekly + 1) ** (365 / 7) - 1) * 100; + + /** + * Note: this doesn't take into account a special case where a crypto pool uses + * a base pool lp as one of its underlying assets. There's currently only one + * pool doing this, on Avalanche, and at the time of writing it's not receiving + * enough volume to warrant additional complexity in this code. For future reference + * if this becomes needed again, search `CRYPTO_POOLS_WITH_BASE_POOLS` in curve-api. + */ + } else { + const { virtualPrice: [{ data: virtualPrice }] } = currentPoolData; + const { virtualPrice: [{ data: virtualPriceDayOld }] } = dayOldPoolData; + const { virtualPrice: [{ data: virtualPriceweekOld }] } = weekOldPoolData; + + const rateDaily = (virtualPrice - virtualPriceDayOld) / virtualPriceDayOld; + const rateWeekly = (virtualPrice - virtualPriceweekOld) / virtualPriceweekOld; + + latestDailyApyPcent = ((rateDaily + 1) ** (365 / 1) - 1) * 100; + latestWeeklyApyPcent = ((rateWeekly + 1) ** (365 / 7) - 1) * 100; + } + + /** + * Add additional ETH staking APY to pools containing ETH LSDs + */ + const { usesRateOracle, coins, usdTotal } = pool; + const needsAdditionalLsdAssetApy = ( + !usesRateOracle && + coins.some(({ ethLsdApy }) => typeof ethLsdApy !== 'undefined') + ); + + if (needsAdditionalLsdAssetApy && usdTotal > 0) { + const additionalApysPcentFromLsds = coins.map(({ + ethLsdApy, + poolBalance, + decimals, + usdPrice, + }) => { + if (typeof ethLsdApy === 'undefined' || usdPrice === null || usdPrice === 0) return 0; + + const assetUsdTotal = uintToBN(poolBalance, decimals).times(usdPrice); + const assetProportionInPool = assetUsdTotal.div(usdTotal); + + return assetProportionInPool.times(ethLsdApy).times(100); + }); + + latestDailyApyPcent = BN(latestDailyApyPcent).plus(sumBN(additionalApysPcentFromLsds)); + latestWeeklyApyPcent = BN(latestWeeklyApyPcent).plus(sumBN(additionalApysPcentFromLsds)); + } + + return { + address: pool.address, + latestDailyApyPcent: BN(latestDailyApyPcent).dp(2).toNumber(), + latestWeeklyApyPcent: BN(latestWeeklyApyPcent).dp(2).toNumber(), + }; + }).filter((o) => o !== null); + + return { baseApys }; +}, { + maxAge: 60, +}); From 911022ade33a538ab9cd7cb9ef827f3ce6bdad0a Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 11 Oct 2023 12:21:30 +0200 Subject: [PATCH 80/83] Add getVolumes endpoint This endpoint uses curve-prices rather than subgraphs to retrieve volumes, and is a newer more reliable data source --- pages/api/getVolumes/[blockchainId].js | 90 ++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 pages/api/getVolumes/[blockchainId].js diff --git a/pages/api/getVolumes/[blockchainId].js b/pages/api/getVolumes/[blockchainId].js new file mode 100644 index 00000000..eb9dbb88 --- /dev/null +++ b/pages/api/getVolumes/[blockchainId].js @@ -0,0 +1,90 @@ +/** + * This endpoint returns all volume and base apy data for curve pools on each chain. + * It relies on the [Curve Prices API](https://prices.curve.fi/feeds-docs), and is meant + * as a more reliable replacement to the `getSubgraphData/[blockchainId]` endpoints + * which rely on subgraphs. + * + * Note: currently, only Ethereum is available. + */ + +import { fn } from 'utils/api'; +import BN from 'bignumber.js'; +import configs from 'constants/configs'; +import { BASE_API_DOMAIN } from 'constants/AppConstants'; +import getBaseApys from 'pages/api/getBaseApys/[blockchainId]'; +import { lc } from 'utils/String'; +import { sumBN } from 'utils/Array'; + +const AVAILABLE_CHAIN_IDS = [ + 'ethereum', +]; + +const DEFAULT_VOLUME_DATA = { + trading_volume_24h: 0, + liquidity_volume_24h: 0, + virtual_price: null, // The fact that this pool isn't indexed by curve-prices doesn't imply its vprice is 1e18, so there's no accurate fallback data available +}; + +export default fn(async ({ blockchainId }) => { + const config = configs[blockchainId]; + + if (typeof config === 'undefined' || !AVAILABLE_CHAIN_IDS.includes(blockchainId)) { + throw new Error(`Endpoint "getVolumes" not available for "${blockchainId}"`); + } + + const [ + { data: { poolList: poolAddressesAndTypes } }, + { data: poolData }, + { baseApys }, + ] = await Promise.all([ + (await fetch(`${BASE_API_DOMAIN}/api/getPoolList/${blockchainId}`)).json(), + (await fetch(`https://prices.curve.fi/v1/chains/${blockchainId}`)).json(), + getBaseApys.straightCall({ blockchainId }), + ]); + + const pools = poolAddressesAndTypes.map(({ address, type }) => { + const lcAddress = lc(address) + const volumeData = poolData.find((data) => lc(data.address) === lcAddress); + + const { + trading_volume_24h: tradingVolume, + // liquidity_volume_24h: liquidityVolume, // Unused atm + virtual_price: virtualPrice, + } = (volumeData || DEFAULT_VOLUME_DATA); + + // Some pools aren't indexed by curve-prices, simply because they haven’t registered any trades recently. + // However this doesn't mean that their APR is null, as e.g. their deposits can be in deposit pools for + // lending pools. This falls back to freshly-fetched APYs for these pools. + const poolBaseApys = baseApys.find((pool) => lc(address) === lc(pool.address)); + const latestDailyApy = BN(poolBaseApys.latestDailyApyPcent).div(100); + const latestWeeklyApy = BN(poolBaseApys.latestWeeklyApyPcent).div(100); + + return { + address, + type, + volumeUSD: BN(tradingVolume).dp(2).toNumber(), // Excluding liquidityVolume for consistency for now, may add it later + latestDailyApyPcent: BN(latestDailyApy).times(100).dp(2).toNumber(), + latestWeeklyApyPcent: BN(latestWeeklyApy).times(100).dp(2).toNumber(), + virtualPrice, + } + }).filter((o) => o !== null); + + const totalStableVolume = sumBN(pools.filter(({ type }) => !type.includes('crypto')).map(({ volumeUSD }) => volumeUSD)); + const totalCryptoVolume = sumBN(pools.filter(({ type }) => type.includes('crypto')).map(({ volumeUSD }) => volumeUSD)); + const totalVolume = totalStableVolume.plus(totalCryptoVolume); + const cryptoVolumeSharePcent = totalCryptoVolume.div(totalVolume).times(100); + + return { + pools, + totalVolumes: { + totalStableVolume: totalStableVolume.dp(2).toNumber(), + totalCryptoVolume: totalCryptoVolume.dp(2).toNumber(), + totalVolume: totalVolume.dp(2).toNumber(), + cryptoVolumeSharePcent: cryptoVolumeSharePcent.dp(2).toNumber(), + }, + }; +}, { + maxAge: 60, +}); + +export { AVAILABLE_CHAIN_IDS }; // Temporary export while this function is used internally in other places From 90e90f7640effe0f8de510b93cb06f7b615ed62c Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 11 Oct 2023 12:21:58 +0200 Subject: [PATCH 81/83] Plug getVolumes endpoint into getSubgraphData for backward-availability --- pages/api/getSubgraphData/index.js | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index 8ea47166..202b5d38 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -7,6 +7,8 @@ import { BASE_API_DOMAIN } from 'constants/AppConstants'; import { runConcurrentlyAtMost } from 'utils/Async'; import { uintToBN } from 'utils/Web3'; import getAllCurvePoolsData from 'utils/data/curve-pools-data'; +import getVolumes, { AVAILABLE_CHAIN_IDS as AVAILABLE_CHAIN_IDS_FOR_GET_VOLUMES } + from 'pages/api/getVolumes/[blockchainId]'; import { sumBN } from 'utils/Array.js'; const lc = (str) => str.toLowerCase(); @@ -39,6 +41,36 @@ const getFallbackData = async (fallbackDataFileName) => ( export default fn(async ({ blockchainId }) => { if (typeof blockchainId === 'undefined') blockchainId = 'ethereum'; // Default value + // If the newest, more accurate method of retrieving volumes is available + // for this chain, return it instead with backward-compatible data structure + if (AVAILABLE_CHAIN_IDS_FOR_GET_VOLUMES.includes(blockchainId)) { + console.log('USE GETVOLUMES') + const data = await getVolumes.straightCall({ blockchainId }); + + return { + poolList: data.pools.map(({ + address, + type, + volumeUSD, + latestDailyApyPcent, + latestWeeklyApyPcent, + virtualPrice, + }) => ({ + address, + latestDailyApy: latestDailyApyPcent, + latestWeeklyApy: latestWeeklyApyPcent, + rawVolume: null, // Not available, and unused in all clients we know of + type, + virtualPrice, + volumeUSD, + })), + subgraphHasErrors: false, + cryptoShare: data.totalVolumes.cryptoVolumeSharePcent, + cryptoVolume: data.totalVolumes.totalCryptoVolume, + totalVolume: data.totalVolumes.totalVolume, + }; + } + const fallbackDataFileName = `getSubgraphData-${blockchainId}`; if (USE_FALLBACK_THEGRAPH_DATA && typeof fallbackDataFileName !== 'undefined') { From 20df1c56cb23ab4b07fe2c74fae6c3bbc9498c59 Mon Sep 17 00:00:00 2001 From: Philippe Date: Thu, 12 Oct 2023 10:46:42 +0200 Subject: [PATCH 82/83] Make getFactoGaugesCrvRewards more resilient by unhardcoding registries --- pages/api/getFactoGaugesCrvRewards/index.js | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/pages/api/getFactoGaugesCrvRewards/index.js b/pages/api/getFactoGaugesCrvRewards/index.js index 1fc42574..3b60e394 100644 --- a/pages/api/getFactoGaugesCrvRewards/index.js +++ b/pages/api/getFactoGaugesCrvRewards/index.js @@ -9,6 +9,7 @@ import getFactoGauges from 'pages/api/getFactoGauges'; import getPools from 'pages/api/getPools'; import configs from 'constants/configs'; import { lc } from 'utils/String'; +import getAllCurvePoolsData from 'utils/data/curve-pools-data'; const NON_STANDARD_OUTDATED_GAUGES = [ 'celo-0x4969e38b8d37fc42a1897295Ea6d7D0b55944497', @@ -20,15 +21,7 @@ export default fn(async ({ blockchainId }) => { const config = configs[blockchainId]; const { gauges } = await getFactoGauges.straightCall({ blockchainId }); - const { poolData: mainPoolData } = await getPools.straightCall({ blockchainId, registryId: 'main' }); - const { poolData: cryptoPoolData } = await getPools.straightCall({ blockchainId, registryId: 'crypto' }); - const { poolData: factoStablePoolData } = await getPools.straightCall({ blockchainId, registryId: 'factory' }); - const { poolData: factoCryptoPoolData } = ( - config.getFactoryCryptoRegistryAddress ? - await getPools.straightCall({ blockchainId, registryId: 'factory-crypto' }) : - { poolData: [] } - ); - const poolData = [...mainPoolData, ...cryptoPoolData, ...factoStablePoolData, ...factoCryptoPoolData]; + const poolData = await getAllCurvePoolsData([blockchainId]); const sideChainGauges = gauges.filter(({ side_chain: isSideChain, @@ -68,7 +61,7 @@ export default fn(async ({ blockchainId }) => { const apy = ( areCrvRewardsStuckInBridge ? 0 : - ((rate / 1e18) * (86400 * 365) / gaugeUsdValue * 0.4 * crvPrice * 100) + ((rate / 1e18) * (86400 * 365) / gaugeUsdValue * 0.4 * crvPrice * 100) ); return { From 5290ae0e7fb11ae7d0298e23dcd030cc1819b819 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 16 Oct 2023 11:49:55 +0200 Subject: [PATCH 83/83] Make getAllPoolsVolume work for chains w/o subgraph --- pages/api/getAllPoolsVolume/index.js | 23 ++++++++++++++++++----- pages/api/getPools/index.js | 8 +++----- pages/api/getSubgraphData/index.js | 1 - utils/api.js | 12 ++++++++++-- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/pages/api/getAllPoolsVolume/index.js b/pages/api/getAllPoolsVolume/index.js index e2497235..69e5aa45 100644 --- a/pages/api/getAllPoolsVolume/index.js +++ b/pages/api/getAllPoolsVolume/index.js @@ -3,12 +3,25 @@ import { fn } from 'utils/api'; export default fn(async ({ blockchainId }) => { if (typeof blockchainId === 'undefined') blockchainId = 'ethereum'; // Default value - const { data: { totalVolume, cryptoShare } } = await (await fetch(`https://api.curve.fi/api/getSubgraphData/${blockchainId}`)).json(); + const { success, data } = await (await fetch(`https://api.curve.fi/api/getSubgraphData/${blockchainId}`)).json(); - return { - totalVolume, - cryptoShare - }; + if (success) { + const { totalVolume, cryptoShare } = data; + + return { + totalVolume, + cryptoShare + }; + } else { + // Fallback for chains without subgraph available; this won't be necessary anymore once we've moved + // to curve-prices for all chains + const { data } = await (await fetch(`https://api.curve.fi/api/getFactoryAPYs-${blockchainId}`)).json(); + + return { + totalVolume: data.totalVolume, + cryptoShare: undefined, + }; + } }, { maxAge: 10 * 60, // 10m }); diff --git a/pages/api/getPools/index.js b/pages/api/getPools/index.js index f1eba274..23ff46af 100644 --- a/pages/api/getPools/index.js +++ b/pages/api/getPools/index.js @@ -12,7 +12,7 @@ import Web3 from 'web3'; import BN from 'bignumber.js'; import groupBy from 'lodash.groupby'; -import { fn } from 'utils/api'; +import { fn, ParamError } from 'utils/api'; import factoryV2RegistryAbi from 'constants/abis/factory-v2-registry.json'; import factoryPoolAbi from 'constants/abis/factory-v2/Plain2Balances.json'; import factoryCryptoRegistryAbi from 'constants/abis/factory-crypto-registry.json'; @@ -119,7 +119,6 @@ const getEthereumOnlyData = async ({ preventQueryingFactoData, blockchainId }) = (await import('utils/data/getFactoryV2GaugeRewards')).default : (await import('utils/data/getFactoryV2SidechainGaugeRewards')).default ); - console.log('retrieve gaugesData...') /** * Here we want getGauges data (which itself calls getPools) to be available * whether api edge caches are hot or cold. This makes sure data is called @@ -127,7 +126,6 @@ const getEthereumOnlyData = async ({ preventQueryingFactoData, blockchainId }) = * caches are hot. */ gaugesData = (await (await fetch(BASE_API_DOMAIN + '/api/getAllGauges?blockchainId=' + blockchainId)).json()).data; - console.log('retrieved gaugesData!') if (blockchainId === 'ethereum') { const factoryGauges = Array.from(Object.values(gaugesData)).filter(({ side_chain }) => !side_chain); @@ -202,7 +200,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) const config = configs[blockchainId]; if (typeof config === 'undefined') { - throw new Error(`No config data for blockchainId "${blockchainId}"`); + throw new ParamError(`No config data for blockchainId "${blockchainId}"`); } if (config.hasNoMainRegistry && registryId === 'main') { @@ -232,7 +230,7 @@ const getPools = async ({ blockchainId, registryId, preventQueryingFactoData }) } = config; if (registryId !== 'factory' && registryId !== 'main' && registryId !== 'crypto' && registryId !== 'factory-crypto' && registryId !== 'factory-crvusd' && registryId !== 'factory-tricrypto' && registryId !== 'factory-eywa') { - throw new Error('registryId must be \'factory\'|\'main\'|\'crypto\'|\'factory-crypto\'|\'factory-crvusd\'|\'factory-tricrypto\'|\'factory-eywa\''); + throw new ParamError('registryId must be \'factory\'|\'main\'|\'crypto\'|\'factory-crypto\'|\'factory-crvusd\'|\'factory-tricrypto\'|\'factory-eywa\''); } const platformRegistries = (await getPlatformRegistries(blockchainId)).registryIds; diff --git a/pages/api/getSubgraphData/index.js b/pages/api/getSubgraphData/index.js index 202b5d38..7b886bfd 100644 --- a/pages/api/getSubgraphData/index.js +++ b/pages/api/getSubgraphData/index.js @@ -44,7 +44,6 @@ export default fn(async ({ blockchainId }) => { // If the newest, more accurate method of retrieving volumes is available // for this chain, return it instead with backward-compatible data structure if (AVAILABLE_CHAIN_IDS_FOR_GET_VOLUMES.includes(blockchainId)) { - console.log('USE GETVOLUMES') const data = await getVolumes.straightCall({ blockchainId }); return { diff --git a/utils/api.js b/utils/api.js index 8f29cb68..89090556 100644 --- a/utils/api.js +++ b/utils/api.js @@ -33,6 +33,13 @@ const logRuntime = async (fn, name, query, silenceParamsLog) => { return res; }; +class ParamError extends Error { + constructor(message) { + super(message); + this.name = this.constructor.name; + } +} + const fn = (cb, options = {}) => { const { maxAge: maxAgeSec = null, // Caching duration, in seconds @@ -61,10 +68,10 @@ const fn = (cb, options = {}) => { }) .catch((err) => { if (IS_DEV) { - console.log('ERROR that would be caught and served with success=false on prod', err); throw err; } else { - res.status(500).json(formatJsonError(err)); + const code = (err instanceof ParamError) ? 200 : 500; + res.status(code).json(formatJsonError(err)); } }) ); @@ -77,4 +84,5 @@ const fn = (cb, options = {}) => { export { fn, formatJsonError, + ParamError, };