import React, { ReactElement, useEffect, useState } from 'react' import { gql, OperationContext } from 'urql' import Conversion from '../atoms/Price/Conversion' import PriceUnit from '../atoms/Price/PriceUnit' import Tooltip from '../atoms/Tooltip' import NetworkName from '../atoms/NetworkName' import { fetchData, getSubgrahUri } from '../../utils/subgraph' import { filterNetworksByType } from './UserPreferences/Networks/index' import { useSiteMetadata } from '../../hooks/useSiteMetadata' import useNetworkMetadata from '../../hooks/useNetworkMetadata' import { Logger } from '@oceanprotocol/lib' import styles from './MarketStats.module.css' const getTotalPoolsValues = gql` query PoolsData { poolFactories { totalValueLocked totalOceanLiquidity finalizedPoolCount } } ` interface Value { [chainId: number]: string } function MarketNetworkStats({ totalValueLocked, poolCount, totalOceanLiquidity }: { totalValueLocked: string poolCount: string totalOceanLiquidity: string }): ReactElement { return ( <> {' '} TVL across{' '} {poolCount} asset pools that contain{' '} , plus datatokens for each pool. ) } function MarketNetworkStatsTooltip({ totalValueLocked, poolCount, totalOceanLiquidity, mainChainIds }: { totalValueLocked: Value poolCount: Value totalOceanLiquidity: Value mainChainIds: number[] }): ReactElement { return ( <>

Counted on-chain from our pool factory. Does not filter out assets in{' '} list-purgatory

) } export default function MarketStats(): ReactElement { const [totalValueLocked, setTotalValueLocked] = useState() const [totalOceanLiquidity, setTotalOceanLiquidity] = useState() const [poolCount, setPoolCount] = useState() const [totalValueLockedSum, setTotalValueLockedSum] = useState() const [totalOceanLiquiditySum, setTotalOceanLiquiditySum] = useState() const [poolCountSum, setPoolCountSum] = useState() const [mainChainIds, setMainChainIds] = useState() const { appConfig } = useSiteMetadata() const { networksList } = useNetworkMetadata() async function getMarketStats() { const mainChainIdsList = await filterNetworksByType( 'mainnet', appConfig.chainIdsSupported, networksList ) setMainChainIds(mainChainIdsList) let newTotalValueLockedSum = 0 let newTotalOceanLiquiditySum = 0 let newPoolCountSum = 0 for (const chainId of mainChainIdsList) { const context: OperationContext = { url: `${getSubgrahUri( chainId )}/subgraphs/name/oceanprotocol/ocean-subgraph`, requestPolicy: 'network-only' } try { const response = await fetchData(getTotalPoolsValues, null, context) if (!response) continue const { totalValueLocked, totalOceanLiquidity, finalizedPoolCount } = response?.data?.poolFactories[0] await setTotalValueLocked((prevState) => ({ ...prevState, [chainId]: totalValueLocked })) await setTotalOceanLiquidity((prevState) => ({ ...prevState, [chainId]: totalOceanLiquidity })) await setPoolCount((prevState) => ({ ...prevState, [chainId]: finalizedPoolCount })) newTotalValueLockedSum += parseInt(totalValueLocked) newTotalOceanLiquiditySum += parseInt(totalOceanLiquidity) newPoolCountSum += parseInt(finalizedPoolCount) } catch (error) { Logger.error('Error fetchData: ', error.message) } } setTotalValueLockedSum(`${newTotalValueLockedSum}`) setTotalOceanLiquiditySum(`${newTotalOceanLiquiditySum}`) setPoolCountSum(`${newPoolCountSum}`) } useEffect(() => { getMarketStats() }, []) return (
<> {' '} } />
) }