diff --git a/components/icons/PythIcon.tsx b/components/icons/PythIcon.tsx
new file mode 100644
index 00000000..8463b5c5
--- /dev/null
+++ b/components/icons/PythIcon.tsx
@@ -0,0 +1,21 @@
+const PythIcon = ({ className }: { className?: string }) => {
+ return (
+
+ )
+}
+
+export default PythIcon
diff --git a/components/modals/PerpMarketDetailsModal.tsx b/components/modals/PerpMarketDetailsModal.tsx
index 56f1edf6..e9aab7d0 100644
--- a/components/modals/PerpMarketDetailsModal.tsx
+++ b/components/modals/PerpMarketDetailsModal.tsx
@@ -3,13 +3,10 @@ import Modal from '../shared/Modal'
import { useTranslation } from 'next-i18next'
import { PerpMarket } from '@blockworks-foundation/mango-v4'
import Button from '@components/shared/Button'
-import useOracleProvider from 'hooks/useOracleProvider'
-import {
- ArrowTopRightOnSquareIcon,
- ExclamationTriangleIcon,
-} from '@heroicons/react/20/solid'
+import { ExclamationTriangleIcon } from '@heroicons/react/20/solid'
import Tooltip from '@components/shared/Tooltip'
import { useRouter } from 'next/router'
+import OracleProvider from '@components/shared/OracleProvider'
interface PerpMarketDetailsModalProps {
market: PerpMarket | undefined
@@ -23,7 +20,6 @@ const PerpMarketDetailsModal = ({
market,
}: ModalCombinedProps) => {
const { t } = useTranslation(['common', 'trade'])
- const { oracleProvider, oracleLinkPath } = useOracleProvider()
const router = useRouter()
const goToPerpDetails = (marketName: string) => {
@@ -86,19 +82,7 @@ const PerpMarketDetailsModal = ({
diff --git a/components/shared/OracleProvider.tsx b/components/shared/OracleProvider.tsx
new file mode 100644
index 00000000..051c9862
--- /dev/null
+++ b/components/shared/OracleProvider.tsx
@@ -0,0 +1,25 @@
+import PythIcon from '@components/icons/PythIcon'
+import { ArrowTopRightOnSquareIcon } from '@heroicons/react/20/solid'
+import useOracleProvider from 'hooks/useOracleProvider'
+
+const OracleProvider = () => {
+ const { oracleProvider, oracleLinkPath } = useOracleProvider()
+ return oracleLinkPath ? (
+
+ {oracleProvider === 'Pyth' ? (
+
+ ) : null}
+ {oracleProvider}
+
+
+ ) : (
+
{oracleProvider}
+ )
+}
+
+export default OracleProvider
diff --git a/components/stats/perps/PerpMarketDetailsTable.tsx b/components/stats/perps/PerpMarketDetailsTable.tsx
index d0b071e9..bf9c69b8 100644
--- a/components/stats/perps/PerpMarketDetailsTable.tsx
+++ b/components/stats/perps/PerpMarketDetailsTable.tsx
@@ -3,19 +3,15 @@ import mangoStore from '@store/mangoStore'
import ContentBox from '@components/shared/ContentBox'
import MarketLogos from '@components/trade/MarketLogos'
import { Table, Td, Th, TrBody, TrHead } from '@components/shared/TableElements'
-import {
- ArrowTopRightOnSquareIcon,
- ChevronDownIcon,
- ChevronRightIcon,
-} from '@heroicons/react/20/solid'
+import { ChevronDownIcon, ChevronRightIcon } from '@heroicons/react/20/solid'
import Tooltip from '@components/shared/Tooltip'
import { Disclosure, Transition } from '@headlessui/react'
-import { getOracleProvider } from 'hooks/useOracleProvider'
import { NextRouter, useRouter } from 'next/router'
import { LinkButton } from '@components/shared/Button'
import SoonBadge from '@components/shared/SoonBadge'
import { useViewport } from 'hooks/useViewport'
import { breakpoints } from 'utils/theme'
+import OracleProvider from '@components/shared/OracleProvider'
export const goToPerpMarketDetails = (
market: string | undefined,
@@ -89,7 +85,6 @@ const PerpMarketDetailsTable = () => {
publicKey,
} = market
- const [oracleProvider, oracleLinkPath] = getOracleProvider(market)
const isComingSoon = market.oracleLastUpdatedSlot == 0
return (
@@ -144,21 +139,9 @@ const PerpMarketDetailsTable = () => {
- {oracleLinkPath ? (
-
-
- {oracleProvider}
-
-
-
- ) : (
- {oracleProvider}
- )}
+
+
+
|
@@ -186,7 +169,6 @@ const PerpMarketDetailsTable = () => {
maxFunding,
publicKey,
} = market
- const [oracleProvider, oracleLinkPath] = getOracleProvider(market)
const isComingSoon = market.oracleLastUpdatedSlot == 0
return (
@@ -218,7 +200,7 @@ const PerpMarketDetailsTable = () => {
enterTo="opacity-100"
>
-
+
{t('trade:min-order-size')}
@@ -287,23 +269,7 @@ const PerpMarketDetailsTable = () => {
{
const { t } = useTranslation(['common', 'stats', 'token', 'trade'])
- const [oracleProvider, oracleLinkPath] = useMemo(() => {
- if (!market) return ['Unavaliable', '']
- return getOracleProvider(market)
- }, [market])
-
const {
name,
minOrderSize,
@@ -158,15 +151,7 @@ const PerpMarketParams = ({ market }: { market: PerpMarket }) => {
diff --git a/components/stats/tokens/TokenDetailsTable.tsx b/components/stats/tokens/TokenDetailsTable.tsx
index 7f4865b5..01f45a0b 100644
--- a/components/stats/tokens/TokenDetailsTable.tsx
+++ b/components/stats/tokens/TokenDetailsTable.tsx
@@ -1,9 +1,5 @@
import { Disclosure, Transition } from '@headlessui/react'
-import {
- ArrowTopRightOnSquareIcon,
- ChevronDownIcon,
- ChevronRightIcon,
-} from '@heroicons/react/20/solid'
+import { ChevronDownIcon, ChevronRightIcon } from '@heroicons/react/20/solid'
import { useTranslation } from 'next-i18next'
import { useViewport } from '../../../hooks/useViewport'
import { breakpoints } from '../../../utils/theme'
@@ -28,6 +24,7 @@ import { useCallback } from 'react'
import { useSortableData } from 'hooks/useSortableData'
import TableTokenName from '@components/shared/TableTokenName'
import CollateralWeightDisplay from '@components/shared/CollateralWeightDisplay'
+import OracleProvider from '@components/shared/OracleProvider'
const TokenDetailsTable = () => {
const { t } = useTranslation(['common', 'activity', 'token', 'trade'])
@@ -178,8 +175,6 @@ const TokenDetailsTable = () => {
isInsured,
liquidationFee,
loanOriginationFee,
- oracleLinkPath,
- oracleProvider,
symbol,
} = data
@@ -211,21 +206,9 @@ const TokenDetailsTable = () => {
{isInsured}
|
- {oracleLinkPath ? (
-
-
- {oracleProvider}
-
-
-
- ) : (
- {oracleProvider}
- )}
+
+
+
|
@@ -242,7 +225,6 @@ const TokenDetailsTable = () => {
{banks.map((b, i) => {
const bank = b.bank
- const [oracleProvider, oracleLinkPath] = getOracleProvider(bank)
const mintInfo = group.mintInfosMapByMint.get(bank.mint.toString())
return (
@@ -268,7 +250,7 @@ const TokenDetailsTable = () => {
enterTo="opacity-100"
>
-
+
{
{
const { t } = useTranslation(['common', 'activity', 'token'])
- const [oracleProvider, oracleLinkPath] = useMemo(() => {
- if (!bank) return ['Unavaliable', '']
- return getOracleProvider(bank)
- }, [bank])
-
const mintInfo = useMemo(() => {
const group = mangoStore.getState().group
if (!bank || !group) return
@@ -172,19 +166,7 @@ const TokenParams = ({ bank }: { bank: Bank }) => {
{t('token:oracle')}
- {oracleLinkPath ? (
-
- {oracleProvider}
-
-
- ) : (
- {oracleProvider}
- )}
+ {bank ? : Unavailable }
diff --git a/components/trade/OraclePrice.tsx b/components/trade/OraclePrice.tsx
index abe8fe36..35b3d58d 100644
--- a/components/trade/OraclePrice.tsx
+++ b/components/trade/OraclePrice.tsx
@@ -15,8 +15,8 @@ import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
import relativeTime from 'dayjs/plugin/relativeTime'
import useOracleProvider from 'hooks/useOracleProvider'
-import { ArrowTopRightOnSquareIcon } from '@heroicons/react/20/solid'
import { CURRENCY_SYMBOLS } from './MarketSelectDropdown'
+import OracleProvider from '@components/shared/OracleProvider'
const OraclePrice = () => {
const {
@@ -33,7 +33,7 @@ const OraclePrice = () => {
const [oracleLastUpdatedSlot, setOracleLastUpdatedSlot] = useState(0)
const [highestSlot, setHighestSlot] = useState(0)
const [isStale, setIsStale] = useState(false)
- const { oracleProvider, oracleLinkPath } = useOracleProvider()
+ const { oracleProvider } = useOracleProvider()
const { t } = useTranslation(['common', 'trade'])
@@ -126,21 +126,9 @@ const OraclePrice = () => {
content={
!isStub ? (
<>
-
+
{t('trade:price-provided-by')}
- {oracleLinkPath ? (
-
- {oracleProvider}
-
-
- ) : (
- {oracleProvider}
- )}
+
{t('trade:last-updated')}{' '}
|