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