import { useEffect, useState } from 'react' import sumBy from 'lodash/sumBy' import { useTranslation } from 'next-i18next' import { Connection } from '@solana/web3.js' import mangoStore, { CLUSTER } from '@store/mangoStore' import useInterval from './shared/useInterval' const tpsAlertThreshold = 1000 const tpsWarningThreshold = 1300 const getRecentPerformance = async ( connection: Connection, setTps: (x: number) => void, ) => { try { const samples = 2 const response = await connection.getRecentPerformanceSamples(samples) const totalSecs = sumBy(response, 'samplePeriodSecs') const totalTransactions = sumBy(response, 'numTransactions') const tps = totalTransactions / totalSecs setTps(tps) } catch { console.warn('Unable to fetch TPS') } } const SolanaTps = () => { const connection = mangoStore((s) => s.connection) const [tps, setTps] = useState(0) const { t } = useTranslation('common') useEffect(() => { getRecentPerformance(connection, setTps) }, []) useInterval(() => { getRecentPerformance(connection, setTps) }, 60 * 1000) if (CLUSTER == 'mainnet-beta') { return (

{t('solana-tps')}

{tps?.toLocaleString(undefined, { maximumFractionDigits: 0, })}
) } else { return null } } export default SolanaTps