2022-12-07 19:32:43 -08:00
|
|
|
import { PerpMarket } from '@blockworks-foundation/mango-v4'
|
|
|
|
// import { BookSide, PerpMarket } from '@blockworks-foundation/mango-v4'
|
|
|
|
// import mangoStore from '@store/mangoStore'
|
2022-12-05 18:54:11 -08:00
|
|
|
import { useQuery } from '@tanstack/react-query'
|
|
|
|
import useMangoGroup from 'hooks/useMangoGroup'
|
2022-11-30 07:46:20 -08:00
|
|
|
import useSelectedMarket from 'hooks/useSelectedMarket'
|
2022-12-05 18:54:11 -08:00
|
|
|
import { useMemo } from 'react'
|
2023-01-18 05:13:29 -08:00
|
|
|
import { MANGO_DATA_API_URL } from 'utils/constants'
|
2022-12-05 18:54:11 -08:00
|
|
|
|
|
|
|
const fetchFundingRate = async (groupPk: string | undefined) => {
|
|
|
|
const res = await fetch(
|
2023-01-18 05:13:29 -08:00
|
|
|
`${MANGO_DATA_API_URL}/one-hour-funding-rate?mango-group=${groupPk}`
|
2022-12-05 18:54:11 -08:00
|
|
|
)
|
|
|
|
return await res.json()
|
|
|
|
}
|
|
|
|
|
|
|
|
export const usePerpFundingRate = () => {
|
|
|
|
const { group } = useMangoGroup()
|
|
|
|
|
|
|
|
const res = useQuery<any[], Error>(
|
|
|
|
['funding-rate'],
|
|
|
|
() => fetchFundingRate(group?.publicKey?.toString()),
|
|
|
|
{
|
|
|
|
cacheTime: 1000 * 60,
|
|
|
|
staleTime: 1000 * 60,
|
|
|
|
retry: true,
|
|
|
|
enabled: !!group,
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2022-12-09 13:37:44 -08:00
|
|
|
return Array.isArray(res?.data) ? res : { isSuccess: false, data: null }
|
2022-12-05 18:54:11 -08:00
|
|
|
}
|
2022-11-30 07:46:20 -08:00
|
|
|
|
|
|
|
const PerpFundingRate = () => {
|
|
|
|
const { selectedMarket } = useSelectedMarket()
|
2022-12-05 18:54:11 -08:00
|
|
|
const rate = usePerpFundingRate()
|
2022-12-09 13:37:44 -08:00
|
|
|
|
2022-12-07 19:32:43 -08:00
|
|
|
// const bids = mangoStore((s) => s.selectedMarket.bidsAccount)
|
|
|
|
// const asks = mangoStore((s) => s.selectedMarket.asksAccount)
|
2022-11-30 07:46:20 -08:00
|
|
|
|
2022-12-05 18:54:11 -08:00
|
|
|
const fundingRate = useMemo(() => {
|
|
|
|
if (rate.isSuccess && selectedMarket instanceof PerpMarket) {
|
2022-12-09 13:37:44 -08:00
|
|
|
const marketRate = rate?.data?.find(
|
2022-12-05 18:54:11 -08:00
|
|
|
(r) => r.market_index === selectedMarket.perpMarketIndex
|
|
|
|
)
|
2022-12-07 19:24:14 -08:00
|
|
|
return marketRate?.funding_rate_hourly
|
2022-12-05 18:54:11 -08:00
|
|
|
}
|
2022-12-09 13:37:44 -08:00
|
|
|
}, [rate, selectedMarket])
|
2022-12-05 18:54:11 -08:00
|
|
|
|
2022-11-30 07:46:20 -08:00
|
|
|
return (
|
2022-12-05 18:54:11 -08:00
|
|
|
<>
|
|
|
|
<div className="font-mono text-xs text-th-fgd-2">
|
2022-12-11 20:38:52 -08:00
|
|
|
{selectedMarket instanceof PerpMarket && fundingRate ? (
|
|
|
|
`${fundingRate.toFixed(4)}%`
|
|
|
|
) : (
|
|
|
|
<span className="text-th-fgd-4">-</span>
|
|
|
|
)}
|
2022-12-05 18:54:11 -08:00
|
|
|
</div>
|
2022-12-07 13:33:35 -08:00
|
|
|
{/* <div className="font-mono text-xs text-th-fgd-2">
|
|
|
|
{selectedMarket instanceof PerpMarket &&
|
|
|
|
bids instanceof BookSide &&
|
|
|
|
asks instanceof BookSide
|
|
|
|
? selectedMarket.getCurrentFundingRate(bids, asks)
|
|
|
|
: '-'}
|
|
|
|
</div> */}
|
2022-12-05 18:54:11 -08:00
|
|
|
</>
|
2022-11-30 07:46:20 -08:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
export default PerpFundingRate
|