[Explorer] Reverted a change to require that Metaplex NFTs have a `MasterEdition` and added a decimal check (#21132)
* Fixed an issue where NFTs without an Editon were not shown as NFTs * Added a central isMetaplexNFT helper and added the correct logic to TokenAccountSection Co-authored-by: Will Roeder <roederw@titan.lan>
This commit is contained in:
parent
96e5342292
commit
9ff561134d
|
@ -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 (
|
||||
<NonFungibleTokenMintAccountCard
|
||||
account={account}
|
||||
nftData={account.details.data.nftData}
|
||||
nftData={(account.details!.data as TokenProgramData).nftData!}
|
||||
mintInfo={info}
|
||||
/>
|
||||
);
|
||||
|
|
|
@ -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 <NFTHeader nftData={data.nftData!} address={address} />;
|
||||
if (isMetaplexNFT(data, mintInfo?.decimals)) {
|
||||
return (
|
||||
<NFTHeader
|
||||
nftData={(data as TokenProgramData).nftData!}
|
||||
address={address}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (tokenDetails || isToken) {
|
||||
|
|
|
@ -251,10 +251,6 @@ async function fetchAccountInfo(
|
|||
connection
|
||||
);
|
||||
|
||||
if (!editionInfo.masterEdition && !editionInfo.edition) {
|
||||
throw new Error("No edition found");
|
||||
}
|
||||
|
||||
nftData = { metadata: metadata.data, editionInfo };
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
Loading…
Reference in New Issue