0

我正在尝试从 solana 钱包中获取所有 NFT。我正在使用Connection.getTokenAccountsByOwnersolana-web3.js API 中的方法。

错误读取: Error: failed to get token accounts owned by account <wallet key>: Invalid param: unrecognized Token program id

复制:

async function getCollection(pk){
   try {
        //connect to solana cluster
        var connection = new web3.Connection(
          web3.clusterApiUrl('devnet'),
          'confirmed',
        );
        //get token accounts from wallet
        const nfts = await connection.getTokenAccountsByOwner(pk, {programId: pk})
        console.log(nfts);
   } catch (error) {
        console.log("Error getting NFT:" + error);
      }
}

我不完全了解“过滤器”参数{programId: publicKey}的用途。我想访问帐户中的所有 NFT,而不仅仅是我知道的铸币厂或程序 ID。

我相信这是可能的。任何帮助将不胜感激!

4

1 回答 1

0

我已经解决了我的问题。“programId”需要是 solana 令牌程序 ID。

import * as web3 from '@solana/web3.js';
import {TOKEN_PROGRAM_ID} from '@solana/spl-token'

//Each account contains a different token type. 
//NFT's will have only one token in account (I believe)
const accounts = await connection.getTokenAccountsByOwner(pk, {programId: TOKEN_PROGRAM_ID})

我能说的最好的,从这里你获取每个 NFT 的铸币厂地址并使用 metaplex API 搜索它以获取元数据。

有帮助:https ://yihau.github.io/solana-web3-demo/advanced/token/get-all-token-account-by-owner.html

于 2022-02-03T07:20:41.700 回答