You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@solana/web3.js为Solana NFT添加元数据避免钱包显示未知代币

解决方案

前置依赖

  • 首先你需要额外安装Metaplex元数据协议的SDK包:
npm install @metaplex-foundation/mpl-token-metadata

核心实现步骤

你原来的创建Mint账户的代码无需修改,在成功创建Mint之后,按以下流程添加链上元数据即可:

  1. 导入所需方法
import { getMetadataPda, createCreateMetadataAccountV3Instruction } from "@metaplex-foundation/mpl-token-metadata";
import { PublicKey, Transaction } from "@solana/web3.js";
  1. 构造元数据参数
// 替换为你自己的代币信息
const tokenMetadata = {
  name: "你的NFT名称",
  symbol: "NFT符号",
  uri: "https://你的元数据json地址", // 这里存储NFT的图片、属性等链下元数据
  sellerFeeBasisPoints: 0, // 版税比例,单位为万分之一,0即代表0%版税
  creators: [
    {
      address: fromWallet.publicKey,
      verified: true,
      share: 100, // 版税分成比例,所有创作者的share总和需要等于100
    },
  ],
  collection: null, // 若需要归属指定NFT集合可填写对应值,不需要则留空
  uses: null,
};
  1. 计算元数据PDA地址
// 元数据程序为固定ID,无需修改
const TOKEN_METADATA_PROGRAM_ID = new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
const metadataPda = await getMetadataPda(mint.publicKey, TOKEN_METADATA_PROGRAM_ID);
  1. 构造并发送元数据上链交易
const transaction = new Transaction().add(
  createCreateMetadataAccountV3Instruction(
    {
      metadata: metadataPda,
      mint: mint.publicKey,
      mintAuthority: fromWallet.publicKey,
      payer: fromWallet.publicKey,
      updateAuthority: fromWallet.publicKey,
    },
    {
      createMetadataAccountArgsV3: {
        ...tokenMetadata,
        isMutable: true, // 配置后续是否允许修改元数据
        collectionDetails: null,
      },
    }
  )
);
// 发送交易并确认上链
const txSignature = await connection.sendTransaction(transaction, [fromWallet]);
await connection.confirmTransaction(txSignature);

注意事项

  • uri字段对应的JSON需要符合SPL元数据规范,至少包含name、description、image三个字段,image字段填写你NFT的图片直链即可
  • 若你创建的是NFT,需要确保创建Mint时精度参数传0,且总发行量为1,和你现有代码的参数设置是匹配的
  • 元数据上链完成后,钱包即可正常识别代币的名称、图标等信息,不会再显示为Unknown Token

内容的提问来源于stack exchange,提问作者Ood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:36:03