solana-web3.js Недопустимый параметр: неизвестный идентификатор программы токена

Я пытаюсь получить все NFT из кошелька solana. я использую Connection.getTokenAccountsByOwnerметод в API solana-web3.js.

Ошибка гласит: 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 в учетной записи, а не только к тем, монетный двор или идентификатор программы которых я знаю.

Я считаю, что это возможно. Любая помощь будет принята с благодарностью!

1 ответ

Я решил свою проблему. 'programId' должен быть идентификатором программы токена solana.

      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 и выполняете поиск по нему с помощью API-интерфейса metaplex, чтобы получить метаданные.

Полезно: https://yihau.github.io/solana-web3-demo/advanced/token/get-all-token-account-by-owner.html

Другие вопросы по тегам