import { PerpMarket } from '@blockworks-foundation/mango-v4' import { useQuery } from '@tanstack/react-query' import useMangoGroup from 'hooks/useMangoGroup' import useSelectedMarket from 'hooks/useSelectedMarket' import { useMemo } from 'react' import { MANGO_DATA_API_URL } from 'utils/constants' import Tooltip from '@components/shared/Tooltip' import { useTranslation } from 'next-i18next' import Link from 'next/link' const fetchFundingRate = async (groupPk: string | undefined) => { const res = await fetch( `${MANGO_DATA_API_URL}/one-hour-funding-rate?mango-group=${groupPk}`, ) return await res.json() } export const usePerpFundingRate = () => { const { group } = useMangoGroup() const res = useQuery< { market_index: number; funding_rate_hourly: number }[], Error >(['funding-rate'], () => fetchFundingRate(group?.publicKey?.toString()), { cacheTime: 1000 * 60 * 10, staleTime: 1000 * 60, retry: 3, enabled: !!group, }) return Array.isArray(res?.data) ? res : { isSuccess: false, data: null } } export const formatFunding = Intl.NumberFormat('en', { minimumSignificantDigits: 1, maximumSignificantDigits: 2, style: 'percent', }) const PerpFundingRate = () => { const { selectedMarket } = useSelectedMarket() const rate = usePerpFundingRate() const { t } = useTranslation(['common', 'trade']) const fundingRate = useMemo(() => { if (rate.isSuccess && selectedMarket instanceof PerpMarket) { const marketRate = rate?.data?.find( (r) => r.market_index === selectedMarket.perpMarketIndex, ) const funding = marketRate?.funding_rate_hourly return typeof funding === 'number' ? funding : undefined } }, [rate, selectedMarket]) return ( <>
Funding is paid continuously. The 1hr rate displayed is a rolling average of the past 60 mins.
When positive, longs will pay shorts and when negative shorts pay longs.
{typeof fundingRate === 'number' ? (
The annualized funding rate is{' '} {formatFunding.format(fundingRate * 8760)}
) : null} View Chart } >
{t('trade:funding-rate')}
{/* */}

{selectedMarket instanceof PerpMarket && typeof fundingRate === 'number' ? ( {formatFunding.format(fundingRate)} ) : ( - )}

) } export default PerpFundingRate