簡體   English   中英

通過 metaplex candy machine id 過濾錢包中的 NFT

[英]Filter NFT's in wallet by metaplex candy machine id

有什么方法可以通過 metaplex 糖果機 ID 過濾用戶錢包嗎?

我知道如何通過getParsedTokenAccountsByOwner獲取所有用戶 nfts。

 const tokens = await connection.getParsedTokenAccountsByOwner(publicKey, {
   mint: mintAccount,
   programId,
 });

 const nftList = tokens.value.filter((row) => {
   return row.account.data.parsed.info.tokenAmount.amount === "1";
 });

問題是,我必須獲取每個令牌的元數據,然后從那里過濾它,這對鏈來說是很多不必要的點擊。 我知道我可以通過getProgramAccounts獲取糖果機的所有地址,但這很慢,並且可能需要大約30 seconds才能運行。

這個 def 使特定糖果機令牌的前端顯示令人沮喪,沒有任何類型的緩存層 + 定期輪詢,我試圖盡可能避免。

好的,我想通了!

  1. 獲取用戶錢包中每個 nft 的 solana 元數據。 (非常容易感謝 metaplex 助手)
  2. 過濾匹配的更新權限(通常是用於創建糖果機的錢包)

const connection = new Connection('mainnet-beta');
const ownerPublickey = 'OWNER_PUBLICK_KEY';
const nftsmetadata = await Metadata.findDataByOwner(connection, ownerPublickey)
.filter((r) => r.updateAuthority === 'SOLANAWALLETADDRESS');

// Profit
console.log(nftsmetadata)

我這個問題並沒有得到太多的愛,但對於在 solana 之上構建 ui 的人來說,這並不明顯,而且很難弄清楚。 由於 solana 的 api 對某些人來說可能很多。 值得慶幸的是,Metaplex 社區在構建一些很棒的輔助方法方面做得非常出色,讓這一切變得超級簡單。

還要向 solana 食譜的人們大聲喊叫,你們幫助將這里的點連接起來。 你可以在這里看到更多很棒的 nft 相關助手:

https://solanacookbook.com/references/nfts.html#candy-machine-v2

感謝您跟進解決方案。 不幸的是,這項新技術的文檔和回復很少,所以我真的很感激。

對於發現此問題的任何其他人,findDataByOwner 現在已貶值。 我找不到什么,如果有的話,已經取代了它。 截至目前,如果您想要這個 function,您可以使用舊版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM