通过 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)

我这个问题并没有得到太多的关注,但是对于 uilding ui 在 solana 之上的人来说,这个问题并不明显,而且很难弄清楚。由于 solana 的 api 对某些人来说可能很重要。值得庆幸的是,Metaplex 社区在创建ui一些很棒的辅助方法方面做得非常出色,让这一切变得超级简单。

还要向 solana 食谱的人们大声喊叫,你们帮助将这里的点连接起来。你可以在这里看到更多很棒的 nft 相关助手:

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

感谢您跟进解决方案。不幸的是,这项新技术的文档和回复很少,所以我真的很感激。

对于发现此问题的任何其他人,findDataByOwner 现在已贬值。我找不到什么,如果有的话,已经取代了它。截至目前,如果您需要此功能,可以使用旧版本。