繁体   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