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

@solana/web3.js是否提供获取ERC721代币元数据的相关API?

解答

首先说明两个基础背景:

  1. ERC721是以太坊生态的NFT标准,Solana没有原生ERC721定义,生态内绝大多数NFT遵循Metaplex推出的元数据标准
  2. 原生@solana/web3.js没有封装专门用于获取NFT元数据的专用API,它仅提供Solana链交互的通用基础能力,你可以结合元数据的存储规则通过通用接口实现该需求,也可以搭配专用库简化流程。

具体实现流程

  • 首先确认你拿到的是目标NFT的铸币(mint)公钥,以及Metaplex元数据程序的固定ID:metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s
  • 调用@solana/web3.js的PublicKey.findProgramAddress方法,结合mint地址和元数据程序ID,计算出元数据实际存储的PDA(派生程序地址)
    示例代码:
    import { PublicKey } from '@solana/web3.js';
    
    // Metaplex元数据程序固定ID
    const TOKEN_METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
    // 替换为你的NFT铸币地址
    const mintPubkey = new PublicKey('xxx');
    
    // 计算元数据PDA地址
    const [metadataPDA] = PublicKey.findProgramAddressSync(
      [
        Buffer.from('metadata'),
        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
        mintPubkey.toBuffer(),
      ],
      TOKEN_METADATA_PROGRAM_ID
    );
    
  • 调用@solana/web3.js的getAccountInfo通用接口,获取该PDA地址的链上账户数据
    示例代码:
    import { Connection, clusterApiUrl } from '@solana/web3.js';
    
    // 初始化Solana主网连接
    const connection = new Connection(clusterApiUrl('mainnet-beta'));
    // 获取元数据账户的链上数据
    const metadataAccount = await connection.getAccountInfo(metadataPDA);
    
  • 反序列化拿到的二进制数据得到结构化元数据:你可以引入@metaplex-foundation/mpl-token-metadata库的反序列化方法,直接解析metadataAccount.data即可得到包含NFT名称、符号、链下元数据URI在内的结构化信息,再请求对应URI就能拿到图片、属性等全量元数据。如果不想引入额外依赖,也可以按照Metaplex公开的元数据二进制结构手动解析,但实现成本较高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:06:01