diff --git a/explorer/src/components/account/TokenAccountSection.tsx b/explorer/src/components/account/TokenAccountSection.tsx index 7e9d23c4c8..c10aecb96c 100644 --- a/explorer/src/components/account/TokenAccountSection.tsx +++ b/explorer/src/components/account/TokenAccountSection.tsx @@ -1,4 +1,9 @@ -import { Account, NFTData, useFetchAccountInfo } from "providers/accounts"; +import { + Account, + NFTData, + TokenProgramData, + useFetchAccountInfo, +} from "providers/accounts"; import { TokenAccount, MintAccountInfo, @@ -20,6 +25,7 @@ import { CoingeckoStatus, useCoinGecko } from "utils/coingecko"; import { displayTimestampWithoutDate } from "utils/date"; import { LoadingCard } from "components/common/LoadingCard"; import { PublicKey } from "@solana/web3.js"; +import isMetaplexNFT from "providers/accounts/utils/isMetaplexNFT"; const getEthAddress = (link?: string) => { let address = ""; @@ -48,14 +54,11 @@ export function TokenAccountSection({ case "mint": { const info = create(tokenAccount.info, MintAccountInfo); - if ( - account.details?.data?.program === "spl-token" && - account.details.data.nftData - ) { + if (isMetaplexNFT(account.details?.data, info.decimals)) { return ( ); diff --git a/explorer/src/pages/AccountDetailsPage.tsx b/explorer/src/pages/AccountDetailsPage.tsx index e731f05ac5..bbbc76d516 100644 --- a/explorer/src/pages/AccountDetailsPage.tsx +++ b/explorer/src/pages/AccountDetailsPage.tsx @@ -7,6 +7,7 @@ import { Account, ProgramData, TokenProgramData, + useMintAccountInfo, } from "providers/accounts"; import { StakeAccountSection } from "components/account/StakeAccountSection"; import { TokenAccountSection } from "components/account/TokenAccountSection"; @@ -38,6 +39,7 @@ import { RewardsCard } from "components/account/RewardsCard"; import { MetaplexMetadataCard } from "components/account/MetaplexMetadataCard"; import { NFTHeader } from "components/account/MetaplexNFTHeader"; import { DomainsCard } from "components/account/DomainsCard"; +import isMetaplexNFT from "providers/accounts/utils/isMetaplexNFT"; const IDENTICON_WIDTH = 64; @@ -159,13 +161,18 @@ export function AccountHeader({ }) { const { tokenRegistry } = useTokenRegistry(); const tokenDetails = tokenRegistry.get(address); + const mintInfo = useMintAccountInfo(address); const account = info?.data; const data = account?.details?.data; const isToken = data?.program === "spl-token" && data?.parsed.type === "mint"; - const isNFT = isToken && data.nftData; - if (isNFT) { - return ; + if (isMetaplexNFT(data, mintInfo?.decimals)) { + return ( + + ); } if (tokenDetails || isToken) { diff --git a/explorer/src/providers/accounts/index.tsx b/explorer/src/providers/accounts/index.tsx index 92c5a0b9a7..1fc81ea161 100644 --- a/explorer/src/providers/accounts/index.tsx +++ b/explorer/src/providers/accounts/index.tsx @@ -251,10 +251,6 @@ async function fetchAccountInfo( connection ); - if (!editionInfo.masterEdition && !editionInfo.edition) { - throw new Error("No edition found"); - } - nftData = { metadata: metadata.data, editionInfo }; } } diff --git a/explorer/src/providers/accounts/utils/isMetaplexNFT.ts b/explorer/src/providers/accounts/utils/isMetaplexNFT.ts new file mode 100644 index 0000000000..6b3b423802 --- /dev/null +++ b/explorer/src/providers/accounts/utils/isMetaplexNFT.ts @@ -0,0 +1,10 @@ +import { ProgramData } from ".."; + +export default function isMetaplexNFT(data?: ProgramData, decimals?: number) { + return ( + data?.program === "spl-token" && + data?.parsed.type === "mint" && + data?.nftData && + decimals === 0 + ); +}